Совместимость PyCrypto с CommonCrypto в режиме CFB?

Я пытаюсь получить код Python для расшифровки данных, зашифрованных с помощью API-интерфейсов OS X CommonCrypto. Документации по точным параметрам, которые использует CommonCrypto, практически нет, поэтому мне нужна помощь, чтобы выяснить, какие параметры установить в PyCrypto.

В частности, мой вызов настройки расшифровки CommonCrypto:

CCCryptorCreateWithMode(kCCDecrypt, kCCModeCFB, kCCAlgorithmAES128, ccDefaultPadding, NULL, key, keyLength, NULL, 0, 0, 0, &mAESKey);

Мои основные вопросы:

  1. Поскольку существуют и kCCModeCFB, и kCCModeCFB8, каково определение CommonCrypto режима CFB — какой размер сегмента и т. д.?
  2. Какой размер блока использует CommonCrypto AES128? 16 или 128?
  3. Каково заполнение по умолчанию и имеет ли оно значение в режиме CFB?

В настоящее время первые 4 байта данных успешно расшифровываются с помощью PyCrypto *, пока я установил segment_size на 16 *.

Идеи?


person Loki    schedule 22.12.2011    source источник
comment
Как примечание, M2Crypto отлично работает при расшифровке данных, поэтому должна быть какая-то проблема с параметрами или что-то в этом роде.   -  person Loki    schedule 23.12.2011
comment
В последнее время я работаю над этим с тем же вопросом. Вы нашли какой-либо способ или пример кода для этой проблемы.   -  person Yi Jiang    schedule 16.07.2013


Ответы (1)


Не зная CommonCrypto или PyCrypto, некоторые частичные ответы:

  • AES (во всех трех вариантах) имеет размер блока 128 бит, что составляет 16 байт.

  • CFB (режим обратной связи шифра) на самом деле также будет работать без заполнения (т. Е. С частичным последним блоком), поскольку для каждого блока зашифрованный текст создается как XOR открытого текста с некоторым блоком ключевого потока, который зависит только от предыдущих блоков. (Вы по-прежнему можете использовать любые отступы, которые хотите.)

    Если вы можете поэкспериментировать с некоторыми известными данными, сначала посмотрите на размер зашифрованного текста. Если он не кратен полному блоку (и такой же, как открытый текст + IV), то вполне вероятно, что нет заполнения.

    В противном случае расшифруйте его в режиме noPadding, посмотрите на результат и сравните с другими известными режимами заполнения.

    взгляд на исходный код: может быть заполнение PKCS # 5.

  • CFB8 — это вариант CFB, который использует только верхние 8 битов (= один байт) каждого вывода вызова блочного шифра (который принимает предыдущие 128 битов (= 16 байтов) зашифрованного текста (или IV) в качестве входных данных). Это требует в 16 раз больше вызовов блочного шифра, но позволяет частично отправлять поток, не беспокоясь о границах блоков.

  • Существует еще одно определение CFB, которое включает размер сегмента — здесь размер сегмента — это количество битов (или байтов), которые будут использоваться для каждого вывода шифра. В этом определении «простой» CFB будет иметь размер сегмента 128 бит (= 16 байтов), CFB8 будет иметь размер сегмента 8 бит (один байт).

person Paŭlo Ebermann    schedule 23.12.2011