ESIGN
ESIGN (англ. Efficient digital SIGNature — эффективная цифровая подпись) — схема цифровой подписи с открытым ключом, основанная на проблеме факторизации чисел. Отличительной чертой данной схемы является возможность быстрой генерации подписи.[1]
История
Цифровая подпись была разработана в японской компании NTT в 1985 году.[2] Схема оказалась эффективна в плане скорости генерации цифровой подписи. Однако первые версии были взломаны Эрни Брикеллом (англ. Ernie Btickel) и Джоном ДеЛаурентисом (англ. John DeLaurentis), после чего рекомендованные параметры алгоритма были модифицированы.[3] Последующие попытки взлома оказались безуспешными. Авторы уверяют, что сложность взлома последней версии ESIGN сравнима со сложностью задачи факторизации числа [math]\displaystyle{ n }[/math] вида [math]\displaystyle{ p^2q }[/math], где [math]\displaystyle{ p }[/math] и [math]\displaystyle{ q }[/math] — простые числа.[4]
Описание протокола
Введение
В протоколе участвуют два субъекта: субъект [math]\displaystyle{ A }[/math], цель которого — доказать то, что является автором сообщения [math]\displaystyle{ m }[/math], и субъект [math]\displaystyle{ B }[/math], целью которого является проверка авторства. В ESIGN для осуществления поставленных целей [math]\displaystyle{ A }[/math] и [math]\displaystyle{ B }[/math] должны совершить следующие действия[5].
- Предварительно, [math]\displaystyle{ A }[/math] генерирует ключи: открытый, известный всем, и закрытый, известный только субъекту [math]\displaystyle{ A }[/math].
- Субъект [math]\displaystyle{ A }[/math] генерирует цифровую подпись [math]\displaystyle{ s }[/math] для сообщения [math]\displaystyle{ m }[/math] на основе закрытого ключа.
- [math]\displaystyle{ A }[/math] отправляет сообщение [math]\displaystyle{ m }[/math] вместе с подписью [math]\displaystyle{ s }[/math] субъекту [math]\displaystyle{ b }[/math].
- Субъект [math]\displaystyle{ B }[/math] проверяет достоверность подписи на основе открытого ключа.
Генерация открытого и закрытого ключей
Ключи ESIGN генерируются следующим образом[6].
- Случайным образом выбираются два простых числа [math]\displaystyle{ p }[/math] и [math]\displaystyle{ q }[/math] одинаковой битовой длины.
- Вычисляется число [math]\displaystyle{ n = p^2q }[/math].
- Выбирается целое положительное число [math]\displaystyle{ k \geqslant 4 }[/math].
- Пара чисел [math]\displaystyle{ (n,k) }[/math] является открытым ключом.
- Пара чисел [math]\displaystyle{ (p,q) }[/math] — закрытый ключ.
Генерация подписи
Чтобы подписать сообщение [math]\displaystyle{ m }[/math], где [math]\displaystyle{ m }[/math] — двоичное число произвольной длины, предпринимаются следующие шаги[6].
- Вычисляется [math]\displaystyle{ \mu = h(m) }[/math], где [math]\displaystyle{ h }[/math] — заранее выбранная хеш-функция, принимающая значения от [math]\displaystyle{ 0 }[/math] до [math]\displaystyle{ n-1 }[/math].
- Выбирается случайное число [math]\displaystyle{ x }[/math] из интервала [math]\displaystyle{ [0, pq) }[/math].
- Вычисляется [math]\displaystyle{ \chi = \left \lceil \frac{\mu - (x^k \bmod n)}{pq} \right \rceil }[/math] и [math]\displaystyle{ \varkappa = \left(\frac {\chi} {k*x^{k-1}} \right) \bmod p }[/math], где [math]\displaystyle{ \lceil\cdot\rceil\colon \R \to \Z }[/math] — функция округления до наименьшего целого, большего аргумента.
- Вычисляется подпись [math]\displaystyle{ s = x + \varkappa p q }[/math].
Проверка подписи
Чтобы проверить, что подпись [math]\displaystyle{ s }[/math] действительно подписывает сообщение [math]\displaystyle{ m }[/math], предпринимаются следующие шаги[6].
- Вычисляется [math]\displaystyle{ \mu = h(m) }[/math], где [math]\displaystyle{ h }[/math] — та же самая хеш-функция, которая использовалась для генерации подписи.
- Вычисляется [math]\displaystyle{ \xi = \left \lceil \frac {2}{3} \log_2{n}\right \rceil }[/math].
- Выполняется проверка неравенства [math]\displaystyle{ \mu \leqslant s^k \bmod n \leqslant \mu + 2^{\xi} }[/math].
- Подпись считается достоверной, если неравенство выполнено.
Предыдущие версии
В изначально предложенном варианте ESIGN параметр [math]\displaystyle{ k }[/math] был равен двум.[5] Однако после успешной атаки Эрни Брикелла и Джона ДеЛаурентиса, которая распространялась также на вариант схемы с [math]\displaystyle{ k = 3 }[/math], авторы изменили требование к этому параметру на существующее [math]\displaystyle{ k \geqslant 4 }[/math].[7]
Криптоанализ
Атака на хеш-функцию
Атаки на хеш-функцию [math]\displaystyle{ h }[/math] с целью подделки подписи основаны на ее несовершенности, то есть на несоответствии хеш-функции одному или нескольким критериям криптографической стойкости c той оговоркой, что в случае ESIGN равенства в критериях стоит понимать с точностью до [math]\displaystyle{ (\log_2{n})/3 }[/math] старших бит. Это послабление связано с условием проверки подписи, которое выполняется не только для исходного значения хеш-функции, но и для прочих, совпадающих в первых [math]\displaystyle{ (\log_2{n})/3 }[/math] старших битах.
Допустим, что функция [math]\displaystyle{ h }[/math] неустойчива к поиску коллизий, то есть можно найти такие различные [math]\displaystyle{ m }[/math] и [math]\displaystyle{ m' }[/math], что [math]\displaystyle{ h(m) }[/math] и [math]\displaystyle{ h(m') }[/math] совпадают в первых [math]\displaystyle{ (\log_2{n})/3 }[/math] старших битах. Тогда, подписывая сообщение [math]\displaystyle{ m }[/math], автор [math]\displaystyle{ A }[/math], ничего не подозревая, автоматически подписывает сообщение [math]\displaystyle{ m' }[/math], так как выполняется неравенство [math]\displaystyle{ h(m') \leqslant s^k \bmod n \leqslant h(m') + 2^{\left \lceil \frac {2}{3} \log_2{n}\right \rceil} }[/math]
Если выбранная хеш-функция криптографически стойкая, то атака с использованием коллизий займет [math]\displaystyle{ 2^{(\log_2{n})/3} }[/math] операций вычисления хеш-функции, атака с использованием второго прообраза — [math]\displaystyle{ 2^{{(\log_2{n})/6}} }[/math] операций, что считается неосуществимым, при больших [math]\displaystyle{ n }[/math].[8][9]
Атака на открытый ключ
Атака на открытый ключ [math]\displaystyle{ (n,k) }[/math] заключается в попытке получить на его основе закрытый ключ [math]\displaystyle{ (p,q) }[/math]. Сделать это можно, решив уравнение [math]\displaystyle{ n = p^2q }[/math], то есть факторизовав число [math]\displaystyle{ n }[/math]. Можно заметить, что в RSA число [math]\displaystyle{ n }[/math] генерируется похожим образом, там [math]\displaystyle{ n = pq }[/math], но на сегодняшний день вопрос о том, в каком из случаев факторизация становится проще или сложнее, остается открытым, так как эффективных алгоритмов факторизации до сих пор нет. На данный момент самым быстрым способом факторизовать число [math]\displaystyle{ n }[/math], что для ESIGN, что для RSA, является метод решета числового поля, который делает это со скоростью, зависящей от битовой длины [math]\displaystyle{ n }[/math]. Однако, при большой битовой длине числа [math]\displaystyle{ n }[/math] задача факторизации становится невыполнимой.[10][9]
Рекомендуемые параметры
Помимо уже введенных ограничений в описании ESIGN, для большей безопасности рекомендуется выбирать размер [math]\displaystyle{ p }[/math] и [math]\displaystyle{ q }[/math] равным или большим [math]\displaystyle{ 320 }[/math] бит, размер [math]\displaystyle{ n }[/math] равным или большим [math]\displaystyle{ 960 }[/math] соответственно, а параметр [math]\displaystyle{ k }[/math] большим или равным 8[11]:
- [math]\displaystyle{ \log_2{p} \geqslant 320 }[/math];
- [math]\displaystyle{ k \geqslant 8 }[/math];
Уровень безопасности относительно других схем цифровой подписи
Ниже представлена таблица соответствия уровня безопасности ESIGN уровням безопасности RSA и ECDSA при различных размерах параметра [math]\displaystyle{ n }[/math] в битах. Можно заметить, что при одинаковым размерах [math]\displaystyle{ n }[/math] RSA и ESIGN сравнимы по уровню безопасности.[12]
| Размер [math]\displaystyle{ n }[/math] в ESIGN, биты | Размер [math]\displaystyle{ n }[/math] в RSA, биты | Размер [math]\displaystyle{ n }[/math] в ECDSA, биты |
|---|---|---|
| 960 | 960 | 152 |
| 1024 | 1024 | 160 |
| 2048 | 2048 | 224 |
| 3072 | 3072 | 256 |
| 7680 | 7680 | 384 |
Преимущества
Схема ESIGN позволяет быстро генерировать подпись. Так как вычислительно сложные операции, такие как возведение в степень [math]\displaystyle{ (x^k \bmod n) }[/math] и нахождение обратного элемента [math]\displaystyle{ (k*x^{k-1})^{-1} }[/math], не зависят от подписываемого сообщения [math]\displaystyle{ m }[/math], их можно осуществить заранее и сохранить полученные значения в памяти. Таким образом, чтобы подписать сообщение, достаточно выполнить оставшиеся операции сложения, умножения и деления, доля которых в вычислительной сложности алгоритма создания подписи мала. В случае, когда [math]\displaystyle{ k = 4 }[/math], а битовая длина [math]\displaystyle{ n }[/math] равна [math]\displaystyle{ 768 }[/math], скорость генерации подписи в [math]\displaystyle{ 10\div100 }[/math] больше, чем для RSA при соответствующих параметрах. Что же касается проверки подписи, то её скорость сравнима со скоростью проверки подписи в алгоритме RSA, открытая экспонента которого мала.[13][9]
Протоколы идентификации на основе ESIGN
С помощью ESIGN можно реализовать протоколы идентификации с нулевым разглашением, которые позволяют субъекту [math]\displaystyle{ P }[/math] (англ. Prover — доказывающий) доказать субъекту [math]\displaystyle{ V }[/math] (англ. Verifier — проверяющий) факт наличия информации, сохранив её в тайне от [math]\displaystyle{ V }[/math]. Протоколы идентификации на основе ESIGN не уступают протоколу Фейга — Фиата — Шамира в своей эффективности. Мы рассмотрим два таких протокола: трёхраундовый и двухраундовый.[14]
Трёхраундовая схема идентификации
- [math]\displaystyle{ P }[/math] генерирует открытые [math]\displaystyle{ (n,k) }[/math] и секретные [math]\displaystyle{ (p,q) }[/math] ESIGN ключи.
- [math]\displaystyle{ P }[/math] выбирает случайным образом числа [math]\displaystyle{ r }[/math] и [math]\displaystyle{ u }[/math], вычисляет [math]\displaystyle{ x = f(r\|u) }[/math], где [math]\displaystyle{ f }[/math] — односторонняя функция, [math]\displaystyle{ \| }[/math] — операция конкатенации, и отправляет [math]\displaystyle{ x }[/math] проверяющему [math]\displaystyle{ V }[/math].
- [math]\displaystyle{ V }[/math] выбирает случайным образом число [math]\displaystyle{ y }[/math] и отправляет доказывающему.
- [math]\displaystyle{ P }[/math] вычисляет [math]\displaystyle{ m = r \oplus y }[/math], генерирует подпись [math]\displaystyle{ s }[/math] для [math]\displaystyle{ m }[/math] и отправляет тройку [math]\displaystyle{ (s,r,u) }[/math] проверяющему.
- [math]\displaystyle{ V }[/math] проверяет выполнение равенства [math]\displaystyle{ x=f(r\|u) }[/math] и достоверность подписи [math]\displaystyle{ s }[/math] для сообщения [math]\displaystyle{ m }[/math].
Двухраундовая схема идентификации
- [math]\displaystyle{ P }[/math] генерирует открытые [math]\displaystyle{ (n,k) }[/math] и секретные [math]\displaystyle{ (p,q) }[/math] ESIGN ключи.
- [math]\displaystyle{ V }[/math] выбирает случайным образом число [math]\displaystyle{ r }[/math] и отправляет доказывающему.
- [math]\displaystyle{ P }[/math] выбирает случайным образом число [math]\displaystyle{ u }[/math], вычисляет [math]\displaystyle{ m = f(r\|u) }[/math], генерирует подпись [math]\displaystyle{ s }[/math] для [math]\displaystyle{ m }[/math] и отправляет [math]\displaystyle{ (s,u) }[/math] проверяющему.
- [math]\displaystyle{ V }[/math] проверяет выполнение равенства [math]\displaystyle{ m=f(r\|u) }[/math] и достоверность подписи [math]\displaystyle{ s }[/math] для сообщения [math]\displaystyle{ m }[/math].
В приведенных протоколах секретной информацией являются ключи [math]\displaystyle{ (p,q) }[/math], знание которых и доказывает субъект [math]\displaystyle{ P }[/math]. Если результаты всех проверок на завершающих этапах оказываются успешными, то считается, что [math]\displaystyle{ P }[/math] действительно обладает секретом.
Примечания
- ↑ Menezes, Oorschot, Vanstone, 1996, §11.7 п.2, pp. 473—474.
- ↑ Minghua, 2001, p. 1.
- ↑ Шнайер, 2002, глава 20, п.6.
- ↑ Atsushi, 1991, глава 2, п.3: «We conjective that to break our higher degree version (ESIGN) is as hard as facctoring N».
- ↑ 5,0 5,1 Шнайер, 2002, глава 2, п.6.
- ↑ 6,0 6,1 6,2 Menezes, Oorschot, Vanstone, 1996, §11.7 п.2, p. 473.
- ↑ Menezes, Oorschot, Vanstone, 1996, §11.9, pp. 486—487.
- ↑ Minghua, 2001, p. 3.
- ↑ 9,0 9,1 9,2 Menezes, Oorschot, Vanstone, 1996, §11.7 п.2, p. 474.
- ↑ Minghua, 2001, p. 4.
- ↑ Minghua, 2001, p. 6.
- ↑ Minghua, 2001, p. 7.
- ↑ Atsushi, 1991, глава 3.
- ↑ Atsushi, 1991, глава 4.
Литература
- Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.
- Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone. Глава 11. Digital Signatures // Handbook of Applied Cryptography. — 5-e изд. — CRC Press, 1996. — С. 473—474. — 816 с. — ISBN 0-8493-8523-7.
- Atsushi Fujioka, Tatsuaki Okamoto, Shoji Miyaguchi. ESIGN: An Efficient Digital Signature Implementation for Smart Cards // Advances in Cryptology — EUROCRYPT ’91 : материалы конф. / Advances in Cryptology - EUROCRYPT '91, Брайтон, Великобритания, 8-11 апреля 1991. — Springer Berlin Heidelberg, 1991. — С. 446—457. — ISBN 978-3-540-54620-7. (недоступная ссылка)
- Alfred Menezes , Minghua Qu , Doug Stinson , Yongge Wang. Evaluation of security level of cryptography: ESIGN signature scheme : материалы проекта / CRYPREC Project, Япония. — 2001. — Январь. Архивировано 9 августа 2017 года.