[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [openssl-gost] gostsums



Методом научного тыка было выяснено, что cpverify (на Linux x64) хеш
от M7 вычисляет совпадающим с OpenSSL.hashes образом:

# cpverify -mk -alg GR3411_2012_512 M7
03E12AE816C7F794929B7550781D22EFC7BC724FD70E295F3123D157C4D577FDC325943EF2B999CC43205DC323FA930BDDC60D44663D76844B779FD36AA89DE3

# cpverify -mk -alg GR3411_2012_256 M7
633B567983D60243837715E56CC52443FFFF9824170AD60B613B2DD6FABF2F40

Как вычислять хеши с помощью csptest на винде?
В упор опций соответствующих не вижу...
Вычисление хешей есть в csptestf, но его на винде что-то не наблюдается.
А под Linux csptestf да, считает неправильно.

2017-08-18 0:33 GMT+03:00 Andrey Kulikov <amdeich@gmail.com>:
>> Результаты:
>> 1) КриптоПро неправильно считает хэши от файла больше 4Гб (приводит длину по модулю 4Гб и считает хэш от начальной части файла приведенной длины).
>
> Интересно, повторяется ли такое с cpverify (
> https://www.cryptopro.ru/faq/how-to-checksum )...
> Завтра првоерю.
>
> 2017-08-16 20:46 GMT+03:00 Igor Ustinov <igus@cryptocom.ru>:
>> Приветствую!
>>
>> Провел тестирование по намеченному плану. Тестировал только корректность
>> вычисления хэшей, весь прочий функционал не трогал. Считал хэши от следующих
>> файлов:
>> M1 - сообщение из контрольного примера 1 к ГОСТу 2012 года
>> M2 - сообщение из контрольного примера 2 к ГОСТу 2012 года
>> M3 - сообщение нулевой длины
>> M4 - сообщение из 64 нулей
>> M5 - сообщение из 64 не нулей
>> М6 - сообщение из 192 не нулей (М5 повторенное 3 раза)
>> М7 - сообщение длины более 4Гб (состоит из сообщения M2, к которому 2^26 раз
>> дописано сообщение M5)
>>
>> Хэши считал следующими программами:
>> - утилита Дегтярева
>> - gostsum12 из ветки 1.0.2 (как я уже писал ранее, это единственный вариант,
>> считающий хэши правильно)
>> - OpenSSL 1.0.2 с патчами от КриптоПакета и c ccgost  из ветки openssl_1_0_2
>> origin/openssl_1_0_2
>> - КриптоПакет 3.0
>> - утилита csptest из комплекта CryptoPro CSP 4r3
>> csptest запускал, понятно, под виндой, утилиту Дегтярева - под линуксом
>> (xubuntu), gostsum12, OpenSSL и КриптоПакет как на линуксе, так и на спарке
>> (дабы проверить корректность работы на big-endian архитектуре).
>> Считал хэши как 256, так и 512 бит.
>> Для csptest, КриптоПакета и OpenSSL дополнительно считал и сравнивал хэши по
>> gost94.
>>
>> Результаты:
>> 1) КриптоПро неправильно считает хэши от файла больше 4Гб (приводит длину по
>> модулю 4Гб и считает хэш от начальной части файла приведенной длины).
>> 2) gostsum12 на спарке при попытке посчитать хэш от файла больше 4Гб выдает
>> ошибку
>> M7: Value too large for defined data type
>> (на линуксе считает без проблем).
>> 3) КриптоПакет/OpenSSL и csptest по разному считают хэш 94 года от файла
>> нулевой длины, разбираться не вижу смысла.
>> 4) В остальном всё везде всегда считается одинаково.
>>
>> В аттаче:
>> M.zip - архив с сообщениями, от которых считались хэши (по понятным причинам
>> туда не включено сообщение M7, вместо него включен скрипт make4Gb, которым
>> это сообщение формировалось)
>> OpenSSL.hashes - значения хэш-векторов от этих файлов в формате вывода
>> openssl dgst
>> GS12.hashes - значения хэш-векторов от этих файлов в формате вывода утилиты
>> gostsum12
>>
>>
>> Дополнительно обнаружено, что OpenSSL ломается на попытке проверить CMS типа
>> DigestedData, содержащее данные нулевой длины, выдается ошибка
>> Verification failure
>> 139943902074520:error:2E06307F:CMS routines:CHECK_CONTENT:no
>> content:cms_smime.c:120:
>> При этом командой dgst хэш от файла нулевой длины выдается ровно тот, что
>> записан внутри CMS, так что проблема именно в разборе CМS, а не в реализации
>> алгоритма хэширования.
>>
>> С уважением,
>> Игорь Устинов,
>> Зам.ген.директора
>> ООО "Криптоком
>>
>> 08.08.2017 18:19, Igor Ustinov пишет:
>>
>> 08.08.2017 14:26, Dmitry Belyavsky пишет:
>>
>> А интересует меня, правильно ли считает хеши gostsum12
>>
>>
>> Вопрос о необходимом объеме тестирования "считалки хэшей" меня несколько
>> озадачил. Понятно, что контрольные примеры из ГОСТа - это must.  Там их два:
>> для сообщения из одного неполного блока и для сообщения из двух блоков, из
>> которых второй неполный.
>> Возможно, имеет смысл дополнительно проверить
>> - сообщение нулевой длины;
>> - сообщение из одного полного блока;
>> - сообщение из нескольких полных блоков.
>> Не знаю, стоит ли делать проверку на очень длинных сообщениях. И что считать
>> таковыми.
>> Отдельный вопрос, что использовать в качестве эталона.
>>
>> С уважением,
>> Игорь Устинов,
>> Зам.ген.директора
>> ООО "Криптоком
>>
>>
>>