#encryption #cryptography #rsa #digital-signature
#шифрование #криптография #rsa #цифровая подпись
Вопрос:
Есть ли какая-либо разница между показателем шифрования / дешифрования RSA и показателем RSA sign / check?
Комментарии:
1. Что вы подразумеваете под «подписью / проверкой»? Если это какой-либо вид авторизации или цифровой подписи, это делается с помощью шифрования и дешифрования. Если я зашифрую сообщение своим закрытым ключом, а вы расшифруете его с помощью моего открытого ключа, вы знаете, что сообщение было отправлено кем-то с моим закрытым ключом, предположительно мной.
2. ну, да, но при подписании вы подтверждаете фрагмент зашифрованного текста, при шифровании вы создаете новый фрагмент зашифрованного текста.
Ответ №1:
Нет. Открытый ключ пары RSA public / private состоит из показателя степени и модуля, независимо от того, используется ли он для подписи или шифрования. Наиболее распространенным показателем является 0x10001.
Статья Википедии о RSA довольно хороша.
Комментарии:
1. Вы имеете в виду 0x10001 (65537)?
Ответ №2:
Нет структурной разницы между парой ключей RSA, используемой для подписи, и парой, используемой для дешифрования шифрования. Теоретически, вы могли бы использовать одну пару для обоих, но это открывает пути для новых атак, поэтому это не рекомендуется.
С другой стороны, существуют различия между частными и общедоступными показателями:
-
Общедоступный показатель может быть относительно небольшим, что сокращает размер ключа и ускоряет шифрование и проверку подписи. Как сказал Чарли Мартин, 0x10001 = 2 ^ 16 1 = 65537 является обычным выбором.
-
Частный показатель, с другой стороны, является производным от открытого ключа и факторизации модуля, и обычно в порядке размера самого модуля. Поскольку он должен оставаться закрытым, он не может быть маленьким (иначе легко догадаться), и он также должен выполнять арифметическое отношение к общедоступному показателю, что автоматически делает его большим.
Это делает наивную подпись / дешифрование медленнее, чем соответствующие общедоступные операции, но, с другой стороны, это можно немного ускорить, используя разложение по модулю и китайскую теорему об остатках, т. е. вычисляя по модулю
p
иq
отдельно вместо по модулюm = p·q
, а затем объединяя результаты.
Обратите внимание, что мы проводим различие между общедоступными (шифрование / проверка) и частными (расшифровка / подписание) показателями, а не между показателями подписи / проверки и шифрования / дешифрования.
Ответ №3:
Нет разницы между ключом RSA, предназначенным для подписи / проверки, и ключом, предназначенным для шифрования / дешифрования, с точки зрения модуля — однако значение расширения использования ключа в сертификате X509 будет отличаться.
Подводя итог подробным ответам на Должен ли общедоступный показатель RSA быть только в {3, 5, 17, 257 или 65537} из соображений безопасности?) на security.stackexchange.com:
Теоретически, все распространенные реализации должны позволять использовать любое простое число > 2, кроме чисел Ферма — чисел вида 2 ^ n 1, например 3, 5, 17, 257, 65537 — которые, как известно, являются простыми, часто предпочтительнее, потому что они ускоряют вычисления на одной стороне операции (шифрование / дешифрование, подпись / проверка) — и 65537, вероятно, является наиболее распространенным показателем, используемым на данный момент времени (2020/11).
Однако ваша конкретная реализация может ограничить максимальное значение, которое вы можете использовать на практике.