CloudMailRu icon indicating copy to clipboard operation
CloudMailRu copied to clipboard

Шифрование на лету (paranoidal mode)

Open pozitronik opened this issue 8 years ago • 63 comments

Идея: настраиваемое шифрование на лету. При копировании в облако файл предварительно шифруется, при извлечении - дешифруется. При работе через плагин всё прозрачно, при использовании других клиентов потребуется сторонний дешифратор.

pozitronik avatar May 04 '16 10:05 pozitronik

Я думаю, можно это делать не для всего аккаунта, а только для определённого списка папок. Да, шифрование можно сделать совместимым с некоторыми стандартными шифровальными утилитами в Linux.

vmchaz avatar Aug 01 '16 17:08 vmchaz

Как удобно сделать некий список шифруемых каталогов - я не очень представляю, но тут можно подумать. Со способом шифрования можно вот как поступить: не вшивать шифровалку в плагин, а просто пропускать поток копирования через какую-то шифровалку на лету. Таким образом, каждый параноик сможет использовать свою утилиту.

pozitronik avatar Aug 01 '16 18:08 pozitronik

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

Например файл .encrypted в корне каталога, как признак необходимости шифрования? Чтобы не заморачиваться с настройкой в плагине.

stayathome avatar Aug 02 '16 08:08 stayathome

Отличная идея!

pozitronik avatar Aug 02 '16 08:08 pozitronik

Да, ещё. В свете того, что mail.ru, по некоторым сведениям, может удалять криптоконтейнеры, возможно, имеет смысл использовать стеганографию, делая из них .avi-файлы. Содержимое их не столь важно, главное, чтобы автоматический детектор выдавал тип "видео"

vmchaz avatar Aug 02 '16 12:08 vmchaz

Например файл .encrypted в корне каталога, как признак необходимости шифрования? Чтобы не заморачиваться с настройкой в плагине.

причём этот файл и содержит, например, и используемый метод шифрования (для расширения поддерживаемых методов, а путь файла можно передавать "шифровалке"; и тогда его, вероятно, лучше назвать .encryption)

ashumkin avatar Aug 08 '16 09:08 ashumkin

Есть информация (лично не проверял), что mail.ru удаляет шифрованные файлы из облака (вплоть до бана аккаунта). Судя по всему, шифрованным считается файл с неопознанной сигнатурой, т.о. нельзя применять только чистое шифрование, это должна быть какого-то рода стеганография.

pozitronik avatar Aug 02 '17 06:08 pozitronik

А информация по блокировки шифрованных файлов актуальная или Вы это давно слышали? Больше года храню на 7 аккаунтах зашифрованные файлы, пока без последствий. Но очень не хочется их лишиться.

NewSky13 avatar Aug 13 '17 08:08 NewSky13

Пока я сам не проверил, будем считать, что это из разряда ОБС.

pozitronik avatar Aug 13 '17 14:08 pozitronik

Понемногу оформляю задачу.

  1. Добавляю в плагин поддержку какой-то симметричной криптосистемы (попробую начать с AES). Желательно найти реализацию с открытым кодом для Delphi, но допустимо через стороннюю библиотеку на другом языке, если её код открыт.
  2. Не даём пользователю сохранить ключ в открытом виде. Либо спрашиваем его перед каждой сессией, либо храним в менеджере паролей TC.
  3. Для каждого аккаунта задаётся свой ключ шифрования.
  4. Для каждого аккаунта будет галка "Encrypt data". Если она отключена, содержимое Облака трактуется as is, если включена - файлы на лету шифруются/расшифруются. Делать атрибутирование шифрования через какие-то файловые метки - плохой вариант (это прямое указание на зашифрованность данных, плюс этот атрибут придётся связывать с данными и учитывать при файловых операциях, довольно геморно и ненадёжно).
  5. Опционально включается шифрование имён файлов, в этом случае должен использоваться другой ключ шифрования.
  6. Несколько раз встречал информацию, что криптоконтейнеры mail.ru отслеживает и аккаунты лочит. Криптоконтейнер, увы, отслеживается на раз: каждый файл имеет свой уникальный хеш-идентификатор в облаке, по хешу можно узнать количество копий файла во всех аккаунтах. Достаточно проанализировать уникальные файлы (криптоконтейнеры будут такими с вероятностью, близкой к единице), хотя бы на соответствие данных расширению (да в принципе это анализируется). Может ли тут помочь стеганография - вопрос открытый, но при возможности её стоит добавить.

pozitronik avatar Oct 03 '17 14:10 pozitronik

Это прекрасная новость!

NewSky13 avatar Oct 03 '17 14:10 NewSky13

@pozitronik ,

Желательно найти реализацию с открытым кодом для Delphi,

DCPCrypt?

ashumkin avatar Oct 04 '17 07:10 ashumkin

DCPCrypt?

Да, это единственное, что находится по теме, скорее всего оно и будет. Я пока не знаю, какой из форков выбрать, они все выглядят одинаково заброшенными.

pozitronik avatar Oct 04 '17 08:10 pozitronik

видимо, там менять нечего ))) всё и так работает )))) вот только в этом форке https://bitbucket.org/nijusss/dcpcrypt2010-sss_no_ansistring/commits/all была добавлена поддержка под Android (которая лишь из-за того, что там нет типа AnsiString)

