From manowar на altlinux.org Wed Jul 25 12:18:48 2018 From: manowar на altlinux.org (Paul Wolneykien) Date: Wed, 25 Jul 2018 13:18:48 +0300 Subject: [gnupg-ru] =?utf-8?b?0J3QsCDQv9GD0YLQuCDQuiDQv9C+0LvQvdC+0YY=?= =?utf-8?b?0LXQvdC90L7QuSDQv9C+0LTQtNC10YDQttC60LUg0JPQntCh0KIg0LIgR251?= =?utf-8?q?PG?= In-Reply-To: References: <20180623160754.1b6266dc@job.localdomain> Message-ID: <69ef0314-1748-865d-690a-1740f6d27826@altlinux.org> 25.06.2018 19:53, Paul Wolneykien пишет: > 23.06.2018 16:07, Dmitrii Tcvetkov пишет: >>> Здравствуйте, уважаемые подписчики. Представляю вашему вниманию >>> небольшой шаг в сторону поддержки цифровой подписи ГОСТ в GnuPG. Здравствуйте. В новой итерации, в дополнение к поддержке цифровой подписи по ГОСТ, я добавил поддержку ГОСТового шифрования (enсrypt/decrypt) данных. Это потребовало: 1. Прежде всего, реализации алгоритмов VKO GOST (RFC 4357) внутри Libgcrypt. Реализацию сделал прозрачную — в том смысле, что данные операции доступны снаружи через стандартные gcry_pk_encrypt() / gcry_pk_decrypt(). Единственное, о чём нужно помнить, что таким способом шифруются (расшифровываются) не данные, а симметричный ключ, который затем используется для собственно шифрования (расшифрования) данных. Обновлённый патч доступен по адресу: http://git.altlinux.org/people/manowar/packages/?p=libgcrypt.git;a=blob;f=libgcrypt-1.8.2-gost.patch;h=2cf069617f12efab3ef8289384eb9c91ec7ef9ed;hb=5b3d051a59d95628943f3597068e393a8f6eb1df . 2. Добавить в GnuPG отдельную (от Libgcrypt) реализацию размаскирования ключа (key unwrap). Это вызвано тем обстоятельством, что данная реализация в целом рассчитана, пока что, на использование совместно с аппаратными токенами. Операция же выработки общего ключа с помощью токена включает в себя и его так называемую диверсификацию. По этой причине, алгоритм размаскирования симметричного ключа, связанный с аппаратным токеном (через gpg-агент) оказывается урезанным по сравнению с аналогичной операцией, реализованной мной в Libgcrypt. Кроме этого момента, для ВКО ГОСТ в GnuPG потребовалось реализовать отдельную обвязку вокруг вызова gcry_pk_encrypt(), поскольку стандартная обвязка рассчитана на работу с ECC shared point и ничего не знает об UKM. Обновлённый патч доступен по адресу: http://git.altlinux.org/people/manowar/packages/?p=gnupg2.git;a=blob;f=gnupg-2.2.8-gost.patch;h=a4ab5be731bc72536e5eea360c97185c5801dd6f;hb=a72c8dd7e206bfbbc1239fa9d7f32d7ec09808ca . 3. В части работы со смарт-картами (токенами) потребовалось сделать две вещи: использовать механизм выработки общего ключа (CKM_GOSTR3410_DERIVE) со стороны gnupg-pkcs11-scd (включая сюда подготовку бинарных данных UKM + публичный ключ с правильным порядком байт) и реализовать вызов этого механизма в libpkcs11-helper, причём с поддержкой ГОСТовой специфики. По аналогии с Libgcrypt, я решил не добавлять в libpkcs11-helper отдельный тип операции "derive", а сделал его частным случаем "decrypt". Обновлённые патчи доступны по адресам: http://git.altlinux.org/people/manowar/packages/?p=gnupg-pkcs11-scd.git;a=blob;f=gnupg-pkcs11-scd-0.9.2-gost.patch;h=e167433b02823324544c169d04a1fda5597f47b6;hb=8ba10a0014a7f0d1d69dcb29f3fbd708b56ecee4 и http://git.altlinux.org/people/manowar/packages/?p=libpkcs11-helper.git;a=blob;f=libpkcs11-helper-1.22.0-gost-derive.patch;h=f64fe32a52c6a5abb784494347f4211c97e69b6c;hb=cddda377cc0a3c3aba2b806e47323f9f98aab95c соответственно. Реализация проверена на работоспособность (подпись + шифрование / расшифровка + проверка) совместно с токенами "Рутокен ГОСТ ECP". Из интересного. Алгоритм диверсификации ключа, реализованный в настоящее время в OpenSSL (engines/ccgost) скорее всего содержит в себе ошибку. Либо же ошибку содержит реализация на "Рутокен". Дело же в том, что одинаковый результат диверсификации мне удалось получить только после того, как я перевернул UKM (точнее, использовал его в обратном порядке). Применительно к OpenSSL это выглядит так: --- a/openssl/engines/ccgost/gost_keywrap.c +++ b/openssl/engines/ccgost/gost_keywrap.c @@ -35,7 +35,7 @@ void keyDiversifyCryptoPro(gost_ctx * ctx, const unsigned char *inputKey, for (j = 0, mask = 1; j < 8; j++, mask <<= 1) { k = ((u4) outputKey[4 * j]) | (outputKey[4 * j + 1] << 8) | (outputKey[4 * j + 2] << 16) | (outputKey[4 * j + 3] << 24); - if (mask & ukm[i]) { + if (mask & ukm[7 - i]) { s1 += k; } else { s2 += k; From ineiev на gnu.org Sat Jul 28 10:13:45 2018 From: ineiev на gnu.org (Ineiev) Date: Sat, 28 Jul 2018 04:13:45 -0400 Subject: [gnupg-ru] =?utf-8?b?0J3QsCDQv9GD0YLQuCDQuiDQv9C+0LvQvdC+0YY=?= =?utf-8?b?0LXQvdC90L7QuSDQv9C+0LTQtNC10YDQttC60LUg0JPQntCh0KIg0LIgR251?= =?utf-8?q?PG?= In-Reply-To: <69ef0314-1748-865d-690a-1740f6d27826@altlinux.org> References: <20180623160754.1b6266dc@job.localdomain> <69ef0314-1748-865d-690a-1740f6d27826@altlinux.org> Message-ID: <20180728081341.GK17905@gnu.org> Многоуважаемый Paul, Заранее прошу прощения за идиотские вопросы начинающего пользователя GnuPG. On Wed, Jul 25, 2018 at 01:18:48PM +0300, Paul Wolneykien wrote: > > 1. Прежде всего, реализации алгоритмов VKO GOST (RFC 4357) внутри > Libgcrypt. Реализацию сделал прозрачную — в том смысле, что данные > операции доступны снаружи через стандартные gcry_pk_encrypt() / > gcry_pk_decrypt(). Единственное, о чём нужно помнить, что таким способом > шифруются (расшифровываются) не данные, а симметричный ключ, который > затем используется для собственно шифрования (расшифрования) данных. > Обновлённый патч доступен по адресу: > http://git.altlinux.org/people/manowar/packages/?p=libgcrypt.git;a=blob;f=libgcrypt-1.8.2-gost.patch;h=2cf069617f12efab3ef8289384eb9c91ec7ef9ed;hb=5b3d051a59d95628943f3597068e393a8f6eb1df > . Планируется ли добавление этих алгоритмов в официальные выпуски Libgcrypt? > 2. Добавить в GnuPG отдельную (от Libgcrypt) реализацию > размаскирования ключа (key unwrap). Это вызвано тем обстоятельством, что > данная реализация в целом рассчитана, пока что, на использование > совместно с аппаратными токенами. А будет ли реализация для работы без аппаратных токенов? > Реализация проверена на работоспособность (подпись + шифрование / > расшифровка + проверка) совместно с токенами "Рутокен ГОСТ ECP". Солидно. а сертификация ФСБ распространяется на такое использование? подписи будут квалифицированными? ----------- следущая часть ----------- Вложение не в текстовом формате было извлечено… Имя: signature.asc Тип: application/pgp-signature Размер: 488 байтов Описание: Digital signature URL: From manowar на altlinux.org Sat Jul 28 13:20:05 2018 From: manowar на altlinux.org (Paul Wolneykien) Date: Sat, 28 Jul 2018 14:20:05 +0300 Subject: [gnupg-ru] =?utf-8?b?0J3QsCDQv9GD0YLQuCDQuiDQv9C+0LvQvdC+0YY=?= =?utf-8?b?0LXQvdC90L7QuSDQv9C+0LTQtNC10YDQttC60LUg0JPQntCh0KIg0LIgR251?= =?utf-8?q?PG?= In-Reply-To: <20180728081341.GK17905@gnu.org> References: <20180623160754.1b6266dc@job.localdomain> <69ef0314-1748-865d-690a-1740f6d27826@altlinux.org> <20180728081341.GK17905@gnu.org> Message-ID: <6cb88c77-e63a-1eb8-f2e4-e92e847dd97e@altlinux.org> 28.07.2018 11:13, Ineiev пишет: > Многоуважаемый Paul, > > Заранее прошу прощения за идиотские вопросы начинающего пользователя > GnuPG. > > On Wed, Jul 25, 2018 at 01:18:48PM +0300, Paul Wolneykien wrote: >> >> 1. Прежде всего, реализации алгоритмов VKO GOST (RFC 4357) внутри >> Libgcrypt. Реализацию сделал прозрачную — в том смысле, что данные >> операции доступны снаружи через стандартные gcry_pk_encrypt() / >> gcry_pk_decrypt(). Единственное, о чём нужно помнить, что таким способом >> шифруются (расшифровываются) не данные, а симметричный ключ, который >> затем используется для собственно шифрования (расшифрования) данных. >> Обновлённый патч доступен по адресу: >> http://git.altlinux.org/people/manowar/packages/?p=libgcrypt.git;a=blob;f=libgcrypt-1.8.2-gost.patch;h=2cf069617f12efab3ef8289384eb9c91ec7ef9ed;hb=5b3d051a59d95628943f3597068e393a8f6eb1df >> . > > Планируется ли добавление этих алгоритмов в официальные выпуски > Libgcrypt? Было бы неплохо. Но я не знаком с официальной процедурой. > >> 2. Добавить в GnuPG отдельную (от Libgcrypt) реализацию >> размаскирования ключа (key unwrap). Это вызвано тем обстоятельством, что >> данная реализация в целом рассчитана, пока что, на использование >> совместно с аппаратными токенами. > > А будет ли реализация для работы без аппаратных токенов? Да. Но прямо сейчас мне, к сожалению, не до неё. > >> Реализация проверена на работоспособность (подпись + шифрование / >> расшифровка + проверка) совместно с токенами "Рутокен ГОСТ ECP". > > Солидно. а сертификация ФСБ распространяется на такое использование? > подписи будут квалифицированными? > Для квалифицированных подписей нужен сертификат. Этим занимается gpgsm (S/MIME). Вот как раз сейчас занимаюсь этим вопросом.