Я работаю над проектом, который включает отправку некоторых очень маленьких зашифрованных сообщений через высокопроизводительное сокетное соединение с использованием UDP. В других статьях я читал, что минимальное количество байтов, которое AES должен шифровать 128-битным ключом, - это размер блока, равный 16 байтам.
Но реальный вопрос - достаточно ли этого, чтобы обеспечить хорошую защиту? Я подумываю об использовании схемы, которая добавила бы некоторые случайные данные в сообщение и получила бы случайное число от 1 до 12, которое использовалось бы для размещения 4 байтов реальных данных в блоке. Нулевой байт в блоке будет случайным числом, которое является начальной позицией в блоке из 4 байтов. После создания блока он будет зашифрован с помощью AES с использованием 128-битного ключа. Данные не имеют никакого значения после отключения клиента, и соединения не должны длиться более 24 - 48 часов максимум. Будет ли что-то подобное работать, или я должен отправить больше данных, чтобы потенциальному противнику было сложнее взломать?
Я также буду шифровать другие данные, которые необходимо защитить после отключения пользователя, например номера кредитных карт, данные банковского счета, хэш пароля и т. Д. Я планирую использовать для этого AES с 256-битными ключами. Итак, тот же вопрос для этого случая - какое минимальное количество байтов должно быть зашифровано, чтобы обеспечить хорошую защиту для 256-битных ключей? Будет ли достаточно 16 байт или 32 будет лучше?
Я планирую использовать быстрый движок AES для маленьких сообщений. См:
http://www.bouncycastle.org/csharp/index.html
http://www.bouncycastle.org/docs/docs1.6/org/bouncycastle/crypto/engines/AESFastEngine.html?is-external=true
Что касается 256-битного шифрования AES, я подумываю использовать RijndaelManaged, так как он, кажется, обладает лучшими функциями безопасности на сервере, а производительность не является большой проблемой для этих нечастых транзакций.