サブジェクトキー識別子のSHA256値を取得する

サブジェクトキー識別子のSHA256値を取得する

Keytoolを使用すると、次のコマンドでキーストアの詳細を表示できます。

keytool -list -v -keystore <KeystoreName>

これは、サブジェクトキー識別子を含む値のセットを返します。

SubjectKeyIdentifier [
KeyIdentifier [
0000: 60 7B 66 1A 45 0D 97 4B  CA 89 50 2F 7D 04 CD 34
0010: A8 FF FC FD
]
]

これは SHA1 キー識別子です。同じキーストアの SHA 256 キー識別子を取得するにはどうすればよいですか?

答え1

サブジェクトキー識別子(SKI または SKID) は、個々の証明書のプロパティ (X.509 拡張) です。

通常は証明書に署名する際にSHA-1ハッシュとして計算されます。ハッシュされるデータは変化する可能性がありますが、通常は少なくとも次のものが含まれます。サブジェクト公開鍵ビット文字列であり、完全な 160 ビットの SHA-1 値ではない可能性があります。

ハッシュがどのように作成されるかを(技術的に)気にするのは、署名を行うシステム、またはリクエストを作成するシステムだけです。これは、ハッシュがリクエストに追加される可能性があるためです。それ以外では、ハッシュは不透明な指紋または一意のIDとして扱われます。その値は、特定の証明書またはその発行者を識別するためにのみ比較する必要があります(パスチェック)の場合、再計算する必要はありません。

SHA-256ハッシュを適切に計算したい場合は、システムがハッシュを計算するために使用するフィールドを正確に調べ、それをSHA-256への入力として使用する必要があります。RFC 5280、 特に§4.2.1.1そして§4.2.1.2署名されたデータはおそらくただサブジェクト公開鍵またはサブジェクト公開鍵情報バイナリ DER 形式の場合、後者は OpenSSL 署名証明書の場合に当てはまるようです。

この(期限切れの)RFC ドラフトでは、サブジェクト キー識別子に SHA-2 ハッシュを使用することを提案しています。 https://datatracker.ietf.org/doc/html/draft-turner-additional-methods-4kis-08

この機能に対する機能リクエストとパッチが少し停滞しているOpenSSL バグ #2599

答え2

存在しないし、存在する必要もありません。証明書には個性的サブジェクト キー IDentifier プロパティの識別子は、システムにどのキーを使用して復号化するかを伝えることができます。ハッシュである必要はなく、一意である必要があります。別のキーのラベル付けに再利用しない限り、SKID に「Zeutheus Key #1」というテキストを使用することもできます。

SHA-256 を使用して SKID を生成したい場合は、そのままにしておいてください。SKID を生成したら、新しい値を使用する新しい証明書要求を作成し、署名する必要があります。Microsoft の certutil.exe などの一部のツールでは、証明書要求の任意の OID に特定の値を設定できます。公開キーの SHA-256 ハッシュを生成し、その値を SKID OID に配置することができます。ただし、デフォルトでは目的に十分対応できる SHA-1 ハッシュが生成されるため、このような作業は不要です。

関連情報