web-dev-qa-db-ja.com

Java JKSキーストアファイルで秘密鍵はどのように保護されますか?

JKS Java keystoreについて読みましたが、フォーマットの詳細は見つかりませんでした。

  • ストアパスワードは、ファイルの整合性を確認するためだけのものですか?
  • 秘密鍵はどのように保護されますか?
4

[JKS]形式の詳細。

これはSun.security.provider.JavaKeyStore(Mercurialのソース) によって実装されますが、JavaのData{Output,Input}Stream規則に基づいて非常にシンプルで、4バイトのマジックナンバー、4バイトのバージョン番号、4-エントリのバイト数。それぞれが4バイトのタイプ、長さ+(変更された)UTF名、8バイトのタイムスタンプ、秘密鍵の長さ+エンコード+証明書数、およびタイプ(実際には常にX.509)+長さ+エンコードを含む可変数のエントリ/各証明書;そして最後に、パスワードのハッシュと完全性チェックのための先行データ。

ストアパスワードは、ファイルの整合性を確認するためだけのものですか?

はい。 JCA APIとJKS形式では、各秘密鍵を、ストアパスワードとは異なる個別のパスワードで暗号化できます。たとえばkeytoolを使用すると、キーパスワードを指定できますが、defaultsこれはストアパスワードと同じです。ただし、一部のプログラムは、異なるキーとストアパスワードに対応できません。特に、SSL/TLS(したがってHTTPS)にデフォルトのトラストマネージャーまたはキーマネージャーを使用しているため、ストアとキーの両方に同じパスワードを使用する必要があります。

秘密鍵はどのように保護されますか?

各秘密鍵はSun.security.provider.KeyProtector(Mercurialのソース) の「独自の」スキームを使用したPBE +ハッシュであり、PKCS#8 EncryptedPrivateKeyInfoとしてファイルにフォーマットされます。

1