.pemファイルに保存されているRSA暗号の係数はどのエンコーディングですか?モジュラスのbase64に似ていますか?
以下を使用して係数を取得できます。
openssl rsa -in pubkey.pem -pubin -modulus
しかし、それは実際に何をするのでしょうか? 2つの素数(n)の積が10進数形式である場合、rsaユーティリティがデコードできるように、それをどのようにエンコードする必要がありますか?
一般的に使用される2つの形式があります。
たとえば、openssl asn1parse
コマンドまたは オンラインデコーダー を使用して、両方を検査できます。
この質問(および回答)は https://stackoverflow.com/questions/1193529/how-to-store-retreieve-rsa-public-private-key/13104466#13104466 のサブセットです。それを圧縮して調整するには:
RSA公開鍵の場合は、係数と指数が必要です。指数として3または65537(別名F4、4番目のフェルマー素数)を使用することは非常に一般的ですが、必須でも普遍的でもありません。
OpenSSLlibraryは、RSA固有のPKCS#1/rfc3447キー形式、または一般的でより便利で一般的なX.509 "SPKI"形式のいずれかをサポートできます。いずれかがDERまたはPEMに保存されています。コマンドラインユーティリティrsa
デフォルトはSPKI PEMを実行しますが、オプションを使用して他の形式を選択できます。マンページ(オンライン- http://www.openssl.org/docs/apps/rsa.html )。
(@zakjanが言うように)DERはASN.1のエンコードであり、PEMはbase64(モジュラスのような個々のフィールドではなく全体)としてDER(さらに)エンコードされ、さらにBEGINおよびEND行がフォーマットを示します。このケースは、PKCS#1の場合はRSA PUBLIC KEY
、SPKIの場合はPUBLIC KEY
のみです。 PKCS#1をDERでエンコードするには、モジュラスと指数をASN.1 INTEGERとしてエンコードします。RSAモジュラスはほとんどの場合8の倍数(1024、2048など)としてサイズ設定されるため、先頭に00オクテットが必要であり、次にシーケンス。 SPKIの場合、RSAを識別するAlgorithmIdentifierを使用してSEQUENCEにさらに埋め込みます rfc3279 ごと。
または、OpenSSLライブラリを使用してエンコードすることもできます。 2つの数値を "bignum"(BN)オブジェクトに入れ、RSAオブジェクトからの数値をポイントし(他のフィールドを空に初期化したまま)、それを(推奨されない)RSAPublicKeyルーチンで書き込むか、または(空の)EVP_PKEY_set1_RSA
を含むEVP_PKEYオブジェクトと、DERの場合はd2i_PublicKey{_fp,bio}
、PEMの場合はPEM_write[_bio]_PublicKey
を使用して書き込みます。