Какое минимальное количество байтов следует использовать для шифрования 4 байтов с помощью AES-128? - PullRequest
0 голосов
/ 20 марта 2012

Я работаю над проектом, который включает отправку некоторых очень маленьких зашифрованных сообщений через высокопроизводительное сокетное соединение с использованием 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, так как он, кажется, обладает лучшими функциями безопасности на сервере, а производительность не является большой проблемой для этих нечастых транзакций.

1 Ответ

3 голосов
/ 20 марта 2012

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

Для UDP я настоятельно рекомендую изучить шифрование в режиме счетчика. Преимущество состоит в том, что поток ключей может быть предварительно рассчитан, что обеспечивает шифрование / дешифрование с низкой задержкой. Он также не требует заполнения, поэтому вам не нужно отправлять больше данных, чем требуется (обратите внимание, что у вас есть побочный канал относительно длины данных, поэтому разница между «Да» и «Нет» может быть четко видна). Тебе же нужен хороший NONCE.

Если вы хотите защитить целостность, то рекомендуется использовать шифрование в режиме GCM. Если он недоступен, взгляните на HMAC или MAC на текст вашего шифра - но вам потребуется два секретных ключа вместо одного.

...