Я — параноик. Шифрование данных внутри Dropbox (на примере Mac OS) редактировать

Я уже довольно давно пользуюсь Dropbox . Но только для несекьюрного контента. От хранения конфиденциальной информации (как то: пароли, профили Firefox с драгоценными куками или карты с местом захоронения фамильных драгоценностей) меня все время отталкивало осознание того, что мои данные потенциально может прочесть кто-то другой.

Да, я знаю, что мои файлы никому не нужны, и да, я представляю насколько мала вероятность того, что из всей кучи пользователей Dropbox злоумышленники решат прошерстить именно моё хранилище. Однако, паранойя — это тяжелый недуг, знаете ли. И иногда, вместо того, чтобы с ней бороться, лучше поддаться соблазну и пару часов покрасноглазить в угоду ей.

Что хотелось получить:

  • возможность создания шифрованной папки внутри Dropbox;
  • работа с данными внутри нее должна происходить максимально прозрачно для меня, а в идеале вообще не должна отличаться от работы с файлами внутри обычной папки;
  • решение должно работать в Mac OS X. Кроссплатформенность не обязательна, но приветствуется.

TrueCrypt


Первой мыслью было использовать проверенный временем Truecrypt , который, к тому же, есть для всех систем. Однако, подумав как следует, я понял, что это решение недостаточно «прозрачно» для меня. И вот по каким причинам:
  • Лишнее место : заранее заданный объем шифрованного контейнера, независимо от количества хранимой информации.
  • Лишние телодвижения : файл контейнера меняется только в момент отмонтированния шифрованного тома. Таким образом, чтобы зафиксировать изменения необходимо каждый раз его отмонтировать. А после синхронизации монтировать обратно.
  • Неоправданно большой траффик : даже если внутри контейнера поменялся только один байт, перезаливать придется весь контейнер целиком (что не слишком быстро, особенно если контейнер объемом в полгига, а скорость интернета оставляет желать лучшего). Как указали в комментах , дропбокс не перезаливает весь файл целиком, а только изменившиеся участки.

FileVault

Отказавшись от варианта «весь контейнер в одном файле», я решил копать в сторону file-by-file шифрования. В Mac OS Х для этих целей имеется встроенное средство: FileVault . Из плюсов этого решения можно отметить простоту установки: для его активации достаточно нажать кнопку «Turn On FileVault» в System Preferences → Security → File Vault. Однако мне оно не подошло, так как, во-первых, FileVault шифрует весь домашний каталог (а мне нужно только одну папку в Dropbox), а во-вторых, хотелось получить хоть какую-нибудь кроссплатформенность.

EncFS


В итоге я решил использовать для своих целей криптографическую файловую систему EncFS . Эта open-source ФС на базе FUSE позволяет прозрачно шифровать файлы, используя произвольную папку в качестве места для хранения зашифрованных файлов.

В нашем случае, в качестве места хранения шифрованных файлов мы укажем папку внутри Dropbox, а в качестве точки мотирования — папку в любом другом месте. Таким образом, синхронизироваться с сервером будет зашифрованный контент, а доступ к расшифрованному будет осуществляться через точку монтирования на нашем компьютере.

К сожалению EncFS пока доступна только для Unix-like систем. Проект по портированию ее на Windows существует , но в настоящий момент находится в зачаточном состоянии.

Установка
  1. Первым делом устанавливаем Dropbox и MacPorts (если они еще не установлены)
  2. Устанавливаем из портов пакет EncFS:
    $ sudo port install encfs

  3. Создаем две папки: одну — для шифрованных файлов, внутри дропбокса, а другую для расшифрованных — в любом удобном вам месте.
    $ mkdir ~/Dropbox/Encrypted
    $ mkdir ~/Documents/Decrypted

  4. Создаем шифрованный том:
    $ encfs /Users/%username%/Dropbox/Encrypted /Users/%username%/Documents/Decrypted
    Обратите внимание, что пути до папок должны указываться от корня. Вместо %username%, разумеется, нужно подставить ваше имя пользователя.

    Создание тома происходит в интерактивном режиме. Сначала мы получим предложение выбрать параметры шифрования:
    Creating new encrypted volume.
    Please choose from one of the following options:
    enter «x» for expert configuration mode,
    enter «p» for pre-configured paranoia mode,
    anything else, or an empty line will select standard mode.
    ?>
    Выбор Standard mode (любой символ, кроме «х» и «p») приведет к созданию тома со следующими параметрами:
    Cipher: AES
    Key Size: 192 bits
    PBKDF2 with 1/2 second runtime, 160 bit salt
    Filesystem Block Size: 1024 bytes
    Filename Encoding: Block encoding with IV chaining
    Unique initialization vector file headers
    Выбор Paranoia mode (символ «р») приведет к созданию тома с наиболее параноидальными настройками:
    Cipher: AES
    Key Size: 256 bits
    PBKDF2 with 3 second runtime, 160 bit salt
    Filesystem Block Size: 1024 bytes
    Filename Encoding: Block encoding with IV chaining
    Unique initialization vector file headers
    Message Authentication Code block headers
    External IV Chaining
    Ввод «x» ( Expert mode ) позволит вручную задать все параметры шифрования. Кратко о значении каждого из этих параметров можно прочитать, например, в Википедии .

    Далее нас попросят ввести и подтвердить пароль для доступа к ФС. На этом процесс создания шифрованного тома будет завершен.

  5. Осталось включить автомонтирование шифрованного раздела. Я сделал это, добавив следующую строчку в crontab (заменив %username% и %mypassword% на имя пользователя и пароль к разделу, соответственно):
    @reboot echo %mypassword% | /opt/local/bin/encfs --stdinpass /Users/%username%/Dropbox/Encrypted /Users/%username%/Documents/Decrypted


