2013-05-27 2 views
5

Мой отдел на работе требуется полномочиями, которые должны использовать библиотеку шифрования, написанную другим отделом, причем проблема заключается в том, что библиотека шифрования имеет жестко закодированную ее AES вектор инициализации счетного режима (all-zeros). (В принципе, другой отдел взял библиотеку Bouncycastle и обернул вокруг нее свой сломанный код.) Мы документировали проблемы с этим кодом для полномочий, поэтому, если руководство не решит действовать, мы застряли с использованием сломанной библиотеки шифрования ,Режим счетчика AES - библиотека шифрования имеет жестко закодированный вектор ее инициализации

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

ciphertext = encrypt(++sixteenByteCounter + plaintext) 
plaintext = decrypt(ciphertext).subArray(16, ciphertext.length) 

Это, кажется, хорошо для меня, но я вряд ли эксперта криптографии

+0

Нет, усечение ничего не принесет пользы :). IV используется для режимов цепочки и принимает участие в шифровании. –

+0

@ EugeneMayevski'EldoSCorp. IV обычно используется как начальное значение для кодирования nonce в режиме счетчика. И я думаю, что вопрос состоял в том, чтобы повысить безопасность, добавив значение, а не сокращая расшифрованный открытый текст. –

+0

Это не принесет вам пользы. Верхний 96 бит счетчика ДОЛЖЕН быть уникальным для каждого сообщения, иначе простой xor между сообщениями будет скомпрометировать ваши данные. Добавление нежелательной почты для шифрования не поможет здесь. Реализация должна быть изменена. –

ответ

5

Noooooo ....

В режиме CTR шифрование последовательности чисел (1,2,3 ...), а затем XORing ваше сообщение против этого.

Это известно легко взломать шифрование, что операция XOR значения против повторно используемой последовательности. Поэтому, чтобы избежать этого в режиме CTR, вы начинаете со случайного смещения каждый раз (вы не начинаете с 1, а на 75437454896785, например). Это то, что «IV» находится в режиме CTR. Это не похоже на IV в цепочке. Это числовое смещение, на которое вы начинаете подсчитывать.

См. https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29 - IV - это «nonce» (высшие разряды в счетчике).

Что вы предлагаете, похоже, основывается на режиме CBC или аналогичном, где IV используется для управления следующим блоком, который, в свою очередь, используется для блокировки следующего блока и так далее. Но это совершенно не связано с тем, как IV используется в режиме CTR.

Ваше исправление не изменит начальную точку используемых номеров, и ваши сообщения будут безнадежно небезопасными. Пожалуйста, не делайте этого.

Кроме того, существует криптоэквивалент stackoverflow, где вы действительно должны спрашивать об этом. https://crypto.stackexchange.com/

BUT WAIT. Теперь я думаю об этом ... Я не знаю API, о котором идет речь. Возможно, что IV просто не используется (возможно, IV в API используется только для такого рода цепочек, который выполняется в CBC). Насколько широк счетчик? Может быть, API ожидает, что вы запустите счетчик со случайным смещением? Наверное, нет, но вам действительно нужно прочитать документы/код, чтобы быть уверенным (я знаю, что я был укушен в этой проблеме с PyCrypto).

Но в любом случае, в любом случае, ваше исправление, безусловно, не является исправлением (к сожалению).