私钥长度字节

时间:2011-03-23 10:27:21

标签: cryptography key rsa private

所以即时生成2048 RSA密钥对。但是当我查看私钥时,长度只有1232字节。这与2048有什么关系,还是2048只是模数大小?

4 个答案:

答案 0 :(得分:58)

RSA密钥的大小以位表示,而不是以字节表示。 2048位是256字节。

裸骨RSA私钥包含两个整数,模数(一个大的复合整数,其位长 “RSA密钥长度”)和私有指数(另一个大整数,通常与模数大小相同)。然而,模数和私有指数具有一些内部结构,并且知道关于该结构的细节允许更快的实现(大约4倍)。因此,RSA私钥通常包含更多数据。

即,如果模数 n 并且是两个素数 p q 的乘积,那么私钥包括:< / p>

  • 模数 n (2048位密钥为256字节)
  • 公共指数 e (小,通常为65537,即可以编码为3或4个字节)
  • 私有指数 d (约256字节)
  • 因素 p q (每个128字节)
  • d 减少模数 p-1 (128字节)
  • d 减少模数 q-1 (128字节)
  • 1 / q mod p( q modulo p 的倒数; 128字节)

总计大约1160个字节。然后编码有一些开销,因为所有这些整数的长度可能略有不同(例如,没有什么真正需要 p q 具有完全相同的大小;而且, e 可能比那更大)。标准结构使用ASN.1,这意味着在这里和那里有一些额外的字节。将结构包装成更大的结构也是很常见的,该结构也将密钥标识为RSA的密钥。 1232字节与以PKCS#8格式编码的2048位RSA密钥兼容。

有关RSA的详细信息,请查看PKCS#1

答案 1 :(得分:1)

不要忘记2048中模数的长度,但您对私钥的测量是 bytes 。私钥是公共指数的模数和乘法反转,并且根据您使用的工具包,它还可能存储您的CN,DN(对于x509键)或子键(对于GPG键),因此只需比较尺寸可能没用。

答案 2 :(得分:0)

除了所需的值(模数是1,正如@sarnold所指出的那样)以及你在字面上比较位和字节的事实,一些实现还预先计算了一些其他值并将它们与关键,作为优化。例如,我不确定,但我相信我读到某些实现存储了产品(p-1)(q-1)(回想一下模数n实际上是产品pq,其中p和q是素数)

答案 3 :(得分:0)

@Thomas Pornin, 我使用ssh-keygen和openssl genpkey生成一个密钥对,每个密钥对用2048密钥,然后打印内容,就像这样:

Private-Key: (2048 bit)
modulus:
    00:bd:92:7f:da:4f:8f:b0:33:23:0f:d7:f4:12:39:
    5d:4d:32:48:1b:6e:de:2d:a5:b9:83:7f:d2:f2:dc:
    39:c5:f3:6f:6a:5f:8a:9d:21:9c:01:51:a7:22:99:
    70:0d:03:2e:12:63:f2:44:5f:a7:6e:cc:df:44:d9:
    8b:b2:7e:fd:8c:c3:ae:62:3e:1e:7e:7a:89:1d:94:
    de:86:24:36:d6:f8:23:32:aa:4d:dc:c7:44:87:9d:
    68:a5:31:f4:ff:a3:ff:9d:01:57:c9:82:9b:9b:e1:
    1c:0f:45:2b:0f:f2:ce:95:4c:13:fb:e9:99:19:82:
    64:97:18:77:13:bb:a9:8c:1f:a1:02:cf:92:1a:4d:
    13:16:55:8d:06:a8:32:8b:43:80:12:a4:98:77:a7:
    cb:7b:4f:e7:be:4e:eb:7b:52:1f:04:49:c9:03:5a:
    5b:70:f8:db:c7:8c:99:62:32:cd:3f:fc:70:7f:5e:
    de:e9:52:04:f6:19:df:c7:21:bd:28:d8:31:e1:43:
    27:ff:ce:43:3a:83:9e:97:69:93:35:46:1f:7f:1d:
    4a:43:7f:7f:be:fd:62:c6:f8:a3:9e:07:df:75:4b:
    08:4a:47:59:e6:b3:e2:d8:40:29:d4:de:88:54:f5:
    6b:e6:e8:77:d5:71:73:c0:1c:0e:8a:b1:ad:25:82:
    79:05
publicExponent: 65537 (0x10001)
privateExponent:
    42:98:a7:9f:9a:d9:a0:8d:a6:60:97:7d:df:b5:15:
    48:dc:44:26:97:01:28:4a:12:ec:d6:47:d6:17:75:
    98:4b:d7:b5:27:d1:3b:38:26:64:f4:39:61:d7:43:
    5c:de:e4:1d:83:cd:05:26:11:5c:c4:4e:1f:12:c9:
    97:b0:33:04:73:6d:dc:87:74:10:fc:9d:14:ae:4a:
    aa:17:28:c8:c6:2d:1f:4c:62:c4:0f:a0:cc:7f:88:
    d6:97:c1:38:d9:75:1f:c3:ec:02:17:86:f0:f0:d8:
    f9:a8:53:e3:6b:6a:15:5a:bf:9e:7c:c6:d3:06:52:
    ae:1d:e3:1f:24:8b:00:75:33:ee:aa:b0:69:52:a4:
    07:41:60:35:34:67:10:ac:40:b3:5b:70:d7:a7:9c:
    c5:aa:08:2e:f5:7b:64:4f:8d:ff:ca:f9:2e:5e:4c:
    a9:ef:74:74:18:9b:14:c5:96:ce:70:43:18:ff:2d:
    25:d6:5a:15:15:11:dc:e9:6e:98:ea:b0:1d:73:d0:
    73:e2:5c:e7:f9:b8:03:a8:8d:1f:81:ca:87:97:b5:
    82:3a:f2:71:15:0c:34:1f:63:8d:b8:03:99:6f:e7:
    4d:c0:b7:c9:9a:63:60:10:af:7a:5b:db:df:aa:a3:
    81:8e:6c:44:b0:77:ee:33:0c:00:e1:67:a8:e1:8d:
    61
...
...

那么,私有指数是256字节(2048位),而不是模数,不是吗?