Итого

Итак, мы получили то, что хотели: при создании/редактировании файла в папке ~/Documents/Decrypted его зашифрованная версия появляется в ~/Dropbox/Encrypted и автоматически сихронизируется с сервером дропбокса:
image

Другие системы

Данное решение актуально не только для Mac OS, оно может быть с легкостью применено на FreeBSD или Linux. Отличия будут лишь в способе установки encfs (из исходников, из пакетов или из портов) и в способе автомонтирования раздела.

Убунтоводы могут почитать про настройку связки Dropbox+EncFS на Ubuntu Linux .
blog comments powered by Disqus

комментарии с хабра ( 53 )

  • Исповедь маньяка ;). А так полезно знать, что такое можно реализовать.

    ответить

    • Ну почему же, я как раз думаю об использовании encfs для offsite бэкапов.

      Ну не доверяю я своему хостингу настолько, чтоб хранить на нём тысячи байт конфиденциальной информации, а бэкап «вне дома» лишним не будет.

      ответить

  • По поводу TrueCrypt и трафика. Вроде как «алодятся» только изменённые фрагменты (binary diff).

    ответить

    • это такая фича дропбокса?

      ответить

    • Подтверждаю — только измененные. Проверено на 100 метровом контейнере. Дропбокс сольет только изменения.

      ответить

      • значит по этому пункту был неправ, сейчас поправлю статью.
        спасибо.

        ответить

    • Именно так и есть, проверяли путем добавления многомегабайтного файла и последующего его частичного изменения. В результате при первом добавлении файл заливался весь, после изменения только частично (видно было по времени затраченной на отправку при равно загруженном канале в обоих случаях).

      ответить

      • А при шифровании этого файла после изменений он скорее всего изменится почти весь (зависит от алгоритма шифрования конечно).

        ответить

  • И теперь на локальном диске кушается в два раза больше места?

    ответить

    • увы, за все надо платить :)
      к счастью, у меня не так много секьюрной информации. да и размер хранилища в дропбоксе — всего 2 гига. смешная цифра по современным меркам, даже если ее умножить на два.

      ответить

      • может проще тогда купит .mac/mobile me?

        ответить

        • а какая разница кому не доверять?

          ответить

          • я в том смысле что там места побольше да куча дополнительных сервисов для мака: синхронизация та же

            ответить

            • да, я знаю про плюсы mobile me. но мне они пока не нужны. в смысле, я пока не готов платить за них :)

              а 2-х бесплатных гигабайт дропбокса — самое то.

              ответить

              • Кроме того, если по вашей наводке (refferal) зарегистрирутся товарищ, то и вы, и он получат дополнительно 250мег.
                Однако у дропбокса есть лимит на дополнительное бесплатное место — 3 гига, если не ошибаюсь.

                ответить

            • Ну «места побольше» и в случае оплаты аккаунта на дропбоксе. :) 10$/50gb

              ответить

        • А смысл? Параноик и туда будет лить шифрованный контент + еще платить за придется за хранение.

          ответить

    • Поверьте, объёмы данных, которые обычно нужно шифровать, весьма незначительны, чтобы ваше предположение стало преградой к использованию описанной схемы.

      ответить

    • Почему? encfs хранит только зашифрованную копию, расшифровка проходит налету.

      ответить

  • Вот теперь можно доверить Keychain, ~/.ssh и 1Password дропбоксу. Спасибо за идею.

    ответить

    • Как, у вас ssh-ключ и keychain без пароля?! Ну и какой же вы после этого параноик?

      ответить

  • Чудесное описание, спасибо.

    Поскольку я слабо разбираюсь в алгоритмах шифрования, то хотел бы спросить следующее:
    возможно ли данные, которые были зашифрованы на одной машине, читать (дешифровать) на другой? Просто у меня один мак дома и один на работе. И часто приходится разного рода вещи перекидывать через DropBox.

    Полагаю, вопрос весьма ламерский, но Вы уж извините за мою неосведомлённость, просто хотелось бы в этот момент внести максимальную ясность.

    ответить

    • если и на работе и дома мак, то да. ключ шифрования ФС лежит в самой папке, закодированный вашим паролем. поэтому все, что вам нужно — это правильно подмонтировать раздел на каждой машине.

      ответить

  • Разве FileVault в этом случае вообще сработает? Он же вроде при копировании из под твоего акка все дешифрует.

    ответить

  • А как макось поняла, что у файлика должна быть иконка иллюстратора??

    ответить

    • У шифрованного конечно

      ответить

      • Макось сораняет привязки к приложениям в том числе и пофайлово. Рискну предположить, что в процессе шифрования encfs оставляет все мета-аттрибуты as is.

        ответить

        • Но остальные файлы поломались, судя по картинке

          ответить

          • Возможно конкретно этот .ai выйл был открыт в иллюстраторе, что не соответствовало приложению по умолчанию в момент открытия — что и было записано в его метаданных

            ответить

  • че-то в превью к посту столько про параною написано… может стоило просто какие-то таблеточки от нее попить или зеленкой помазаться?

    ответить

  • Трукрипт контейнер можно сделать «плавающего» размера. С некоторыми, незначительными, ограничениями.

    ответить

  • private_face, а от каких атак вы хотели защитить контент?
    1) от чтения из папки другой программой
    не зашитит, т.к. доступ есть почти у всех на уровне FUSE
    2) от сниферов в сети
    не защитит, если файл синхронизируется в первый раз
    3) от других пользователей компьютера
    защитит очень хорошо, не зависимо от привилегий

    ответить

    • Из статьи pragmattica.wordpress.com/2009/05/10/encrypting-your-dropbox-seamlessly-and-automatically/ , я понял, что dropbox не входит в fuse, поэтому для dropbox папки зашифрованны, т.е. в 3-х выше описанных случаях защита есть. Это очень удобно и эффективно.

      ответить

    • Защитить хотелось от владельцев сервиса Dropbox или, скажем, от случая, если в нем найдут уязвимость, позволяющюю просматривать хранилища других пользователей.

      Расскажите подробнее про назащищенность от снифферов в сети. https + шифрование данных — недостаточная защита?

      ответить

      • Вопросы отпали.
        А вы пользовательскую лицензию не читали случаем, там наверняка они снимают ответственность с себя в случае утери данных)

        ответить

        • Я читал. Естественно снимают :) Даже могут сами удалить все твои данные, если это понадобиться )

          ответить

  • Кстати, встроенное виндовое средство для шифрования похоже отлично для этого подходит.
    Только кроссплатформенности не получится в принципе.

    ответить

    • А какое это средство?

      ответить

      • EFS.
        Правой кнопкой на файле-папке и там в свойствах выбрать Шифровать.
        Ключ шифрования будет привязан к паролю в систему.

        ответить

        • А может быть вы в курсе, есть ли простой способ сделать закрытую папку, чтоб в нее входить по паролю?

          Чтоб как можно меньше мороки с ключами, сертификатами, суперсложным шифрованием, но в тоже время папочка была прикрыта.

          Все, что мне попадалось — слишком сложное, для ЦРУ и КГБ минимум. А мне бы так, для домашних нужд.

          ответить

          • Не, подобным не пользуюсь.
            Но точно знаю что таких программ полно. Погуглите, легко найдете.

            ответить

  • Вы лишаете себя возможности скачивать свои файлы (через вебинтерфейс например) на другой компьютер не установив EncFS на него. Было бы не плохо иметь незашифрованную подпапку для «не очень секурных» файлов.

    ответить

    • Я поступил наоборот: в моем дропбоксе все, кроме подпапки Encrypted лежит незашифрованным и я могу свободно добраться до него через веб-интерфейс.

      ответить

  • Как вариант — можно использовать spideroak вместо дропбокса.

    ответить

    • ух ты, не знал о таком сервисе.
      нет возможности шарить файлы для публики, но для секьюрных вещей — то что надо.

      ответить

      • Я тоже только вчера узнал, но впечатлился подходом учаснегов к безопасности. Всем бы так.

        ответить

    • Спасибо за наводку на SpiderOak !

      ответить

  • НЛО прилетело и опубликовало эту надпись здесь.
  • Методом проб и ошибок я тоже пришёл к EncFS, думал даже статью написать, а она есть :)
    Единственное, что у меня по-другому — я не шифрую имена файлов, это помогает откатиться к предыдущим версиям файлов в случае необходимости.

    ответить