web-dev-qa-db-ja.com

秘密鍵の長さバイト

2048 RSAキーペアを生成しています。しかし、秘密鍵を見ると、長さはわずか1232バイトです。これは2048と関係がありますか、それとも2048はモジュラスサイズですか?

42
hs2d

RSAキーのサイズは、バイトではなくビットで表されます。 2048ビットは256バイトです。

ベアボーンRSA秘密鍵は、2つの整数で構成されます。modulus(大きな複合整数、ビット単位の長さis 「RSAキーの長さ」)およびプライベート指数(通常はモジュラスと同じサイズの別の大きな整数)。ただし、モジュラスとプライベート指数には少し内部構造があり、その構造に関する詳細を知ることで、実装を高速化できます(約4倍)。したがって、RSA秘密鍵には通常、さらに多くのデータが含まれます。

つまり、モジュラスがnであり、2つの素数pq、秘密鍵には次が含まれます:

  • モジュラスn(2048ビットキーの場合は256バイト)
  • 公開指数e(小さい、多くの場合65537、つまり3バイトまたは4バイトでエンコード可能)
  • プライベート指数d(約256バイト)
  • 係数pおよびq(各128バイト)
  • d剰余法p-1(128バイト)
  • d剰余モジュロq-1(128バイト)
  • 1/qmod p(qmodulopの逆数; 128バイト)

合計で約11​​60バイトです。これらの整数はすべて長さがわずかに異なる可能性があるため、エンコードには多少のオーバーヘッドがあります(たとえば、pおよびq のサイズはまったく同じです;また、eはそれより大きくなる可能性があります)。標準構造はASN.1を使用しますが、これはあちこちにいくつかの余分なバイトを意味します。構造をより大きな構造にラップすることも一般的であり、これにより、キーがRSAのキーであることも識別されます。 1232バイトは、PKCS#8形式でエンコードされた2048ビットRSAキーと互換性があります。

RSAの詳細については、 PKCS#1 をご覧ください。

60
Thomas Pornin

2048は、モジュラスの長さbitsですが、秘密鍵の測定値はbytesです。秘密鍵は公開指数のモジュラスおよび乗数の逆数であり、使用しているツールキットに応じて、CN、DN(x509キーの場合)またはサブキー(GPGキーの場合)も格納することがあります。サイズが役に立たない場合があります。

1
sarnold

必要な値(@sarnoldが指摘しているように、モジュラスは1)と、文字通りビットとバイトを比較しているという事実以外に、いくつかの実装はいくつかの値を前もって計算し、キーとともに保存します。最適化として。たとえば、確信はありませんが、一部の実装では製品を保存していると読んだと思います(p-1)(q-1)(pとqが素数であるモジュラスnは実際には積pqであることを思い出してください)。

0
a CVn

@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ビット)ですよね?

0
gpanda