(2013-08-15 11:36:32 отредактировано Oleg Yurchenko)

Gardant Sign + AES128 + OFB

При шифровании/дешифровании с помощью аппаратного алгоритма AES128, обнаружил неприятную особенность: неправильная работа, если размер входных данных  не кратен размеру ключа (16 байт). В описании сказано что при работе в режиме OFB размер данных не имеет значения.
Я реализую "поточное" шифрование, поэтому входящий размер размер может быть любым.
Вызов ф-ции API такой:
GrdCryptEx(handle(), m_alg, sz, buffer,
    GrdAM_OFB + GrdAM_Encrypt, //Использование GrdSC_First, GrdSC_Next, GrdSC_Last не меняет результата
    m_ivSize,  //16
    m_iv,       //указатель на массив вектора инициализации                           
    NULL,
    NULL,
    NULL  )
М.б, я что то неправильно делаю ?
PS:
Если несколькими блоками кодирую:
16-16-16-8 - Правильно
16-8-16-... - Не правильно

(2013-08-15 16:53:29 отредактировано Антон Тихиенко)

Re: Gardant Sign + AES128 + OFB

Здравствуйте, Oleg Yurchenko.

Описанное поведение при преобразовании данных (кодирование/декодирование) может быть следствием того, что при декодировании данных, функция GrdCryptEx использует вектор инициализации (параметр pIV) отличный от того, который был использован при кодировании.

Попробуйте выполнять преобразования данных указав значение NULL в качестве вектора инициализации. Поможет ли это?

(2013-08-15 17:30:14 отредактировано Oleg Yurchenko)

Re: Gardant Sign + AES128 + OFB

Антон Тихиенко пишет:

Попробуйте выполнять преобразования данных указав значение NULL в качестве вектора инициализации. Поможет ли это?

Не помогло, даже более того - при кодировании нескольких блоков разных размеров (кратных 16) при декодировании другого размера блоками (кратных 16) не восстанавливают прежнего сообщения (с вектором инициализации, сохраняемым между вызовами GrdCryptEx - восстанавливает)
Кстати попробовал с программным алгоритмом AES256 - поведение аналогичное.
Пробовал на API Linux/x86_64 Windows/x86.
Наверно придется принять ограничение - все блоки кроме последнего должны быть кратны длине вектора инициализации... Как то так?

Re: Gardant Sign + AES128 + OFB

Добрый день.

Oleg Yurchenko пишет:

Не помогло, даже более того - при кодировании нескольких блоков разных размеров (кратных 16) при декодировании другого размера блоками (кратных 16) не восстанавливают прежнего сообщения (с вектором инициализации, сохраняемым между вызовами GrdCryptEx - восстанавливает)

У нас описанное поведение не воспроизводится. При шифровании по схеме "16-8-16-..." данные корректно шифруются\дешифруются.

Пришлите нам на почту - hotline@guardant.ru - небольшое тестовое приложение (с исходниками), на котором у Вас воспроизводится указанное поведение GrdCryptEx и nsd-файл маски, прошиваемой в тестируемый ключ.

Также уточните версию используемого Вами комплекта разработчика Guardant.