Android-KeyStoreキーストア

1919 ワード

KeyStoreキーストアの概要
暗号化鍵を有効に保護するために、Androidは鍵管理メカニズム、すなわちKeyStore鍵ライブラリを特設しています.KeyStoreは、アプリケーションに鍵または証明書を生成および取得するサービスを提供し、オリジナルのバックグラウンド・デーモン・プロセスです.すべての公開鍵、秘密鍵、証明書は鍵ライブラリに格納されます.
鍵ライブラリには多くの鍵アイテムがあり、各鍵アイテムは別名に対応しています.鍵アイテムに保存されているのは非対称鍵ペアであるか、秘密鍵であるかのいずれかです.鍵ペアが保存されている場合は、証明書チェーンを保存することもできます.証明書チェーンの最初の証明書パッケージには公開鍵が含まれています.
証明書アイテム:公開鍵証明書が1つしか含まれていません.証明書チェーンではなく証明書です.
キーストアタイプ
1:BKSアンドロイドでデフォルトのキーストアタイプ
拡張子は.bks,JCE実装に基づく鍵ライブラリのBC実装バージョン(Bouncycastle)
2:JKS
JKSタイプ鍵ライブラリの拡張子は:.jks/.ks
鍵ライブラリのjava実装バージョンでは、鍵ライブラリと秘密鍵は異なるパスワードで保護され、個別鍵はサポートされていません.
3:JCEKS
鍵ライブラリのJCE実装バージョン、拡張子は.jce,相対.jksセキュリティレベルがさらに高く、TripleDESを使用して秘密鍵を保護し、個別鍵をサポート
4:PKCS12
拡張子は.p12/.pfxは、秘密鍵、公開鍵およびその証明書を含み、鍵ライブラリと秘密鍵は同じパスワードで保護され、個別鍵はサポートされていない
5:UBER
拡張子は.ubr、鍵ライブラリBCのより安全な実装バージョン(Bouncycastle UBER)
キーストアファイル保存場所/data/misc/keystore/user_0  :
携帯電話ユーザーが所有する各証明書、名前にはアプリケーションのUID(接頭辞)、証明書タイプ、証明書別名(一意性)が含まれています.例えば、10064_CACERT_test、以下の方法ですべての証明書別名を取得できます.
4.3以下のバージョンでは、getInstance(「Android KeyStore」);インスタンス化キーストアで例外が発生します.
java.security.NoSuchAlgorithmException: KeyStore AndroidKeyStore implementation not found

4.3以上のバージョンではgetInstance(「Android KeyStore」)を使用して鍵ライブラリをインスタンス化できます.
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
Enumeration aliases = ks.aliases();
while (aliases.hasMoreElements()) {
    CommonUtils.LogUtils.e("  :" + aliases.nextElement());
}

証明書タイプ
1:DER
拡張子は.cer/.crt/.rsa、秘密鍵ASNを含まない.1 DER
2:PKCS7
.p 7 b:証明書チェーンをツリー状に表示し、秘密鍵を含まない
.p 7 r:CAによる証明書リクエスト署名の返信は、インポートにのみ使用できます
3:CMS
.p 7 c:証明書のみ保存
.p 7 m:封筒データ付き署名
.p 7 s:タイムスタンプ署名ファイル
4:PEM
.pem
5:PKCS10
.p10/.csr 
6:SPC
マイクロソフト社特有のデュアル証明書ファイルフォーマットで、コード署名によく使用されます.
.pvk:秘密鍵の保存
.spc:公開鍵を保存する