Можно ли узнать вектор инициализации, если мы знаем зашифрованные данные и ключ? - PullRequest
0 голосов
/ 14 мая 2019

Используя ключ и вектор инициализации, я зашифровал некоторые данные:

QString & msgToEncrypt = "some message";
QString & key = "01234567891234560123456789123456";

EVP_CIPHER_CTX * ctx;
unsigned char iv[16];
int len, ciphertext_len;
unsigned char ciphertext[msgToEncrypt.size() + EVP_MAX_BLOCK_LENGTH];
ctx = EVP_CIPHER_CTX_new();
EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, (const unsigned char *) key.toStdString().c_str(), iv);
EVP_EncryptUpdate(ctx, ciphertext, &len, (const unsigned char *) msgToEncrypt.toStdString().c_str(), msgToEncrypt.toStdString().size());
ciphertext_len = len;
EVP_EncryptFinal_ex(ctx, ciphertext + len, &len);
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);

Затем я получил зашифрованные данные.

Интересно, можно ли выяснить, что это был iv?используя зашифрованные данные и ключ

1 Ответ

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

С блочным шифром и цепочкой блоков Ciper (например, aes_128_cbc), без способа определения правильности полученного открытого текста или нет, нет.

Если вы посмотрите на шифрование, первый блок XOR будет открытым текстом и IV, а затем зашифрует его. Для расшифровки вы просто делаете обратное, вы дешифруете зашифрованный текст блоков, а затем XOR с помощью IV. Следующие блоки используют предыдущий зашифрованный текст вместо IV («цепочка»), поэтому для дешифрования требуется только первый блок.

Итак, если у вас есть ключ, вы можете расшифровать первый блок, но что тогда вы используете для XOR? Без способа определить, является ли зашифрованный открытый текст правильным или нет, IV может быть чем угодно.

Но, если вообще что-то знать об открытом тексте, определение IV становится довольно легким, так как каждый бит IV напрямую отображается на соответствующие выходные биты предсказуемым образом. Например, скажем, 128-битный AES шифрует сообщение, начинающееся с GET /questions/5, тогда вы можете получить IV, просто XOR, расшифровав блок с этим открытым текстом. А поскольку в следующих блоках используется предыдущий зашифрованный текст, а не IV для XOR, вы можете получить их напрямую в любом случае.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...