ashumkin avatar Oct 04 '17 09:10 ashumkin

Я пока взял этот форк, но, думаю, они взаимозаменяемы.

pozitronik avatar Oct 04 '17 09:10 pozitronik

ну, по коду - вероятно, да, только судя по коммиту https://sourceforge.net/p/dcpcrypt/code/12/, структура немного изменена а я, при всём богатстве выбора, брал бы из Git-репозиториев (так удобнее держать у себя локальную копию, и которую потом легко синхронизировать с обновлёнными версиями) (впрочем, SVN-репозитории я тоже через git-svn засовываю в Git ;) )

ashumkin avatar Oct 04 '17 09:10 ashumkin

Я не буду включать код в плагин. А для инсталляции компонентов в среду разработки структура значения не имеет.

pozitronik avatar Oct 04 '17 09:10 pozitronik

выпуск релизов из IDE только на машине разработчика? ооок...

ashumkin avatar Oct 04 '17 09:10 ashumkin

выпуск релизов из IDE только на машине разработчика? ооок...

Глупость. Зависимость будет указана в документации, желаешь свою сборку - ставь компонент, собирай.

pozitronik avatar Oct 04 '17 09:10 pozitronik

поверьте мне - отнюдь, не глупость я наелся (да и ем периодически) свистоплясок пол дня, а то и больше, лишь с тем, чтобы заставить проект хотя бы скомпилироваться, вместо того, чтобы его уже исправлять

про отсутствие тестов в новых проектах я вообще уж молчу ))

ashumkin avatar Oct 04 '17 09:10 ashumkin

поверьте мне - отнюдь, не глупость

Ок, я подумаю над включением DCPCrypt подмодулем. Но вообще это именно что компонент, и нет никакой разницы из каких исходников собирать и ставить bpl. Вариант "форкнуть и юзать исходники" не рассматриваю.

я наелся (да и ем периодически) свистоплясок пол дня, а то и больше, лишь с тем, чтобы заставить проект хотя бы скомпилироваться

Это романтика опенсорса =). Интересно не потому что работает, а потому что не работает.

про отсутствие тестов в новых проектах я вообще уж молчу

Мне тесты писать неинтересно, да и не умею. Есть желание и возможности - жду пулл-реквестов, может и сам научусь. Библиотека в Delphi 10+ собирается без всяких свистоплясок, спулил-открыл-собрал.

pozitronik avatar Oct 04 '17 09:10 pozitronik

Есть желание и возможности - жду пулл-реквестов, может и сам научусь.

диссонирует с

Мне тесты писать неинтересно

проверено не на одном проекте в продакшне ) пока не заставишь использовать тесты (а это можно сделать только путём сборки и прогона тестов на CI-сервере), их никто из тех, кому они неинтересны/не умеет, использовать не будет

я не навязываю... но лично я не испытываю ни толики уверенности при работе с кодом, не покрытым тестами, даже старым своим (без тестов), а уж с чужим...

ashumkin avatar Oct 04 '17 10:10 ashumkin

Ну, с одной стороны тесты - хорошо, но тесты писать тесты на glue code между интеграцией TC, сторонним шифровальщиком и загрузкой в облако... Удовольствие на троечку. Если знаешь и умеешь - еще можно попробовать, если нет - вряд ли толк выйдет.

areht avatar Oct 04 '17 10:10 areht

Мы в оффтопик ушли. Порядка ради, всё, что не касается тикета напрямую обсуждаем в новых тикетах.

pozitronik avatar Oct 04 '17 10:10 pozitronik

Мы в оффтопик ушли

сорре, но я допишу 2 @areht: писать тесты надо на то, что твой код делает/подразумевает делать ) а уж чем он там является - glue code или wrapper - дело десятое удовольствие появляется там, где тесты ЕСТЬ, какие бы они ни были там, где тестов нет, и удовольствия (лично у меня) нет

ashumkin avatar Oct 04 '17 11:10 ashumkin

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

Если не согласны - присылайте пулреквесты с полезными тестами, заодно ci настроите.

areht avatar Oct 04 '17 11:10 areht

Разлочу обсуждение, когда будет что обсуждать.

pozitronik avatar Oct 04 '17 11:10 pozitronik

  • [x] Для аккаунтов с включённым шифрованием имён файлов отключать поддержку файловых описаний (трекинг).

pozitronik avatar Oct 12 '17 09:10 pozitronik

  • [ ] В случае, когда включено шифрование имён файлов, возможна следующая ситуация: по пути файла, полученному при шифровании имени, уже находится другой файл (например, предыдущая версия с этим же именем, шифрованная тем же ключом). Поскольку для API облака это выглядит, как попытка записать данные по пути с ключом CLOUD_CONFLICT_STRICT, вернётся ошибка. Решение: проверять существование файла по шифрованному пути, возвращать FS_COPYFLAGS_EXISTS_SAMECASE для запроса действия пользователя, и дальше действовать по его выбору.

pozitronik avatar Oct 12 '17 11:10 pozitronik

  • [x] Просмотр зашифрованных файлов в облаке не работает.

pozitronik avatar Oct 12 '17 11:10 pozitronik