web-dev-qa-db-ja.com

opensslキーの長さが指定されたバイトと異なるのはなぜですか

これは初歩的な質問だと思いますが、Googleで診断することすらできません。 opensslキーの長さが指定されたバイトと異なるのはなぜですか?たとえば、次のコマンドを使用すると:

openssl genrsa -out testKey 512

私はtestKeyファイル内に「RSA秘密鍵の生成、512ビット長の係数」というメッセージを含む鍵を生成します。ただし、ファイル内のキー部分のみの長さを確認すると、424文字しかありません。

なぜそれが、なぜ実際には512文字ではないのですか?

512文字など、特定の長さを考慮してopenssl経由でRSA鍵を生成する方法はありますか?私の誤解は、上記のコマンドが実際に何をしているのかについての私の知識の欠如に起因しているかもしれないと思いますが、正しい方向へのプッシュが必要です。

4
void.massive

512のモジュラスを持つRSA秘密鍵を生成しています。ただし、RSAを動作させるにはさらに多くの要素が必要です(Wikipediaの記事はここで非常に優れています)。これはRSAに関する質問ではないので、詳細には触れず、代わりにあなたが探しているコマンドを提供します。

RSA秘密鍵を処理し、すべてがこのデータに含まれていることを確認するには、次のコマンドを実行します。

openssl rsa -noout -text -in testKey

最初のブロックは、512ビットのプライベートモジュラスです。

3
Zonk

暗号のキーの長さは、通常、バイトではなくビットで表現されます。 8ビット= 1バイト。したがって、実際に表示されるのは512ビット= 64バイトのキーです。なぜそうではなかったのでしょうか。

まず、フォーマット。コマンドの出力ファイルはPEMファイルです。つまり、それは Base64 -encoded [〜#〜] der [〜#〜] Base64データのエンコードされたデータ構造であることを意味しますこれらの-----BEGIN … -----および-----END … -----行で囲まれています。 Base64は、3入力バイトごとに4文字を出力するエンコーディングです。したがって、Base64エンコード後の424文字は、エンコード前は318バイト(= 2544ビット)でした。しかし、それはまだ64バイトではありませんね。

2番目:追加データ。 512ビットのサイズのキーを要求する場合、要求するのは、公開モジュラスのサイズが512ビットのキーです。しかし RSAキー 公開キーは、この公開係数公開指数で構成されます。後者は通常はかなり小さく、例では17ビット(3バイトとして格納)でした。ほかに何か?

3番目:秘密鍵。次に、genrsaコマンドは、実際には秘密鍵と公開鍵で構成されるRSA鍵ペアを生成します。それは役に立たないので、公開鍵を生成するだけのコマンドはありません。代わりに、慣例により、秘密鍵を格納するときは公開鍵も格納します。これは、とにかく1つの追加値にすぎないためです。通常、秘密鍵のサイズは公開指数とほぼ同じなので、ファイルサイズについてはまだ詳しく説明していません。これは、openssl中国の剰余定理に基づく最適化 を使用しており、そのために、秘密鍵とともに3つの追加の値を格納する必要があるためです。

これらすべてを自分でどのように見ることができますか?

  • openssl base64 -d -in testKey -out testKey.rawは、base64エンコーディングをデコードし、生データを出力します。これのサイズは318バイトです。
  • openssl asn1parse -in testKey(またはPEMではなく生のDERを期待しないようにopenssl asn1parse -in testKey.raw -inform derに指示する)は、ASN.1 DERエンコーディングを一般的に解析し、個々のフィールドを表示します。
  • openssl rsa -in testKey -text -nooutは、ファイルをRSAキーとして解析し、すべてのフィールド、つまりそれらの値の解釈を提供します。
3
Henryk Plötz