Будут ли проблемы с использованием шифрования с закрытым / открытым ключом для сохранения пароля? - PullRequest
1 голос
/ 16 декабря 2011

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

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

Однако этот метод, похоже, не используется широко.Так есть ли недостатки?Если да, то какой?

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Есть несколько недостатков.Среди них:

  • Теперь у вас есть токен, который необходимо защитить.Если кто-то получает ваш секретный ключ, у него есть все пароли, которые были зашифрованы этим ключом.Асимметричное шифрование не так важно, если вы «потеряете» закрытый ключ, но вам лучше помолиться, чтобы все его копии исчезли.Хэши не могут быть расшифрованы, точка.
  • Зашифрованный пароль может быть практически любой длины, и, следовательно, для его хранения потребуется довольно большое поле в базе данных (или ограничения длины для открытого текста).Хеши имеют известную длину.
  • Если вы можете расшифровать пароль, вы его знаете.Если когда-либо возникла проблема с кем-то, использующим этот пароль для взлома чего-либо, то каждый, кто знал, что пароль принадлежит этому пользователю, является подозреваемым.Теперь это означает, что вы.Даже если вы используете одностороннее шифрование в качестве хэша, вам лучше доказать, что вы не можете его расшифровать, а затем, если вы не хотите его дешифровать, зачем шифровать?

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

1 голос
/ 16 декабря 2011

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

Во-вторых, вы все еще страдаете от ограниченной энтропии с шифрованием с открытым ключом, ваша битовая строка будет по-прежнему ограничена. Если вам нужно больше битов, используйте хэш с большим внутренним состоянием (SHA-512, Whirlpool и т. Д.)

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

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

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

Итак, нет, этот метод не должен использоваться, потому что он саморазрушителен. Используйте хеш с большим внутренним состоянием.

...