Смущен тем, как работает Android Encryption - PullRequest
4 голосов
/ 15 мая 2011

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

SecretKey key = KeyGenerator.getInstance("DES").generateKey();

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

Ответы [ 3 ]

1 голос
/ 15 мая 2011

Я думаю, что есть два случая:

  1. Вы доверяете пользователю - пусть ключ зависит от некоторого ввода (пароль / пароль).и шифруйте / дешифруйте данные с его помощью.

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

Это относится как к симметричному, так и к асимметричному шифрованию.

1 голос
/ 15 мая 2011

Прежде всего, пожалуйста, не используйте DES. Это было сломано из многих лет. Вместо этого используйте AES .

У меня проблема в том, что я получаю мой ключ для шифрования и, очевидно, мне нужно тот же ключ для расшифровки.

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

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

Да, кто-то может это сделать.

Maybe I am missing something, but is there a way to generate a key using a supplied pass phrase?

Вы не используете ключ, используя фразу-пароль. Обычно вы делаете следующие вещи:

  1. генерация ключей
  2. зашифровать ключ, сгенерированный с помощью симметричного ключа, полученного из ключевой фразы

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

Может быть несколько причин. Например, вы можете сохранить ключ на съемном устройстве и просто подключить его к компьютеру для получения ключа, не вводя ключевую фразу. Наличие парольной фразы также имеет свой недостаток: парольная фраза должна быть запомнена, ее можно угадать, если она слишком длинная, вероятно, вы запишите ее (и это почти то же самое, что сохранить ее в файле)

EDIT:

для генерации ключа из пароля посмотрите на PBKDF2 ( соответствующий пост ).

0 голосов
/ 15 июля 2011

Да, можно использовать парольную фразу для шифрования.

Но сначала, дамп DES.Используйте AES-128.

Примите парольную фразу от пользователя и сгенерируйте хеш, используя SHA-256 или SHA-512.Обрезать хэш до 128 бит для AES-128.См. Этот пост.

Java AES и использование моего собственного ключа

Используйте соль, когда можете.

Относительно хранения парольной части.Храните хеш, а не пароль.Таким образом, вы можете помешать атакующему генерировать ключ.Попросите пользователя ввести надежный пароль.И не забывайте, что ваша соль тоже должна быть очень сильной.

Итак, в итоге вы сохраняете только хэш пароля.Пароль не сохраняется, и ключ для расшифровки не будет сохранен (он будет сгенерирован во время выполнения)

Надеюсь, это поможет.

...