[oss-gost-crypto] Расшифровка S/MIME

Dmitry Eremin-Solenikov dbaryshkov at gmail.com
Fri Sep 13 14:30:12 MSK 2019


пт, 13 сент. 2019 г. в 13:30, Paul Wolneykien <manowar at altlinux.org>:
>
> 13.09.2019 13:13, Dmitry Eremin-Solenikov пишет:
> > пт, 13 сент. 2019 г. в 12:45, Paul Wolneykien <manowar at altlinux.org>:
> >> 13.09.2019 00:53, Dmitry Eremin-Solenikov пишет:
> >>>
> >>> Да, у меня не был дописан CryptoPro meshing для gost. Если нужен, давай обсудим
> >>> интерфейс и я его протолкну Вернеру.
> >>
> >>   Может быть ты и gpgsm заодно протолкнёшь? :-)
> >
> > Если он будет нормально сделан, почему бы и нет. Я в свое время
> > засыпался на том,
> > что не удавалось нормально доделать libksba. На github.com/GostCrypt
> > должны и патчики
> > лежать для gpgsm с libksba.
>
>   Наверное, я их уже использую.

Посмотрел. gnupg/gpgsm я никогда не выкладывал, потому что от полностью
рабочего оно далеко было. Mea culpa.

> >>   Интерфейс, я думаю, такой же как для установки S-box:
> >>
> >>     gcry_cipher_ctl (hd, GCRYCTL_SET_KEYMESHING, buf, len)
> >
> > Да, это логично. Но в этот момент все становится весело.
> > Потому что hd — это gost28147 + cfb. И мешинг должен идти в cfb.
>
>   Я посмотрел сейчас в gost_cipher_do_cfb() из openssl-gost-engine. Там
> gost_crypt_mesh() — это обёртка над gostcrypt(), функцией шифрования
> буфера, которая делает meshing когда надо (а когда не надо — не делает).
> На первый взгляд кажется, что если добавить счётчик в GOST28147_context
> и накручивать его в gost_encrypt_block(), то наверх в
> _gcry_cipher_cfb_encrypt() можно ничего не выносить.

Да, согласен. С CFB прокатывает. Это в CNT были неудобства, если
честно разносить
счетчик и encrypt.

> > У меня альтернативное предложение: сделать GCRY_CIPHER_MODE_CFB_MESH.
> > Вопрос, уложится ли это у тебя в gpgsm? Должно уложиться, если поправить
> > oids_gost28147 в cipher/gost28147.c.
>
>   Можно и так. Но что от этого изменится во взаимоотношении между
> cipher/cipher-cfb.c (общей частью Libgcrypt) и нашей частью
> cipher/gost28147.c ? Что нам здесь даёт отдельный
> GCRY_CIPHER_MODE_CFB_MESH ? Вероятно, он даёт отдельный
> gcry_cipher_spec_t со своими функциями encrypt и decrypt. Но, как я
> написал выше, кажется можно использовать обёртки над теми
> gost_encrypt_block() и gost_decrypt_block(), которые определены сейчас в
> спеке _gcry_cipher_spec_gost28147.

Тогда проще не обертки, а вставить нужный код в них и действительно
gcry_cipher_ctl().

> > Отдельный вопрос: тебе IMIT и CNT нужны или нет?
>
>   IMIT да. Я же CMAC считаю при передаче ключей.

Хорошо. Приведу код в порядок и отправлю.

> >> допустим. В OpenSSL тоже через gost_cipher_ctl() сделано, с аналогичным
> >> интерфейсом. В качестве аргумента *buf тоже, наверное, какая-то
> >> константа, вроде ..._CRYPTOPRO_KEYMESHING. Не знаю только, куда её в
> >> Libgcrypt засунуть: в enum или в define и в какой раздел?
> >
> > Учитывая, что 28147 медленно, но верно должен начать уходить, я бы не особо
> > морочился на эту тему. Это бы имело смысл, если бы были еще keymeshing.
> > Но их пока нет. А ACPKM проще тоже отдельной модой вводить.
>
>   Тут ещё вопрос, кстати, а нужен ли нам вообще GCRY_CIPHER_MODE_CFB без
> _MESH ? И для чего тогда OIDs править? В том, что прилетает в CMS,
> значится просто "1.2.643.2.2.21". Следовательно, key meshing должен быть
> включен по умолчанию.

Тебе все равно SBOX выбирать надо, это же не автоматом идет. Туда же вставить и
gcry_cipher_ctl().

Я на следующей неделе посмотрю и доделаю тогда. Норма?
--
With best wishes
Dmitry


More information about the oss-gost-crypto mailing list