Как проверить, успешно ли расшифровка?

При использовании алгоритма blowfish из библиотеки openssl можно шифровать и дешифровать любые данные.

Кроме того, любые данные могут быть зашифрованы (дешифрованы) любым ключом \iv. В openssl нет способа определить, было ли дешифрование успешным или нет. Это просто математическое преобразование.

Итак, что мне делать, чтобы убедиться, что шифрование прошло успешно: некоторые данные были дешифрованы с помощью того же ключа /iv, который был зашифрован?

Должен ли я добавить несколько MAGIC-байтов перед данными, которые необходимо проверить после дешифрования?

Ответ 1

Вы можете добавить контрольную сумму (например, MD5 исходного содержимого) в конце файла. После того, как вы расшифруете его, последние 16 байтов должны быть снова равны md5 (content-16 bytes)

Ответ 2

Из множества возможных решений, возможно, стоит рассмотреть CRC.

Ответ 3

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

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

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

key = decrypt(ciphertext, key)

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

Ответ 4

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