Русская Википедия:ESIGN
ESIGN (Шаблон:Lang-en — эффективная цифровая подпись) — схема цифровой подписи с открытым ключом, основанная на проблеме факторизации чисел. Отличительной чертой данной схемы является возможность быстрой генерации подписи.Шаблон:Sfn
История
Цифровая подпись была разработана в японской компании NTT в 1985 году.Шаблон:Sfn Схема оказалась эффективна в плане скорости генерации цифровой подписи. Однако первые версии были взломаны Эрни Брикеллом (Шаблон:Lang-en) и Джоном ДеЛаурентисом (Шаблон:Lang-en), после чего рекомендованные параметры алгоритма были модифицированы.Шаблон:Sfn Последующие попытки взлома оказались безуспешными. Авторы уверяют, что сложность взлома последней версии ESIGN сравнима со сложностью задачи факторизации числа <math>n</math> вида <math>p^2q</math>, где <math>p</math> и <math>q</math> — простые числа.Шаблон:Sfn
Описание протокола
Введение
В протоколе участвуют два субъекта: субъект <math>A</math>, цель которого — доказать то, что является автором сообщения <math>m</math>, и субъект <math>B</math>, целью которого является проверка авторства. В ESIGN для осуществления поставленных целей <math>A</math> и <math>B</math> должны совершить следующие действияШаблон:Sfn.
- Предварительно, <math>A</math> генерирует ключи: открытый, известный всем, и закрытый, известный только субъекту <math>A</math>.
- Субъект <math>A</math> генерирует цифровую подпись <math>s</math> для сообщения <math>m</math> на основе закрытого ключа.
- <math>A</math> отправляет сообщение <math>m</math> вместе с подписью <math>s</math> субъекту <math>b</math>.
- Субъект <math>B</math> проверяет достоверность подписи на основе открытого ключа.
Генерация открытого и закрытого ключей
Ключи ESIGN генерируются следующим образомШаблон:Sfn.
- Случайным образом выбираются два простых числа <math>p</math> и <math>q</math> одинаковой битовой длины.
- Вычисляется число <math>n = p^2q</math>.
- Выбирается целое положительное число <math>k \geqslant 4</math>.
- Пара чисел <math>(n,k)</math> является открытым ключом.
- Пара чисел <math>(p,q)</math> — закрытый ключ.
Генерация подписи
Чтобы подписать сообщение <math>m</math>, где <math>m</math> — двоичное число произвольной длины, предпринимаются следующие шагиШаблон:Sfn.
- Вычисляется <math>\mu = h(m)</math>, где <math>h</math> — заранее выбранная хеш-функция, принимающая значения от <math>0</math> до <math>n-1</math>.
- Выбирается случайное число <math>x</math> из интервала <math>[0, pq)</math>.
- Вычисляется <math>\chi = \left \lceil \frac{\mu - (x^k \bmod n)}{pq} \right \rceil</math> и <math>\varkappa = \left(\frac {\chi} {k*x^{k-1}} \right) \bmod p</math>, где <math>\lceil\cdot\rceil\colon \R \to \Z</math> — функция округления до наименьшего целого, большего аргумента.
- Вычисляется подпись <math>s = x + \varkappa p q</math>.
Проверка подписи
Чтобы проверить, что подпись <math>s</math> действительно подписывает сообщение <math>m</math>, предпринимаются следующие шагиШаблон:Sfn.
- Вычисляется <math>\mu = h(m)</math>, где <math>h</math> — та же самая хеш-функция, которая использовалась для генерации подписи.
- Вычисляется <math>\xi = \left \lceil \frac {2}{3} \log_2{n}\right \rceil</math>.
- Выполняется проверка неравенства <math>\mu \leqslant s^k \bmod n \leqslant \mu + 2^{\xi}</math>.
- Подпись считается достоверной, если неравенство выполнено.
Предыдущие версии
В изначально предложенном варианте ESIGN параметр <math>k</math> был равен двум.Шаблон:Sfn Однако после успешной атаки Эрни Брикелла и Джона ДеЛаурентиса, которая распространялась также на вариант схемы с <math>k = 3</math>, авторы изменили требование к этому параметру на существующее <math>k \geqslant 4</math>.Шаблон:Sfn
Криптоанализ
Атака на хеш-функцию
Атаки на хеш-функцию <math>h</math> с целью подделки подписи основаны на ее несовершенности, то есть на несоответствии хеш-функции одному или нескольким критериям криптографической стойкости c той оговоркой, что в случае ESIGN равенства в критериях стоит понимать с точностью до <math>(\log_2{n})/3</math> старших бит. Это послабление связано с условием проверки подписи, которое выполняется не только для исходного значения хеш-функции, но и для прочих, совпадающих в первых <math>(\log_2{n})/3</math> старших битах.
Допустим, что функция <math>h</math> неустойчива к поиску коллизий, то есть можно найти такие различные <math>m</math> и <math>m'</math>, что <math>h(m)</math> и <math>h(m')</math> совпадают в первых <math>(\log_2{n})/3</math> старших битах. Тогда, подписывая сообщение <math>m</math>, автор <math>A</math>, ничего не подозревая, автоматически подписывает сообщение <math>m'</math>, так как выполняется неравенство <math>h(m') \leqslant s^k \bmod n \leqslant h(m') + 2^{\left \lceil \frac {2}{3} \log_2{n}\right \rceil}</math>
Если выбранная хеш-функция криптографически стойкая, то атака с использованием коллизий займет <math>2^{(\log_2{n})/3}</math> операций вычисления хеш-функции, атака с использованием второго прообраза — <math>2^{{(\log_2{n})/6}}</math> операций, что считается неосуществимым, при больших <math>n</math>.Шаблон:SfnШаблон:Sfn
Атака на открытый ключ
Атака на открытый ключ <math>(n,k)</math> заключается в попытке получить на его основе закрытый ключ <math>(p,q)</math>. Сделать это можно, решив уравнение <math>n = p^2q</math>, то есть факторизовав число <math>n</math>. Можно заметить, что в RSA число <math>n</math> генерируется похожим образом, там <math>n = pq</math>, но на сегодняшний день вопрос о том, в каком из случаев факторизация становится проще или сложнее, остается открытым, так как эффективных алгоритмов факторизации до сих пор нет. На данный момент самым быстрым способом факторизовать число <math>n</math>, что для ESIGN, что для RSA, является метод решета числового поля, который делает это со скоростью, зависящей от битовой длины <math>n</math>. Однако, при большой битовой длине числа <math>n</math> задача факторизации становится невыполнимой.Шаблон:SfnШаблон:Sfn
Рекомендуемые параметры
Помимо уже введенных ограничений в описании ESIGN, для большей безопасности рекомендуется выбирать размер <math>p</math> и <math>q</math> равным или большим <math>320</math> бит, размер <math>n</math> равным или большим <math>960</math> соответственно, а параметр <math>k</math> большим или равным 8Шаблон:Sfn:
- <math>\log_2{p} \geqslant 320</math>;
- <math>k \geqslant 8 </math>;
Уровень безопасности относительно других схем цифровой подписи
Ниже представлена таблица соответствия уровня безопасности ESIGN уровням безопасности RSA и ECDSA при различных размерах параметра <math>n</math> в битах. Можно заметить, что при одинаковым размерах <math>n</math> RSA и ESIGN сравнимы по уровню безопасности.Шаблон:Sfn
Размер <math>n</math> в ESIGN, биты | Размер <math>n</math> в RSA, биты | Размер <math>n</math> в ECDSA, биты |
---|---|---|
960 | 960 | 152 |
1024 | 1024 | 160 |
2048 | 2048 | 224 |
3072 | 3072 | 256 |
7680 | 7680 | 384 |
Преимущества
Схема ESIGN позволяет быстро генерировать подпись. Так как вычислительно сложные операции, такие как возведение в степень <math>(x^k \bmod n)</math> и нахождение обратного элемента <math>(k*x^{k-1})^{-1}</math>, не зависят от подписываемого сообщения <math>m</math>, их можно осуществить заранее и сохранить полученные значения в памяти. Таким образом, чтобы подписать сообщение, достаточно выполнить оставшиеся операции сложения, умножения и деления, доля которых в вычислительной сложности алгоритма создания подписи мала. В случае, когда <math>k = 4</math>, а битовая длина <math>n</math> равна <math>768</math>, скорость генерации подписи в <math>10\div100</math> больше, чем для RSA при соответствующих параметрах. Что же касается проверки подписи, то её скорость сравнима со скоростью проверки подписи в алгоритме RSA, открытая экспонента которого мала.Шаблон:SfnШаблон:Sfn
Протоколы идентификации на основе ESIGN
С помощью ESIGN можно реализовать протоколы идентификации с нулевым разглашением, которые позволяют субъекту <math>P</math> (Шаблон:Lang-en — доказывающий) доказать субъекту <math>V</math> (Шаблон:Lang-en — проверяющий) факт наличия информации, сохранив её в тайне от <math>V</math>. Протоколы идентификации на основе ESIGN не уступают протоколу Фейга — Фиата — Шамира в своей эффективности. Мы рассмотрим два таких протокола: трёхраундовый и двухраундовый.Шаблон:Sfn
Трёхраундовая схема идентификации
- <math>P</math> генерирует открытые <math>(n,k)</math> и секретные <math>(p,q)</math> ESIGN ключи.
- <math>P</math> выбирает случайным образом числа <math>r</math> и <math>u</math>, вычисляет <math>x = f(r\|u)</math>, где <math>f</math> — односторонняя функция, <math>\|</math> — операция конкатенации, и отправляет <math>x</math> проверяющему <math>V</math>.
- <math>V</math> выбирает случайным образом число <math>y</math> и отправляет доказывающему.
- <math>P</math> вычисляет <math>m = r \oplus y</math>, генерирует подпись <math>s</math> для <math>m</math> и отправляет тройку <math>(s,r,u)</math> проверяющему.
- <math>V</math> проверяет выполнение равенства <math>x=f(r\|u)</math> и достоверность подписи <math>s</math> для сообщения <math>m</math>.
Двухраундовая схема идентификации
- <math>P</math> генерирует открытые <math>(n,k)</math> и секретные <math>(p,q)</math> ESIGN ключи.
- <math>V</math> выбирает случайным образом число <math>r</math> и отправляет доказывающему.
- <math>P</math> выбирает случайным образом число <math>u</math>, вычисляет <math>m = f(r\|u)</math>, генерирует подпись <math>s</math> для <math>m</math> и отправляет <math>(s,u)</math> проверяющему.
- <math>V</math> проверяет выполнение равенства <math>m=f(r\|u)</math> и достоверность подписи <math>s</math> для сообщения <math>m</math>.
В приведенных протоколах секретной информацией являются ключи <math>(p,q)</math>, знание которых и доказывает субъект <math>P</math>. Если результаты всех проверок на завершающих этапах оказываются успешными, то считается, что <math>P</math> действительно обладает секретом.
Примечания
Литература
- Книга:Шнайер Б.: Прикладная криптография
- Шаблон:Книга
- Шаблон:СтатьяШаблон:Недоступная ссылка
- Шаблон:Статья