FIPS モードが無効になっているときに OpenSSL によって生成された秘密鍵は、FIPS モードが有効になっているときに使用できますか?

FIPS モードが無効になっているときに OpenSSL によって生成された秘密鍵は、FIPS モードが有効になっているときに使用できますか?

FIPS モードを無効にして実行しているときに OpenSSL によって生成されたキーと、FIPS モードを有効にしてそれらのキーを使用しようとすると、キー間の非互換性が発生します。

OpenSSL バージョン = OpenSSL 1.0.1e-fips 2013 年 2 月 11 日

キーを作成するために使用されるコマンド (FIPS モードは無効):

openssl genrsa -rand <path to rand file> -aes256 -passout file:<path to password file> -out <path to output .key.pem file> 4096

キーを使用しようとしているコマンド (FIPS モードが有効):

openssl ca -config <path to cnf file> -extensions v3_usr_cert -passin file:<path to password file> -batch -notext -in <path to CSR file> -out <path to output .cert.pem file>

cnf ファイルの 'default_md' は SHA256 に設定されています ('[ CA_default ]' セクションと '[ req ]' セクションの両方)

cnfファイル内の「private_key」は上記で生成されたキーに設定されます。

受け取ったエラーは次のとおりです:

unable to load CA private key
139772432762696:error:060800A3:digital envelope routines:EVP_DigestInit_ex:disabled for fips:digest.c:251:

FIPS が無効になっている場合と有効になっている場合に互換性を持たせるために、キーを生成する別の方法はありますか?

リクエストに署名するためにキーを使用する別の方法はありますか?

答え1

genrsaは、OpenSSL の「従来の」形式 (PEM ラベルRSA PRIVATE KEYと追加されたヘッダーProc-Typeと) を書き込みますDEK-Info。これは、MD5 に基づく OpenSSL (実際には SSLeay) の非標準キー導出 ( EVP_BytesToKey) を使用しますが、これは FIPS 承認ではありません。(また、あまり安全ではありませんが、これは別の質問であり、おそらくここよりも security.SX で何度も質問または回答されています。)

あなたはできる生成する'新しい' (2000年以降!) PKCS8形式のキーgenpkey(これはより高性能ですが、より多くのオプションがあります) または変換する古い形式は

openssl pkey -in tradfile -passin whatever -aes256 -out pkcs8file -passout whatever
openssl pkcs8 -topk8 -in tradfile -passin whatever -v2 aes-256-cbc -out pkcs8file -passout whatever

どちらも PBES2 と (したがって) PBKDF2 をデフォルトの HMAC-SHA1 で使用しますが、これは FIPS には問題ありません。(技術的にはpkey1.0.0 より前では利用できませんでしたが、覚えていませんが、FIPS バージョン 0.9.x があった場合は、期限が切れているはずです。また、今日役立つわけではありませんが、約 1 か月前にようやくベータ版が開始された AIUI 3.0.0 では、通常のビルドに FIPS が含まれ、すべての追加手順は必要ありません。)

ちなみにdefault_md、 は[req]CSR (または-x509自己署名証明書) の署名用であり、 も[CA_default]同様に は証明書の署名用ですca(例: RSAwithSHA256 と RSAwithSHA1 のどちらか)。これはキーファイルとは何の関係もなく、reqキーを生成することさえできる、caできないだけです。

関連情報