Ответ 1
Вы можете добавить контрольную сумму (например, MD5 исходного содержимого) в конце файла. После того, как вы расшифруете его, последние 16 байтов должны быть снова равны md5 (content-16 bytes)
При использовании алгоритма blowfish из библиотеки openssl можно шифровать и дешифровать любые данные.
Кроме того, любые данные могут быть зашифрованы (дешифрованы) любым ключом \iv. В openssl нет способа определить, было ли дешифрование успешным или нет. Это просто математическое преобразование.
Итак, что мне делать, чтобы убедиться, что шифрование прошло успешно: некоторые данные были дешифрованы с помощью того же ключа /iv, который был зашифрован?
Должен ли я добавить несколько MAGIC-байтов перед данными, которые необходимо проверить после дешифрования?
Вы можете добавить контрольную сумму (например, MD5 исходного содержимого) в конце файла. После того, как вы расшифруете его, последние 16 байтов должны быть снова равны md5 (content-16 bytes)
Из множества возможных решений, возможно, стоит рассмотреть CRC.
метод контрольной суммы в конце данных лучше всего, я думаю, однако вам нужно, чтобы вы расшифровали весь контент до конца.
с этой точки зрения, магические байты в начале будут преимуществом, потому что вы можете решить, было ли дешифрование успешным в самом первом блоке. однако можно утверждать, что, проверяя исходный код, злоумышленник имеет возможное преимущество (частично известный сценарий открытого текста).
так что я сделал (наконец, в продуктивном программном обеспечении) использовал сам ключ для первого блока (вместо использования постоянных или прогнозируемых магических байтов). это приводит к следующим дополнительным знаниям для злоумышленника:
key = decrypt(ciphertext, key)
Я не нашел доказательства того, что это было бы полезным советом для злоумышленника, если вы используете, например, AES. возможно, кто-то знает об этом больше.
Магические байты, контрольные суммы и зашифрованный ключ шифрования делают все гораздо проще, чем атаки злоумышленника, а затем использовать возможности 2256, где он может запускать сообщение через расшифровку и искать эту магию или контрольную сумму или ключ внутри дешифрованные данные. Ему гораздо труднее сломать его, если ему нечего искать, а это значит, что он может сломать его и никогда не осознает.