2017-11-02 16 views
0

私はopensslコマンドで(PKCS#1)複数の1024ビットのDERでエンコードされたRSAPublicKeysを作成しました:1024ビットRSAキーペアのDERエンコードRSAPublicKey(PKCS#1)の長さは一貫していますか?

openssl genrsa 1024 | openssl rsa -outform DER -RSAPublicKey_out -out pubkey.der 

はこれまでのところ、このように作成されたすべての公開鍵ファイルは、正確に140バイトとなっています。この形式でエンコードされた1024ビットRSA公開鍵は常に140バイトか、このサイズは変わる可能性がありますか?

I've learned that the size of a DER encoded private key can vary.

+0

はい、サイズは異なる場合があります。 '-RSAPublicKey_out'が私のバージョンのopensslに対して有効なオプションではないので、あなたのパイプの第2のコマンドが何であるか分かりません。 –

答えて

1

それは常にF3の指数値を用いて、1024ビットのキー(0x010001)140バイトであるべきです。

公開鍵の符号化がpbpcは、オプションのパディング・バイト(負であるから整数を防止するため)、およびXA-XC(およびY/ZA-C)値である

SEQUENCE (RSAPublicKey) 
30 xa [ya [za ...]] 
    INTEGER (n) 
    02 xb [yb [zb ...]] [pb] ... 
    INTEGER (e) 
    02 xc [yc [zc ...]] [pc] ... 

ありますBERの長さです。

eが0x010001の場合は、02 03 01 00 01、常に5バイトとしてエンコードされます。

RSAキーのキーサイズは、最初のセットビットから始まるビットストリングの長さによって決まります。だから、1024ビットのキーの値は2^1023^1024年2の間になり、高ビットがセットされているので、それは

0b1xxx_xxxx {1016 other "don't care" bits} 

のように見えるだろうということは、数はパディングなしでマイナスとなり、そう1024ビットの数値は128値バイトに符号化され、先頭の1バイトは「符号ビットが設定されていません」つまり129バイトになります。

これで整数の完全な符号化された長さを知ることができました129. 0x81は0x79(最大の「コンパクト」BER長)よりも大きいので、長さは0x81(長さは次の1バイトで表される)0x81。

02 81 81 00 [128 more bytes representing n] 

Soはeは5バイトに符号化され、そしてnはにコード132(128 + 1 + 2 + 1)ヘクスで137

137は、シーケンスの長さが0x81と0x89であること作り、0x89であり、 。 137バイトのコンテンツ+ 2バイトの長さ+ 1バイトのタグ=> 140バイト。

30 81 89 
    02 81 81 00 [128 more bytes of n] 
    02 03 01 00 01 

この計算では、誰もキーサイズの定義に悪影響を与えていないことを前提としています。緩やかな解釈(http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br1.pdfが間違っている)は、nの値を2^1016と2^1024の間に置くことになります(別名「128バイトが必要」ということです)。その場合、パディングバイトはnから消失し、長さは139になります。

関連する問題