Как безопасно хранить крипто-пароль - PullRequest
3 голосов
/ 18 марта 2011

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

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

Что вызывает эту проблему, так это то, что необходимо выполнить несколько требований:

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

Edit: Мне не нужно иметь очень высокий уровень безопасности. Злоумышленнику должно быть немного сложнее получить ключ, просто открыть распределенный файл JAR и получить ключ в виде простого текста.

Любые советы будут оценены.

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Для каждого файла создайте новый ключ. Зашифруйте файл этим ключом (используя AES).

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

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

Формат файла может использовать синтаксис криптографических сообщений PKCS # 7 или OpenPGP.

0 голосов
/ 18 марта 2011

Предостережение: я не очень разбираюсь в безопасности, и это просто то, что приходило мне в голову.

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

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

...