Как найти в Java, если шифр нуждается в IV или нет?

#java #security #encryption

#java #Безопасность #шифрование

Вопрос:

Я создаю потоковый сервер, который использует криптографию для защиты передаваемых данных. Ciphersuite загружается из файла конфигурации, который позволяет пользователю вставлять алгоритм режим шифрования (ECB, CBC, CTR, …) дополнение, которое они хотят. Проблема в том, что некоторые режимы, такие как ECB или алгоритмы потокового шифрования, не требуют IV, что выдает ошибку при попытке инициализации шифра. Поэтому мой код недостаточно динамичен, чтобы справляться с этими ситуациями. Я уже пытался найти в Интернете способ узнать, нужен ли данному алгоритму / режиму IV или нет, но ничего не нашел.

Кто-нибудь знает, как это сделать?

Заранее спасибо

Ответ №1:

Почти для всех режимов работы требуется IV, кроме ECB, который некоторые могут даже не называть режимом работы. Кроме того, смотрите Этот вопрос из Cryptography для небольшого списка режимов шифрования. IV требуется для рандомизированного шифрования, поэтому у всех есть IV или одноразовый номер (номер, используемый один раз). Никогда не следует использовать ECB.

Теперь вы хотите зашифровать поток. Вы должны использовать AES-GCM, который является режимом шифрования с проверкой подлинности (AE), и по этой ссылке вы можете видеть, что Netflix использует его. С AE вы можете обеспечить аутентификацию, целостность и шифрование в целом. Вы также можете выбрать Chacha-poly1305, который также является AE.

В TLS 1.3 в качестве наборов шифров используются как AES-GCM, так и Chacha-poly1305. Вы должны выбрать TLS в качестве защищенной связи между клиентом и сервером. Уровень фрагментации уровня записи имеет ограничение в 2 ^ 14 байт 16,384 КБ. При каждой фрагментации вы можете проверить, является ли сообщение аутентичным и имеет целостность, если нет, повторно запросить форму сервера.