我们称之为RSA密钥的大小?和其他规格

时间:2016-07-04 21:45:55

标签: cryptography key rsa public

我有几个问题:

  • 我们称RSA密钥的大小是多少?产品的大小pq? 1024位RSA密钥意味着二进制中n = pq的表示恰好需要1024位或至少1024位?

  • 当我生成一个长度的密钥时,让我们说,1024位,其他参数的大小是多少,例如d和e私有和公共指数?

  • 如何从DER或PEM格式中知道密钥的大小以及如何分隔每个参数?

  • 什么是"版本"它有什么可能的价值?

1 个答案:

答案 0 :(得分: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,即第四个费马素数(OpenSSL中的F4)。这加速了加密和验证公钥操作。

  

如何从DER或PEM格式中知道密钥的大小以及如何分隔每个参数?

您必须阅读PKCS#1标准和ASN.1规范。数字在DER编码的ASN.1 INTEGER值中指定。 DER使用大端数字,因此它将是:

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

现在标记TT将设置为值02,只是意味着INTEGER。

LL LL ...用于表示长度。要么只是80之前的单个字节,它直接指定VV VV ...中存储的值的大小,或者设置为8x LL LL ...,其中x是<{1}}的数量接下来是em> length 字节。 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(线路尺寸有限)组成。这些基本64个字符是包含公钥的证书的BER或DER编码。

不幸的是我无法在这里解释X509证书格式,您必须阅读规范(RFC)。

  

什么是&#34;版本&#34;它的可能价值是什么?

通常是X509 证书&amp;证书请求版本,当前设置为3。

版本也可以指向RSA规范的版本。在这种情况下,旧签名/加密格式通常为v1.5,PSS / OAEP 填充方法为v2.1