Comments 19
Можете ли вы дать тестовые вектора которым желательно следовать проверяя реализации? Мне бы очень пригодилось для вот этого проекта.
Похоже, ссылка «Знаменитая реализация Дегтярева» в статье неверная — она указывает на https://github.com/be1ay/MyHash_Stribog (причём там как раз лежит код с ошибкой), однако, скорее всего, имелся в виду репозиторий https://github.com/adegtyarev/streebog.
Как ни удивительно, похоже, в данном случае программисты не смогли правильно реализовать вроде бы простейшую операцию — «длинное» сложение: в некоторых случаях неправильно обрабатывается перенос в старшую часть числа.
В реализации Дегтярева проблема устранена в декабре 2017 года, а позднее код слегка оптимизирован.
В gost-engine для OpenSSL проблема исправлена в марте 2018 года (исправление совпадает с первым вариантом патча для реализации Дегтярева).
В LibreSSL ошибка пока на месте, в libgcrypt эта ошибка тоже присутствует (у этих проектов соответствующий кусок кода совпадает, и существенно отличается от реализации Дегтярева).
Спасибо за замечания и существенные дополнения.
Как ни удивительно, похоже, в данном случае программисты не смогли правильно реализовать вроде бы простейшую операцию — «длинное» сложение: в некоторых случаях неправильно обрабатывается перенос в старшую часть числа.
Мы тоже пришли к такому выводу. И сейчас тестируем правки. Спасибо.
Спасибо за статью, но самое главное в практическом смысле это не статья на хабре, а багрепорты и/или пуллреквесты
Спасибо. Но я не согласен с тем, что эта не статья на хабр. А как же люди узнают, что есть ошибки где-то и чем можно воспользоваться, чтобы их избежать? Или как надо тестировать и т.д. Если продукт не выложен для всеобщего доступа, не входит в состав официальных дистрибутивов, особенно российских, тогда да, можно обойтись багрепортами и/или пуллреквестами. Здесь же другая ситуация!
За доброе слово еще раз спасибо.
Проверили реализацию хэш-функции Streebog (ГОСТ 34.11-2012) в Linux 5.0. Все нормально.
Поэтому решил обновить исходники (взяв свежие исходники Дегтярева и переделав форму на QML), оставил только ГОСТ-овский алгоритм и добавил выбор little-endian, big-endian.
Об open-source реализациях хэш-функции ГОСТ Р 34.11-2012 и их влиянии на электронную подпись ГОСТ Р 34.10-2012