私钥长度字节

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

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

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

即,如果模数是n,并且是两个素数pq的乘积,则私钥包括:

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

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

有关RSA的详细信息,请参阅PKCS#1 。

不要忘了, 2048是以为单位的模数的长度,但是您的私钥的度量是以字节单位的 。 私钥是公开指数的模数和乘法倒数,根据您使用的工具包,它也可能存储CN,DN(对于x509键)或子键(对于GPG键),所以只需比较大小可能没有用处。

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

@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 ... ... 

所以,私有指数是256bytes(2048bits),不是模数,不是吗?