2016-07-04 6 views
1

У меня есть несколько вопроса:Что мы называем размером ключа RSA? И другие характеристики

  • Что мы называем размером ключа RSA? Размер продукта pq? 1024-битный RSA-ключ означает, что представление n = pq в двоичном формате требует ровно 1024 бит или не менее 1024?

  • Когда я сгенерирую ключ длиной, допустим, 1024 бит, каков размер других параметров, таких как d и e, частный и открытый экспонаты?

  • Как из формата DER или PEM знать размер ключа и как разграничить каждый параметр?

  • Что такое «версия» и каковы ее возможные значения?

+0

Вы спрашиваете о каком-то конкретном применении/реализации RSA? Некоторые из них могут иметь дополнительные требования: RPKI https://tools.ietf.org/html/rfc6485 ограничивает подписи ключей RSA к «модулю 2048 бит» и общедоступному экспоненту (e) 65 537. »; pgp/gpg, openssl или другое lib/app могут иметь некоторые ограничения. – osgx

+0

Я говорил aboit openssl инструмент командной строки и crypto.publickey в python, но я не знал, что это зависит от реализации tye. Я думал, что есть норма или что-то – x4rkz

ответ

3

Что мы называем размером ключа RSA? Размер продукта pq? 1024-битный RSA-ключ означает, что представление n = pq в двоичном формате требует ровно 1024 бит или не менее 1024?

Точно 1024 бит. Если мы используем стандартное сетевое упорядочение (то есть большое конечное представление), тогда первый бит беззнакового числа должен поэтому быть 1. Это также означает, что модуль всегда равен по одному байту больше при кодировании в ASN.1/DER, поскольку ASN.1 принимает номера со знаком.

Когда я генерирую ключ длиной, допустим, 1024 бит, каков размер других параметров, таких как d и e, - частный и открытый показатели?

d часто близко к размеру модуля и всегда меньше. Но в принципе любое количество бит 0 может быть самым значительным, поэтому теоретически он может иметь любой размер. Меньшие значения d становятся все менее вероятными, но не удивляйтесь, если несколько байтов установлены на ноль (и поэтому отсутствуют в кодировке номера, например, ASN.1/DER).

e в принципе имеет такие же свойства, как d, но при вычислении пары ключей он обычно устанавливается на небольшое значение. Обычно это означает, что он имеет значение 010001 в шестнадцатеричных единицах или 65537, четвертое Fermat prime (F4 в OpenSSL). Это ускоряет операции открытого ключа шифрования и проверки.

Как из формата DER или PEM мы знаем размер ключа и как разграничить каждый параметр?

Для этого вам необходимо ознакомиться со стандартами PKCS # 1 и спецификациями ASN.1. Номера указаны в значениях ASN.1 INTEGER, закодированных DER. DER использует большое количество Endian, так что бы:

TT (LL LL ...) VV VV ... 

Теперь тег TT будет установлен на значение 02 просто означает INTEGER.

LL LL ... Используется для обозначения длины.Либо это всего лишь один байт до 80, который напрямую определяет размер значения, хранящегося в VV VV ..., или он установлен в 8x LL LL ..., где x - это число длина байтов, которые приведены ниже. 8x LL LL ... - это просто беззнаковый номер большого конца, обозначающий размер VV VV ....

VV VV ...подписан большое значение по-эндиански.

Так что 02 03 01 00 01 часто является публичным показателем. 02 81 00 YY XX XX ... - это модуль 128 байтов, которому предшествует байт 00, чтобы сделать его двухзначным числом без знака. 128 байтов, очевидно, означает размер ключа 1024 бит. YY всегда 80 или выше, иначе размер ключа будет меньше 1024 бит.

Эти параметры являются частью ключа X509 или сертификата, который является более крупной структурой. PEM состоит в основном из строки заголовка, нижнего колонтитула с базой 64 (с ограниченным размером линии) между ними. Эти базовые 64 символа представляют собой кодировку BER или DER сертификата, содержащего открытый ключ.

К сожалению, я не могу объяснить формат сертификата X509 здесь, вам нужно будет прочитать спецификации (RFC) для этого.

Что такое «версия» и каковы ее возможные значения?

Это обычно X509 сертификат & сертификат запрос версия, которая в настоящее время устанавливается на 3.

версии также может указывать на версию спецификации RSA. В этом случае часто используется либо v1.5 для старых форматов сигнатуры/шифрования, либо v2.1 для методов заполнения PSS/OAEP .

+0

Я напечатал hex.bytes_to_hex (RSA.generate (1024) .publickey(). ExportKey ('DER')) где bytes_to_hex - это моя функция. Я узнал конец ... 02 03 01 00 01, но он начинается с 30: 81: 9f: 30: 0d ... Я подсчитываю 162 байта, если я удаляю 5 последних, а два первых - слева, 9b, из-за чего я понял, что он должен начинаться с 02: 9b: 00 ... Почему размер isnt 2 + 128 + 5? И почему это начинается с 30? 3 выглядит как версия, но rfc говорит, что для открытого ключа нет версии – x4rkz

+1

Вставьте ее [здесь] (https://lapo.it/asn1js/) –

+0

Спасибо, где я могу найти документацию, описывающую 6 первых полей которые, я думаю, являются частью ASN.1. – x4rkz

Смежные вопросы