безопасно и удобно передавать один файл с рабочего стола на мобильный компьютер

Я ищу удобный способ безопасного переноса одного файла с настольного компьютера A на мобильный компьютер B. A работает под управлением Linux, B — под управлением Android. Под «надежно» я имею в виду, что:

а) файл не должен передаваться третьим лицам и

б) А и В не доверяют друг другу. Я специально спрашиваю, как передать один файл.

c) Это должно быть так же просто, как выбрать этот файл в файловом менеджере

Обновление 2016-11-24

Я ожидаю нерегулярные передачи, другими словами, передача обычно является первой передачей между A и B, и они не были настроены для этой передачи ранее. A и B подключены к Интернету. (Ну что сейчас не подключено к интернету?) Но:

г) хотя бы один компьютер не имеет глобального IP-адреса или

д) оба не имеют глобального IP-адреса.

Рассмотрим случаи (d) и (e) отдельно.

Какие схемы могу придумать.

  1. B подключен как хранилище MTP. Тогда доступна даже внутренняя флэш-память B. Противоречия (б).
  2. Для проводного или беспроводного Ethernet требуется настроить сеть, затем какой-либо сетевой сервер (например, FTP, HTTP), а затем схему аутентификации. Эта схема плоха на (с).
  3. В принципе, подключение по кабелю или оптическому каналу не требует аутентификации, потому что я вижу, к какому устройству А или Б подключено. Так что подходит (с) лучше, чем беспроводное соединение. Но я не знаю, как эксплуатировать кабель без Ethernet или какая программа может передать файл по оптическому каналу.
  4. Перемещение устройства флэш-памяти между A и B. Очистка всего раздела, содержащего файл, программой Unix «shred» удовлетворяет (a). Низкий уровень (с).
Устроит ли вас программа, которая обслуживает файл по локальной сети?
@zondo: это зависит от безопасности и стоимости установки вашего решения. Я ожидаю нерегулярных переводов, другими словами, перевод обычно является первым переводом между A и B. (Я не упомянул об этом в вопросе, извините. Исправлено.) A и B подключены к Интернету. (Ну, что сейчас не подключено к интернету?) Но г) хотя бы один компьютер или д) оба не имеют глобального IP-адреса. Рассмотрим случаи (г) и (д) отдельно.
Я не понимаю, что это вопрос рекомендации программного обеспечения...
@Jan Doggen: На самом деле, я согласен с тем, что вопрос стоит между программным обеспечением и безопасностью, но мне не разрешено публиковать сообщения. 😉
Удалить его здесь и поместить на security.stackexchange.com ? Я думаю, у вас гораздо больше шансов получить ответы там. Позаботьтесь о том, чтобы переформатировать / переписать свой вопрос, эти c) d) e) затрудняют чтение.
схема 2 неплоха на c, если использовать вменяемое клиентское приложение. Для этой цели я использую расширение Firefox (сейчас не помню точное название)
также то, что вы называете Linux, на самом деле является GNU/Linux. или, если вы предпочитаете указывать только имя ядра, замените Android на Linux.
@Sarge Borsch: «схема 2 неплоха на c, если вы используете нормальное клиентское приложение». Понимаете, это вопрос. Какая программа? ;-)
@Jan Doggen: Извините, я использую (a), (b) и тому подобное, чтобы сделать его кратким и точным. Это не литературный конкурс. Я считаю, что тот, кто не может следовать ссылкам, не может дать вдумчивого совета.
Мое замечание касалось компоновки - это был беспорядок. Стив подчистил твой вопрос.
@beroal play.google.com/store/apps/… например. У него грубый пользовательский интерфейс, но он выполняет свою работу.

Ответы (3)

Вы можете использовать для небольших текстовых файлов преобразование в QR-код, например, с помощью библиотеки QR-кода Python и командной строки , на экране ноутбука и отсканировать его с помощью одного из многих клиентов Android на телефоне, таких как QR Droid .

Обратите внимание, что QR-коды также можно использовать для ввода сведений о подключении к WiFi, поэтому вы можете использовать сценарий для создания временного подключения к WiFi со случайным кодом доступа и генерировать QR-код для этого подключения — это сократит время настройки. Тот же самый сценарий мог бы настроить FTP (например: twistd -n ftp) , чтобы разрешить загрузку и загрузку или веб-сервер (например: python -m SimpleHTTPServer) , загрузку только с доступом только к указанному каталогу. Это также может вывести QR-код, который нужно отсканировать, чтобы добраться до нужного места.

Весь код, упомянутый в этом ответе , за исключением QR Driod :

  • Бесплатно, бесплатно и с открытым исходным кодом
  • Кроссплатформенность, включая Windows, OS-X и Linux
  • Вероятно, уже установлен в вашей системе Linux или прост в установке с помощьюpip
