Проверьте пароль перед расшифровкой - PullRequest
0 голосов
/ 23 июля 2010

Я пишу небольшую программу (C ++) для шифрования / дешифрования файлов. Перед расшифровкой я хотел бы проверить правильность введенного пользователем пароля. Моя идея:

  • Добавьте в начало файла некоторую строку (например: «ХОРОШО»);
  • Зашифровать файл
  • При дешифровании сначала расшифруйте начало файла и проверьте наличие строки «GOOD»

Это правильно?

Ответы [ 5 ]

8 голосов
/ 23 июля 2010

Основной совет по шифрованию: не применяйте его самостоятельно.Есть множество отличных библиотек .

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

(Разумеется, я не предполагаю, что Брюс когда-нибудь ошибется !)

4 голосов
/ 23 июля 2010

Вместо "хорошей" строки я бы предложил использовать какую-то контрольную сумму, например, MD5, CRC, SHA256 и т. Д. Эта контрольная сумма будет вычислена из первых нескольких байтов (например, 128) файла.

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

3 голосов
/ 23 июля 2010

Возможно, вы захотите сохранить в начале некоторую хеш-функцию файла, такую ​​как MD5.

2 голосов
/ 23 июля 2010

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

1 голос
/ 23 июля 2010

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

Чтобы расшифровать:

  • Запросить пароль у пользователя
  • Хешировать пароль с помощью SHA256
  • Расшифровать файл, используя хэш пароля в качестве ключа
  • Вычисление CRC расшифрованного файла
  • Если вычисленный CRC соответствует тому, что было добавлено после текста шифра, пароль был правильным.Если они не совпадают, ключ не был хорошим, и вы расшифровали мусор, что означает, что пароль не был хорошим.

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

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