Русская Википедия:ГОСТ 34.10-2018
ГОСТ 34.10-2018 (полное название: «ГОСТ 34.10-2018. Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи», англ. «Information technology. Cryptographic data security. Signature and verification processes of electronic digital signature») — действующий межгосударственный криптографический стандарт, описывающий алгоритмы формирования и проверки электронной цифровой подписи реализуемой с использованием операций в группе точек эллиптической кривой, определенной над конечным простым полем.
Стандарт разработан на основе национального стандарта Российской Федерации ГОСТ Р 34.10-2012 и введен в действие с 1 июня 2019 года приказом Росстандарта № 1059-ст от 4 декабря 2018 года.
Область применения
Цифровая подпись позволяет:
- Аутентифицировать лицо, подписавшее сообщение;
- Контролировать целостность сообщения;
- Защищать сообщение от подделок;
История
Первые версии алгоритма разрабатывались Главным управлением безопасности связи ФАПСИ при участии Всероссийского научно-исследовательского института стандартизации (ВНИИстандарт), позже разработка перешла в руки Центра защиты информации и специальной связи ФСБ России и АО «ИнфоТеКС».
Описание
Криптографическая стойкость первых стандартов цифровой подписи ГОСТ Р 34.10-94 и ГОСТ 34.310-95 была основана на задаче дискретного логарифмирования в мультипликативной группе простого конечного поля большого порядка. Начиная с ГОСТ Р 34.10-2001 стойкость алгоритма основана на более сложной задаче вычисления дискретного логарифма в группе точек эллиптической кривой. Также стойкость алгоритма формирования цифровой подписи основана на стойкости соответствующей хеш-функции:
Тип | Наименование | Введен в действие | Функция хеширования | Приказ |
---|---|---|---|---|
Национальный | ГОСТ Р 34.10-94 | 1 января 1995 года | ГОСТ Р 34.11-94 | Принят постановлением Госстандарта России № 154 от 23 мая 1994 года |
Межгосударственный | ГОСТ 34.310-95 | 16 апреля 1998 года | ГОСТ 34.311-95 | |
Национальный | ГОСТ Р 34.10-2001 | 1 июля 2002 года | ГОСТ Р 34.11-94 | Принят постановлением Госстандарта России № 380-ст от 12 сентября 2001 года[1] |
Межгосударственный | ГОСТ 34.310-2004 | 2 марта 2004 года | ГОСТ 34.311-95 | Принят Евразийским советом по стандартизации, метрологии и сертификации по переписке (протокол № 16 от 2 марта 2004 года) |
Национальный | ГОСТ Р 34.10-2012 | 1 января 2013 года | ГОСТ Р 34.11-2012 | Утверждён и введен в действие приказом Федерального агентства по техническому регулированию и метрологии № 215-ст от 7 августа 2012 года в качестве национального стандарта Российской Федерации с 1 января 2013 года |
Межгосударственный | ГОСТ 34.10-2018 | 1 июня 2019 года | ГОСТ 34.11-2018 | Принят Межгосударственным советом по метрологии, стандартизации и сертификации (протокол № 54 от 29 ноября 2018 года). Приказом Федерального агентства по техническому регулированию и метрологии № 1059-ст от 4 декабря 2018 г. введен в действие в качестве национального стандарта Российской Федерации с 1 июня 2019 года |
Стандарты используют одинаковую схему формирования электронной цифровой подписи. Новые стандарты с 2012 года отличаются наличием дополнительного варианта параметров схем, соответствующего длине секретного ключа порядка 512 бит.
После подписывания сообщения М к нему дописывается цифровая подпись размером 512 или 1024 бит, и текстовое поле. В текстовом поле могут содержаться, например, дата и время отправки или различные данные об отправителе:
|
+ |
| |||
Дополнение |
Данный алгоритм не описывает механизм генерации параметров, необходимых для формирования подписи, а только определяет, каким образом на основании таких параметров получить цифровую подпись. Механизм генерации параметров определяется на месте в зависимости от разрабатываемой системы.
Алгоритм
Приводится описание варианта схемы ЭЦП с длиной секретного ключа 256 бит. Для секретных ключей длиной 512 бит (второй вариант формирования ЭЦП, описанный в стандарте) все преобразования аналогичны.
Параметры схемы цифровой подписи
- простое число <math>p</math> — модуль эллиптической кривой такой, что <math>p>2^{255}</math>
- эллиптическая кривая <math>E</math> задаётся своим инвариантом <math>J(E)</math> или коэффициентами <math>a,b\in F_p</math>, где <math>F_p</math> — конечное поле из p элементов. <math>J(E)</math> связан с коэффициентами <math>a</math> и <math>b</math> следующим образом
- <math>J(E)=1728\frac{4a^3}{4a^3+27b^2}\pmod{p}</math>, причём <math>4a^3+27b^2\not\equiv 0\pmod{p}</math>.
- целое число <math>m</math> — порядок группы точек эллиптической кривой, <math>m</math> должно быть отлично от <math>p</math>
- простое число <math>q</math>, порядок некоторой циклической подгруппы группы точек эллиптической кривой, то есть выполняется <math>m=nq</math>, для некоторого <math>n\in\N</math>. Также <math>q</math> лежит в пределах <math>2^{254}<q<2^{256}</math>.
- точка <math>P=(x_P,\;y_P)</math> эллиптической кривой <math>E</math>, являющаяся генератором подгруппы порядка <math>q</math>, то есть <math>q\cdot P=\mathbf{0}</math> и <math>k\cdot P\ne \mathbf{0}</math> для всех k = 1, 2, …, q-1, где <math>\mathbf{0}</math> — нейтральный элемент группы точек эллиптической кривой E.
- <math>h(M)</math> — хеш-функция (ГОСТ Р 34.11-2012), которая отображает сообщения M в двоичные векторы длины 256 бит.
Каждый пользователь цифровой подписи имеет личные ключи:
- ключ шифрования <math>d</math> — целое число, лежащее в пределах <math>0<d<q</math>.
- ключ расшифрования <math>Q=(x_Q,\;y_Q)</math>, вычисляемый как <math>Q = d\cdot P</math>.
Дополнительные требования:
- <math>p^t\neq 1 \pmod{q}</math>, <math>\forall t=1..B</math>, где <math>B\geq 31</math>
- <math>J(E)\neq 0</math> и <math>J(E)\neq 1728</math>
Двоичные векторы
Между двоичными векторами длины 256 <math>\bar{h}=(\alpha_{255},...,\alpha_0)</math> и целыми числами <math>z\leq 2^{256}</math> ставится взаимно-однозначное соответствие по следующему правилу <math>z=\sum^{255}_{i=0}\alpha_i2^i</math>. Здесь <math>\alpha_i</math> либо равно 0, либо равно 1. Другими словами, <math>\bar{h}</math> — это представление числа z в двоичной системе счисления.
Результатом операции конкатенации двух векторов <math>\bar{h_1}=(\alpha_{255},...,\alpha_0)</math> и <math>\bar{h_2}=(\beta_{255},...,\beta_0)</math> называется вектор длины 512 <math>(\bar{h_1}|\bar{h_2})=(\alpha_{255},...,\alpha_0,\beta_{255},...,\beta_0)</math>. Обратная операция — операция разбиения одного вектора длины 512 на два вектора длины 256.
Формирование цифровой подписи
-
Формирование цифровой подписи
-
Проверка цифровой подписи
- Вычисление хеш-функции от сообщения М: <math>\bar{h} = h(M)</math>
- Вычисление <math>e=z\,\bmod\,q</math>, и если <math>e=0</math>, положить <math>e=1</math>. Где <math>z</math> — целое число, соответствующее <math>\bar{h}.</math>
- Генерация случайного числа <math>k</math> такого, что <math>0<k<q.</math>
- Шаблон:AnchorВычисление точки эллиптической кривой <math>C=kP</math>, и по ней нахождение <math>r=x_c\,\bmod\,q,</math> где <math>x_c</math> — это координата <math>x</math> точки <math>C.</math> Если <math>r=0</math>, возвращаемся к предыдущему шагу.
- Нахождение <math>s=(rd+ke)\,\bmod\,q</math>. Если <math>s=0</math>, возвращаемся к шагу 3.
- Формирование цифровой подписи <math>\xi=(\bar{r}|\bar{s})</math>, где <math>\bar{r}</math> и <math>\bar{s}</math> — векторы, соответствующие <math>r</math> и <math>s</math>.
Проверка цифровой подписи
- Вычисление по цифровой подписи <math>\xi</math> чисел <math>r</math> и <math>s</math>, учитывая, что <math>\xi=(\bar{r}|\bar{s})</math>, где <math>r</math> и <math>s</math> — числа, соответствующие векторам <math>\bar{r}</math> и <math>\bar{s}</math>. Если хотя бы одно из неравенств <math>r<q</math> и <math>s<q</math> неверно, то подпись неправильная.
- Вычисление хеш-функции от сообщения М: <math>\bar{h} = h(M).</math>
- Вычисление <math>e=z\,\bmod\,q</math>, и если <math>e=0</math>, положить <math>e=1</math>. Где <math>z</math> — целое число соответствующее <math>\bar{h}.</math>
- Вычисление <math>\nu=e^{-1}\,\bmod\,q.</math>
- Вычисление <math>z_1=s\nu\,\bmod\,q</math> и <math>z_2=-r\nu\,\bmod\,q.</math>
- Шаблон:AnchorВычисление точки эллиптической кривой <math>C=z_1P+z_2Q</math>. И определение <math>R=x_c\,\bmod\,q</math>, где <math>x_c</math> — координата <math>x</math> точки <math>C.</math>
- В случае равенства <math>R=r</math> подпись правильная, иначе — неправильная.
Криптостойкость
Криптостойкость цифровой подписи опирается на две компоненты — на стойкость хеш-функции и на стойкость самого алгоритма шифрования.[2]
Вероятность взлома хеш-функции по ГОСТ 34.11-94 составляет <math>1{,}73 \times {10}^{-77}</math> при подборе коллизии на фиксированное сообщение и <math>2{,}94 \times {10}^{-39}</math> при подборе любой коллизии.[2] Стойкость алгоритма шифрования основывается на проблеме дискретного логарифмирования в группе точек эллиптической кривой. На данный момент нет метода решения данной проблемы хотя бы с субэкспоненциальной сложностью.[3]
Один из самых быстрых алгоритмов, на данный момент, при правильном выборе параметров — <math>\rho</math>-метод и <math>\Iota</math>-метод Полларда.[4]
Для оптимизированного <math>\rho</math>-метода Полларда вычислительная сложность оценивается как <math>O(\sqrt{q})</math>. Таким образом для обеспечения криптостойкости <math>{10}^{30}</math> операций необходимо использовать 256-разрядное <math>q</math>.[2]
Отличия от ГОСТ Р 34.10-94 (стандарт 1994—2001 гг)Шаблон:Anchor
Новый и старый ГОСТы цифровой подписи очень похожи друг на друга. Основное отличие — в старом стандарте часть операций проводится над полем <math>\mathbb{Z}_p</math>, а в новом — над группой точек эллиптической кривой, поэтому требования, налагаемые на простое число <math>p</math> в старом стандарте (<math>2^{509}<p<2^{512}</math> или <math>2^{1020}<p<2^{1024}</math>), более жёсткие, чем в новом.
Алгоритм формирования подписи отличается только в пункте 4. В старом стандарте в этом пункте вычисляются <math>\tilde{r}=a^k\,\bmod\,p</math> и <math>r=\tilde{r}\,\bmod\,q</math> и, если <math>r=0</math>, возвращаемся к пункту 3. Где <math>1<a<p-1</math> и <math>a^q\bmod\,p=1</math>.
Алгоритм проверки подписи отличается только в пункте 6. В старом стандарте в этом пункте вычисляется <math>R = (a^{z_1}y^{z_2}\,\bmod\,p)\,\bmod\,q</math>, где <math>y</math> — открытый ключ для проверки подписи, <math>y=a^d\,\bmod\,p</math>. Если <math>R=r</math>, подпись правильная, иначе неправильная. Здесь <math>q</math> — простое число, <math>2^{254}<q<2^{256}</math> и <math>q</math> является делителем <math>p-1</math>.
Использование математического аппарата группы точек эллиптической кривой позволяет существенно сократить порядок модуля <math>p</math> без потери криптостойкости.[2]
Также старый стандарт описывает механизмы получения чисел <math>p</math>, <math>q</math> и <math>a</math>.
Возможные применения
- Использование пары ключей (открытый, закрытый) для установления ключа сессии.[5]
- Использование в сертификатах открытых ключей.[6]
- Использование в S/MIME (PKCS #7, Cryptographic Message Syntax).[7]
- Использование для защиты соединений в TLS (SSL, HTTPS, WEB).[8]
- Использование для защиты сообщений в XML Signature (XML Encryption).[9]
- Защита целостности Интернет-адресов и имён (DNSSEC).[10]
Примечания
Ссылки
- Текст стандарта Шаблон:ГОСТ
- Текст стандарта Шаблон:ГОСТ
- Текст стандарта Шаблон:ГОСТ
- Текст стандарта Шаблон:ГОСТ
- Программные реализации
- Шаблон:Cite web
- Шаблон:Github
- КриптоПро CSP — криптографический проект компании «Крипто-Про».
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Github
- Шаблон:Нп5
- Bouncy Castle
- Аппаратные реализации
Шаблон:Криптографические алгоритмы с парой открытый/закрытый ключ
- ↑ Шаблон:Cite web
- ↑ 2,0 2,1 2,2 2,3 Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ RFC 4357, глава 5.2, «VKO GOST R 34.10-2001» — Additional Cryptographic Algorithms for Use with GOST 28147-89, GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 Algorithms
- ↑ RFC 4491 — Using the GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 Algorithms with the Internet X.509 Public Key Infrastructure
- ↑ RFC 4490 — Using the GOST 28147-89, GOST R 34.11-94, GOST R 34.10-94, and GOST R 34.10-2001 Algorithms with Cryptographic Message Syntax (CMS)
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- Страницы с неработающими файловыми ссылками
- Русская Википедия
- Стандарты криптографии
- ГОСТ Р
- ГОСТ
- Криптография
- Криптография с открытым ключом
- Электронная подпись
- Эллиптические кривые
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Википедия
- Статья из Википедии
- Статья из Русской Википедии