[oss-gost-crypto] Streebog padding bug Ex: "Об open-source реализациях
Vitaly Chikunov
vt at altlinux.org
Mon Jan 13 11:22:04 MSK 2020
On Mon, Jan 13, 2020 at 09:51:18AM +0300, Dmitry Belyavsky wrote:
> On Mon, Jan 13, 2020 at 8:07 AM Vitaly Chikunov <vt at altlinux.org> wrote:
>
> > (В копилку ошибочных реализаций.)
> >
> > В одном российском линуксе, хэш для данных с длинной кратной 64
> > считаются иначе чем у всех остальных:
> >
> > ...
>
> >
> > Интересно что там могло пойти не так.
> >
>
> Ну как. Финализация включает в себя дополнение непрохешированного остатка
> до полного блока.
> Вот если остаток не оставить, а всё равно дополнить - будет именно это
> скорее всего.
1. По-моему мы так и делаем.
А вот они не делают заполнение _пустого блока_.
В ГОСТ (для полных блоков) они пропускают шаги 3.1, 3.2, 3.3, 3.4.
В примерах сказано "длина сообщения меньше 512, _поэтому_ происходит
заполнение неполного блока". А что же делать когда блок полный?
Кто прав?
Вот патч который дает результаты "как у них":
diff --git a/gost3411-2012-core.c b/gost3411-2012-core.c
index de582c6..55aad37 100644
--- a/gost3411-2012-core.c
+++ b/gost3411-2012-core.c
@@ -163,13 +163,15 @@ stage3(GOST34112012Context *CTX)
buf.QWORD[0] = BSWAP64(CTX->bufsize << 3);
#endif
- pad(CTX);
+ if (CTX->bufsize) {
+ pad(CTX);
- g(&(CTX->h), &(CTX->N), (const unsigned char *) &(CTX->buffer));
+ g(&(CTX->h), &(CTX->N), (const unsigned char *) &(CTX->buffer));
- add512(&(CTX->N), &buf, &(CTX->N));
- add512(&(CTX->Sigma), (const union uint512_u *) &CTX->buffer[0],
- &(CTX->Sigma));
+ add512(&(CTX->N), &buf, &(CTX->N));
+ add512(&(CTX->Sigma), (const union uint512_u *) &CTX->buffer[0],
+ &(CTX->Sigma));
+ }
g(&(CTX->h), &buffer0, (const unsigned char *) &(CTX->N));
2. Кроме того, в нашем коде есть странность:
| static inline void
| pad(GOST34112012Context *CTX)
| {
| if (CTX->bufsize > 63)
| return;
|
| memset(CTX->buffer + CTX->bufsize,
| 0x00, sizeof(CTX->buffer) - CTX->bufsize);
|
| CTX->buffer[CTX->bufsize] = 0x01;
| }
`CTX->bufsize` никогда не может быть больше 63.
More information about the oss-gost-crypto
mailing list