Шифрование в Dropbox-подобном Java-приложении - PullRequest
0 голосов
/ 02 октября 2011

Я думаю о шифровании в приложении.Архитектура состоит из:

  1. Сервер
  2. Настольный клиент
  3. Веб-клиент
  4. мобильный клиент

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

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

Как бы вы реализовали такое приложение?Я думаю об использовании Java для настольного клиента;один и тот же код шифрования теоретически может быть повторно использован в веб-клиенте GWT (скомпилирован в Javascript) и в клиенте Android.Однако это только в теории.

  1. Существует ли библиотека шифрования, доступная на всех этих платформах?
  2. Какие алгоритмы использовать?
  3. А как насчет закрытых ключей?Я могу каждый раз запрашивать пароль у пользователя, но как мне обеспечить, чтобы закрытые ключи были одинаковыми для одного и того же пользователя на всех клиентах?
  4. Я бы хотел избежать нескольких паролей;но если я использую один и тот же пароль как для данных, так и для аутентификации, как я могу запретить серверу передавать данные хакеру, который предоставил неверный пароль, или серверу, который может дешифровать данные пользователя, поскольку у него есть пароль пользователя?
  5. Какие есть возможные ошибки?

1 Ответ

2 голосов
/ 03 октября 2011

Вам на самом деле нужно несколько разных частей крипто.

Во-первых, вы хотите, чтобы клиент зашифровал файл для загрузки, а после извлечения зашифрованной полезной нагрузки расшифровал его.

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

Первая проблема требует алгоритма симметричного шифрования.Есть куча, но ваш лучший выбор, вероятно, AES.Если вы посмотрите на gwt-crypto , то у них есть оболочка для реализации java надувного замка.Это заботится о двух из трех ваших платформ.Я не работаю с платформой Android, но я был бы удивлен, если бы не было реализации AES.Что касается ключа, вы, вероятно, получите хеш пароля.Просто помните о возможности радужных столов и принимайте соответствующие меры.Пароль, используемый для шифрования файла, никогда не должен передаваться по проводам, так как я понимаю вашу модель, все шифрование и обман выполняется на клиенте.Поскольку вы упомянули системных администраторов в качестве потенциального злоумышленника, вам действительно нужно взглянуть на регистраторы ключей, дампы памяти и тому подобное, но это выходит за рамки конкретного вопроса, который вы задали.

Вторая проблема - это решенная проблемаиспользование TLS с клиентскими и серверными сертификатами.Клиенты для таких доступны для всех трех платформ, которые вы просматриваете.Тем не менее, хотите ли вы, чтобы ваши пользователи прошли через установку клиентских сертификатов, решать только вам.Существуют различные альтернативные варианты, но ни один из них не является проверенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...