Совместимость PyCrypto с CommonCrypto в режиме CFB? - PullRequest
3 голосов
/ 22 декабря 2011

Я пытаюсь получить какой-нибудь код 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 * до тех пор, покакак я устанавливаю сегмент_размер в 16 *.

Идеи?

1 Ответ

1 голос
/ 24 декабря 2011

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

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

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

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

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

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

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

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

...