Как отправить вектор в CBC для расшифровки? - PullRequest
0 голосов
/ 04 мая 2019

Я ожидаю зашифровать строку со стороны клиента (используя aes-256-cbc и секретный пароль, уже известный как серверу, так и клиенту). И тогда я бы хотел расшифровать его (на стороне сервера).

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

00000000000000000000000000000000.JAPQElUAxxxxxxxxxxxjTgJAPQElUAfgydvbY=

Итак, на сервере я разделил полезную нагрузку с «точкой» в качестве разделителя и считаю первый элемент вектором.

Я считаю, что отправлять IV таким образом нехорошо. Не могли бы вы помочь мне понять, как это должно работать?

1 Ответ

0 голосов
/ 05 мая 2019

В режиме шифрования CBC отправка IV без шифрования - это нормально, и беспокоиться не о чем, так как IV непредсказуем.См. Этот вопрос Почему CBC с предсказуемым IV считается небезопасным против атаки с использованием открытого текста? из криптографии.

Распространенным способом отправки IV является добавление его к зашифрованному тексту.Библиотеки, как правило, были разработаны для извлечения первых 16-байтовых или включения смещения в байтовых массивах.

Режим работы CBC устарел.У него много проблем, так как отступают оракулы.Вам следует использовать лучшие альтернативные режимы аутентифицированного шифрования (AE), такие как AES-GCM и ChaCha-Poly1305, которые не требуют заполнения.Кроме того, в AE у вас будет конфиденциальность, целостность и аутентификация, когда CBC поддерживает только конфиденциальность.

Режимы AS предоставляют тег аутентификации, который вам нужно будет передать с IV.Обычная практика;подготовьте IV и добавьте тег к зашифрованному тексту.

 IV || Ciphertext||Tag
...