Привет! 14.08.2017 11:59, Dmitry Belyavsky пишет:
Если сейчас подать на вход openssl текст из контрольного примера к ГОСТу, то мы увидим хэш-вектор, в котором байты идут в порядке, обратном к тому, как они записаны в контрольном примере. Я не смог прийти сам с собой к единому мнению :) правильно это или нет. С одной стороны, в ГОСТе написано, что хэш - это двоичный вектор, у которого есть левая сторона и правая сторона, отсюда можно сделать вывод, что выводиться хэш-вектор должен ровно так, как он записывается в контрольных примерах к ГОСТу: левые знаки слева, правые справа. С другой стороны, если мы посмотрим, как записываются в контрольных примерах хэшируемые сообщения, и сравним их с 16-ричным дампом соответствующих файлов, то увидим, что слева стоит последний байт файла, а справа - первый, то есть хэшируемое сообщение записано "перевернутым" по отношению к тому, как оно выводится всеми разумными средствами визуализации. И дабы быть последовательным, следует и хэш-вектор визуализировать "перевернутым" по отношению к записи контрольного примера. Если принять первую точку зрения, то openssl выводит хэш неправильно, а если вторую - то правильно. Дегтяревская реализация имеет ключик, позволяющий менять порядок байт в выводе, но по умолчанию используется тот же порядок, что и в openssl. Поскольку Дегтяревская реализация долгое время считалась, а может и доселе считается эталонной, можно приять мужественное решение, что байты нужно выводить ровно в том порядке, в котором их выводит openssl. gostsum12 из ветки openssl_1_0_2 origin/openssl_1_0_2 (в мастере его нет) их сейчас выводит в том же самом порядке. gostsum выводит их в обратном порядке (то есть отличном от openssl), поскольку актуальность ГОСТа 94-го года весьма сомнительна, я согласен с идеей старый gostsum из состава энжина исключить. gost12sum из мастера и из ветки 1.0.2 выводят разные векторы, и оба неправильные. С уважением, Игорь Устинов, Зам.ген.директора ООО "Криптоком |