1

我正在查看 google.com 的公钥证书,通过 chrome 访问https://google.com并单击证书图标来访问它。我看到它说公钥 RSA(1024 位),但我在实际密钥中看到 140 个十六进制对。我不应该看到 128 个十六进制对吗?转换的背后是什么?

4

1 回答 1

1

您可以在RFC 3279的第 2.3.1 节中查找存储公共 RSA 密钥的结构:

The RSA public key MUST be encoded using the ASN.1 type RSAPublicKey:

  RSAPublicKey ::= SEQUENCE {
     modulus            INTEGER,    -- n
     publicExponent     INTEGER  }  -- e

where modulus is the modulus n, and publicExponent is the public
exponent e.  The DER encoded RSAPublicKey is the value of the BIT
STRING subjectPublicKey.

对于您的 Google 证书,您已找到以下 140 个字节:

30 81 89 02 81 81 00 d2 e6 cd 45 3e a2 44 0c 31 72 ef 2c 3b
e2 e5 c4 c6 a0 b8 32 0e 9c 7e 7b 68 2f 15 43 48 97 24 02 3c
2b c0 b8 cf 74 2b 76 37 33 e5 31 2f 72 53 f8 ac 5e 01 bb 7c
b7 32 40 e5 28 78 5f dd a9 3b da b6 af 05 30 57 2b c2 cb 59
29 2e 34 ec e5 89 9e 61 70 6a 91 ab 49 3c 1b 24 8e 12 35 82
42 6b fc 28 f2 ee ae 1b 5c 60 c5 e8 a5 3d a1 1a 3a 19 b3 5e
84 f9 b5 93 1d 05 e9 9d 2a ba 86 6b ce 7d 83 02 03 01 00 01

如果您在 ASN.1 转储中查看它们,它们看起来像这样:

   <30 81 89>
271 30  137:           SEQUENCE {
   <02 81 81>
274 02  129:             INTEGER    
           :               00 D2 E6 CD 45 3E A2 44    ....E>.D
           :               0C 31 72 EF 2C 3B E2 E5    .1r.,;..
           :               C4 C6 A0 B8 32 0E 9C 7E    ....2..~
           :               7B 68 2F 15 43 48 97 24    {h/.CH.$
           :               02 3C 2B C0 B8 CF 74 2B    .<+...t+
           :               76 37 33 E5 31 2F 72 53    v73.1/rS
           :               F8 AC 5E 01 BB 7C B7 32    ..^..|.2
           :               40 E5 28 78 5F DD A9 3B    @.(x_..;
           :               DA B6 AF 05 30 57 2B C2    ....0W+.
           :               CB 59 29 2E 34 EC E5 89    .Y).4...
           :               9E 61 70 6A 91 AB 49 3C    .apj..I<
           :               1B 24 8E 12 35 82 42 6B    .$..5.Bk
           :               FC 28 F2 EE AE 1B 5C 60    .(....\`
           :               C5 E8 A5 3D A1 1A 3A 19    ...=..:.
           :               B3 5E 84 F9 B5 93 1D 05    .^......
           :               E9 9D 2A BA 86 6B CE 7D    ..*..k.}
           :               83                         .
   <02 03>
406 02    3:             INTEGER 65537
           :             }

大块包含您要求的 1024 位模数。它比这 1024 位的严格要求长 1 个字节(129 个字节),因为它是一个正数,在此处存储为有符号整数;由于设置了 1024 位中的最高位,如果没有前置字节,则整数将被解释为负数00

在此之后,您会看到公共指数 65537,需要 3 个字节。

除了这 132 个字节的数据之外,还有 8 个字节的编码数据:

  • <30 81 89>: 一个 137 字节长的 SEQUENCE 内容跟在这个标记后面
  • <02 81 81>: 一个 129 字节长的 INTEGER 内容跟随这个标记
  • <02 03>: 一个 3 字节长的 INTEGER 内容跟在这个标记后面
于 2013-06-20T08:58:18.493 回答