Есть ли способ запустить эти HTTP- и FTP-серверы, чтобы они предлагали зашифрованные и аутентифицированные соединения? (Я предполагаю, что пароль подключения может быть передан через QR-код.) В противном случае это неприемлемо.
Я чувствую, что рекомендации по программному обеспечению постепенно скатываются к созданию программного обеспечения. Вот чего я боялся. ☹
@beroal - можно настроить сервер с аутентификацией - хотя это занимает чуть больше одной строки. Чем конкретнее и необычнее ваши требования, тем больше вам нужно настраивать программное обеспечение, иначе вам придется работать так, как кто-то в крупной компании решил за вас.

Возможность включает в себя:

  • Передача файлов Blu-tooth с минимальной аутентификацией и настройкой пользователя и возможностью только индивидуального общения.

Аутентификация Bluetooth обычно заключается в том, что одно устройство запрашивает PIN-код, который случайным образом генерируется и отображается на другом устройстве. Вы можете выполнить сопряжение устройств, чтобы позволить восстановить соединение, когда 2 устройства находятся в пределах досягаемости друг друга, не выполняя этот шаг, а некоторые устройства, например наушники, пропускают этот шаг или имеют фиксированный PIN-код. После того, как связь настроена, вы можете, как правило, иногда по желанию , указать общие папки, чтобы позволить другому устройству загружать/загружать контент с помощью интерфейса типа проводника.

Что вы подразумеваете под "минимальной аутентификацией"? Что Bluetooth обеспечивает слабую аутентификацию? Тогда это точно не приемлемо.
Передача QR-кода кажется возможной. Я предлагаю вам поместить свои решения в 2 ответа, потому что они совершенно разные.

Это нетривиальная проблема, не совсем подходящая для Softwarerecs.SE IMO.

Тем не менее, здесь идет. (Если повезет, если вопрос будет перенесен в Security.SE, этот ответ будет перенесен вместе с ним.)

Существуют различные потенциальные решения, стоимость реализации которых сильно различается.

Прежде всего, конечные точки должны быть защищены от любых атак, которые могут раскрыть то, что передается. Например, атаки TEMPEST.

Если вы используете дистанционную (например, беспроводную или оптическую) связь, то существует риск прослушивания, если только два компьютера не находятся в контейнере (например, клетке Фарадея или светонепроницаемом ящике или комнате, соответственно), непроницаемом для задействованных сигналов.

Если вы используете проводную связь, вы должны быть уверены, что средство связи невосприимчиво к атакам в стиле TEMPEST. Доступны специальные кабели USB и Ethernet и т. д. по высокой цене, которые предположительно отвечают этому требованию. (Или, опять же, возможно, вы могли бы построить или купить подходящую комнату или коробку.) Но вы также должны учитывать риск того, что A или B скомпрометируют другого через соединение, например, путем попытки использовать сетевой стек. Таким образом, чем проще протокол, тем лучше для минимизации TCB. Что-то вроде последовательного (может быть, через порт JTAG на B?) может быть вашим лучшим выбором на этом фронте.

Наконец, если вы используете съемные носители, то вам следует подумать о том, как избежать передачи вредоносного ПО из точки А в точку Б. Это может произойти с помощью микросхем контроллера (например, BadUSB), если они есть, или с помощью других эксплойтов, расположенных выше по стеку.

Одним из разумно безопасных вариантов может быть:

  • используйте съемный носитель, свободный от микропрограммы контроллера, например дискету или ZIP-диск (я думаю, что они не содержат микропрограммы), или CD-R, или DVD+/-R, или BD-R; и
  • иметь пару дисков для этого носителя, один из которых подключен к A, а другой к B, чтобы избежать, например, передачи BadUSB из A в B; и
  • подпишите файл на A перед его записью на съемный носитель и проверьте подпись на B после его чтения со съемного носителя (например, используя GnuPG или один из его интерфейсов для создания и проверки подписей); и
  • выполняйте это в максимально защищенной от TEMPEST среде, насколько это возможно.
«Если вы используете дальнюю (например, беспроводную или оптическую) связь, то существует риск прослушивания, если только два компьютера не находятся в контейнере». Есть более дешевое решение. Целостность дает конфиденциальность по алгоритму Диффи-Хеллмана, поэтому достаточно иметь целостность, чтобы защитить себя от подслушивания. TEMPEST не является атакой на передачу, поэтому ее не следует касаться в данном вопросе.
@beroal, но хостам не доверяют. Таким образом, оснащение любого из них механизмом для дальней связи (например, приемопередатчиком IrDA или WiFi) позволит им открыть удаленный побочный канал. Единственный очевидный способ заблокировать это - каким-то образом ослабить сигнал побочного канала, отсюда и мое предложение.