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

[openssl-gost] Re: [openssl-gost] Re: [openssl-gost] ГОСТ 94 года




С уважением,
Игорь Устинов
зам.ген.директора
ООО "Криптоком"

On 25.05.2019 0:16, Dmitry Eremin-Solenikov wrote:
Привет!

пт, 24 мая 2019 г. в 17:51, Dmitry Belyavsky <beldmit@gmail.com>:
Привет!

Мне тут прислали пулл-реквест на исправление старого хеша для файла нулевой длины.
А на самом деле как должно быть?

https://github.com/gost-engine/engine/pull/143
Интересный вопрос. Если дословно вчитываться в код стандарта, получится,
  что для сообщения нулевой длины на этапе 2 (пп. 2.3 и 2.5) должно быть
вычисление шаговой функции от строки, заполненной нулями.

При этом ccgost engine до 2015 года в этом случае не вычислял шаговую
функцию (см далее). А потом кто-то молча поменял это место.

Когда мы сертифицировали энжин, 8 Цент указал нам на формальное несоответствие ГОСТу в этом месте. Соответственно, в сертифицированной версии мы это место поправили, а вот правку в ccgost OpenSSL Team принимать отказалась как нарушающую обратную совместимость.



Свои реализации, кстати,  я проверял на совместимость со старым engine,
поэтому LibreSSL (которая на нем основывается) и libgcrypt тоже
не производят вычислений. rhash и основывающийся на коде из нее nettle
(и GnuTLS) тоже не делает вычислений. И вишенкой на торте в Wiki тоже
висят значения без этого вычисления.

Вопрос, какой из вариантов совместим с коммерческими реализациями?

commit cba16944bff9d8c5dcf37be641822cd3de6d2ec1
Author: Dmitry Belyavskiy <beldmit@gmail.com>
Date:   Fri Aug 14 21:08:23 2015 +0300

     Initial commit providing GOST 2012 algorithms.

diff --git a/gosthash.c b/gosthash.c
index 72faa24ed560..ee4a57debbfe 100644
--- a/gosthash.c
+++ b/gosthash.c
@@ -255,6 +255,8 @@ int finish_hash(gost_hash_ctx * ctx, byte * hashval)
          fin_len += ctx->left;
      }
      memset(buf, 0, 32);
+    if (fin_len == 0)
+        hash_step(ctx->cipher_ctx, H, buf);
      bptr = buf;
      fin_len <<= 3;              /* Hash length in BITS!! */
      while (fin_len > 0) {