Какой из этих методов шифрования более безопасен? Почему?

StackOverflow https://stackoverflow.com/questions/19846172

Вопрос

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

  • Создайте 128-битный IV из хэширования имени файла и системного времени и напишите это в начало файла.
  • Создайте 256-битный ключ из пасфразы с использованием SHA256.
  • Зашифруйте данные (начиная с 32-разрядной статической подписи) с помощью этого ключа, используя AES в режиме CBC, и напишите в файл.

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

Однако я смотрел на Пример AES Предоставлено в Polarssl (Библиотека, которую я использую, чтобы сделать хеширование и шифрование), и они используют гораздо более сложный метод:

  • Создайте 1288-битный IV из хэширования имени файла и размещения файла и напишите это в начало файла.
  • Создайте 256-битный ключ из Hashing (SHA256) Пасс-фраза и IV вместе 8192 раз.
  • Инициализируйте HMAC с помощью этого ключа.
  • Зашифруйте данные с помощью этого ключа, используя AES в режиме CBC, и запишите их в файл, обновляя HMAC с каждым зашифрованным блоком.
  • Напишите HMAC до конца файла.

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

  • Если это более безопасно, каковы причины для этого?
  • Добавление HMAC к окончанию файла более безопасным, чем подпись в начале зашифрованных данных?
  • Увеличивает ли Hashing 8192 раза безопасность?

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

Это было полезно?

Решение

Второй вариант более безопасен.

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

Хэшируя ключ 8192 раз, он добавляет дополнительные вычислительные шаги, чтобы кто -то попытался BruteForce ключ. Предположим, что пользователь выберет пароль на основе словаря. С вашим методом должен выполнить злоумышленник SHA256(someguess) а затем попробуйте расшифровать. Однако с версией PolarsSL им придется рассчитать SHA256(SHA256(SHA256...(SHA256(someguess))) 8192 раз. Это только замедлит злоумышленника, но этого может быть достаточно (пока).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top