次の方法で共有


KeyProtection クラス

定義

[Android.Runtime.Register("android/security/keystore/KeyProtection", ApiSince=23, DoNotGenerateAcw=true)]
public sealed class KeyProtection : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Security.KeyStore.IProtectionParameter
[<Android.Runtime.Register("android/security/keystore/KeyProtection", ApiSince=23, DoNotGenerateAcw=true)>]
type KeyProtection = class
    inherit Object
    interface KeyStore.IProtectionParameter
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
継承
KeyProtection
属性
実装

注釈

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。 このクラスは、キーの使用にユーザー認証が必要かどうか、キーが承認される操作 (暗号化解除、署名なしなど) と、キーの有効期間の開始日と終了日など、インポートされたキーの承認された使用方法を指定します。 このクラスで表されるキー使用承認は、秘密鍵と秘密キーにのみ適用されます。公開キーは、サポートされている任意の操作に使用できます。

キーまたはキーペアを Android キーストアにインポートするには、このクラスのインスタンスを作成し、インポートするキーまたはキーペアを使用して Builder インスタンス java.security.KeyStore#setEntry(String, java.security.KeyStore.Entry, ProtectionParameter) KeyStore.setEntry を渡します。

Android キーストアからシークレット/対称キーまたは秘密キーを取得するには、次を使用 java.security.KeyStore#getKey(String, char[]) KeyStore.getKey(String, null) します java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter) KeyStore.getEntry(String, null)。 Android キーストアから公開キーを取得するには、次を使用 java.security.KeyStore#getCertificate(String) します Certificate#getPublicKey()

Android キーストアに格納されているキー ペアのアルゴリズム固有の公開パラメーターを取得するために、その秘密キーは、公開キーが実装またはインターフェイスを実装するのに対して、またはインターフェイスを実装java.security.interfaces.ECKeyjava.security.interfaces.ECPublicKeyしますjava.security.interfaces.RSAPublicKeyjava.security.interfaces.RSAKey

注: Android キーストアに格納されているキーのキー マテリアルにはアクセスできません。

このクラスのインスタンスは不変です。

<h3>既知の問題</h3> Android 6.0 (API レベル 23) の既知のバグにより、公開キーに対してもユーザー認証関連の承認が適用されます。 この問題を回避するには、Android キーストアの外部で使用する公開キーマテリアルを抽出します。 次に例を示します。

{@code
            PublicKey unrestrictedPublicKey =
                    KeyFactory.getInstance(publicKey.getAlgorithm()).generatePublic(
                            new X509EncodedKeySpec(publicKey.getEncoded()));
            }

<h3>例: GCM モードでの暗号化/復号化のための AES キー/h3> この例では、埋め込みなしで GCM モード<での暗号化/復号化にのみ使用することが承認されたエイリアスkey1で、Android KeyStore に AES キーをインポートする方法を示します。 キーは、そのキー マテリアルを形式でRAWエクスポートするKey#getEncoded()必要があります。

{@code
            SecretKey key = ...; // AES key

            KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
            keyStore.load(null);
            keyStore.setEntry(
                    "key1",
                    new KeyStore.SecretKeyEntry(key),
                    new KeyProtection.Builder(KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                            .setBlockMode(KeyProperties.BLOCK_MODE_GCM)
                            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                            .build());
            // Key imported, obtain a reference to it.
            SecretKey keyStoreKey = (SecretKey) keyStore.getKey("key1", null);
            // The original key can now be discarded.

            Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, keyStoreKey);
            ...
            }

<h3>例: SHA-512/h3> を使用して MAC を生成するための HMAC キー この例では、SHA-512< ダイジェストを使用して MAC を生成する場合にのみ使用することが許可されているエイリアスkey1で、Android KeyStore に HMAC キーをインポートする方法を示します。 キーは、そのキー マテリアルを形式でRAWエクスポートするKey#getEncoded()必要があります。

{@code
            SecretKey key = ...; // HMAC key of algorithm "HmacSHA512".

            KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
            keyStore.load(null);
            keyStore.setEntry(
                    "key1",
                    new KeyStore.SecretKeyEntry(key),
                    new KeyProtection.Builder(KeyProperties.PURPOSE_SIGN).build());
            // Key imported, obtain a reference to it.
            SecretKey keyStoreKey = (SecretKey) keyStore.getKey("key1", null);
            // The original key can now be discarded.

            Mac mac = Mac.getInstance("HmacSHA512");
            mac.init(keyStoreKey);
            ...
            }

<h3>例: ECDSA</h3> を使用した署名/検証のための EC キー ペア この例では、SHA-256 ダイジェストまたは SHA-512 ダイジェストでの署名にのみ使用する秘密キーを使用して、エイリアス key2 の下で ANDROID KeyStore に EC キー ペアをインポートする方法を示します。 公開キーの使用は無制限です。 秘密キーと公開キーの両方で、それぞれキー マテリアルをエクスポートし、X.509形式をPKCS#8指定Key#getEncoded()する必要があります。

{@code
            PrivateKey privateKey = ...;   // EC private key
            Certificate[] certChain = ...; // Certificate chain with the first certificate
                                           // containing the corresponding EC public key.

            KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
            keyStore.load(null);
            keyStore.setEntry(
                    "key2",
                    new KeyStore.PrivateKeyEntry(privateKey, certChain),
                    new KeyProtection.Builder(KeyProperties.PURPOSE_SIGN)
                            .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
                            .build());
            // Key pair imported, obtain a reference to it.
            PrivateKey keyStorePrivateKey = (PrivateKey) keyStore.getKey("key2", null);
            PublicKey publicKey = keyStore.getCertificate("key2").getPublicKey();
            // The original private key can now be discarded.

            Signature signature = Signature.getInstance("SHA256withECDSA");
            signature.initSign(keyStorePrivateKey);
            ...
            }

<h3>例: PKCS#1 padding</h3> を使用した署名/検証のための RSA キー ペア。この例では、SHA-256 ダイジェストを使用して PKCS#1 署名パディング スキームを使用して署名するためにのみ使用され、ユーザーが過去 10 分以内に認証された場合にのみ使用することが承認された秘密キーを使用して、エイリアス key2 の下で Android KeyStore に RSA キー ペアをインポートする方法を示します。 公開キーの使用は無制限です (既知の問題を参照)。 秘密キーと公開キーの両方で、それぞれキー マテリアルをエクスポートし、X.509形式をPKCS#8指定Key#getEncoded()する必要があります。

{@code
            PrivateKey privateKey = ...;   // RSA private key
            Certificate[] certChain = ...; // Certificate chain with the first certificate
                                           // containing the corresponding RSA public key.

            KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
            keyStore.load(null);
            keyStore.setEntry(
                    "key2",
                    new KeyStore.PrivateKeyEntry(privateKey, certChain),
                    new KeyProtection.Builder(KeyProperties.PURPOSE_SIGN)
                            .setDigests(KeyProperties.DIGEST_SHA256)
                            .setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
                            // Only permit this key to be used if the user
                            // authenticated within the last ten minutes.
                            .setUserAuthenticationRequired(true)
                            .setUserAuthenticationValidityDurationSeconds(10 * 60)
                            .build());
            // Key pair imported, obtain a reference to it.
            PrivateKey keyStorePrivateKey = (PrivateKey) keyStore.getKey("key2", null);
            PublicKey publicKey = keyStore.getCertificate("key2").getPublicKey();
            // The original private key can now be discarded.

            Signature signature = Signature.getInstance("SHA256withRSA");
            signature.initSign(keyStorePrivateKey);
            ...
            }

<h3>例: PKCS#1 padding/h3> を使用した暗号化/暗号化解除のための RSA キー ペア。この例では、PKCS#1 暗号化パディング< スキームを使用した暗号化解除にのみ使用する秘密キーを使用して、エイリアスkey2の下で RSA キー ペアを Android KeyStore にインポートする方法を示します。 公開キーの使用は無制限であるため、埋め込みスキームとダイジェストを使用した暗号化が許可されます。 秘密キーと公開キーの両方で、それぞれキー マテリアルをエクスポートし、X.509形式をPKCS#8指定Key#getEncoded()する必要があります。

{@code
            PrivateKey privateKey = ...;   // RSA private key
            Certificate[] certChain = ...; // Certificate chain with the first certificate
                                           // containing the corresponding RSA public key.

            KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
            keyStore.load(null);
            keyStore.setEntry(
                    "key2",
                    new KeyStore.PrivateKeyEntry(privateKey, certChain),
                    new KeyProtection.Builder(KeyProperties.PURPOSE_DECRYPT)
                            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
                            .build());
            // Key pair imported, obtain a reference to it.
            PrivateKey keyStorePrivateKey = (PrivateKey) keyStore.getKey("key2", null);
            PublicKey publicKey = keyStore.getCertificate("key2").getPublicKey();
            // The original private key can now be discarded.

            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
            cipher.init(Cipher.DECRYPT_MODE, keyStorePrivateKey);
            ...
            }

の Java ドキュメントandroid.security.keystore.KeyProtection

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

プロパティ

Class

この Objectランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
IsDigestsSpecified

キーを true 使用できるダイジェスト アルゴリズムのセットが指定されている場合に返します。

IsInvalidatedByBiometricEnrollment

true新しい生体認証が登録されている場合、または登録されているすべての生体認証が削除されたときに、キーが元に戻せないほど無効になっているかどうかを返します。

IsRandomizedEncryptionRequired

true毎回同じプレーンテキストに対して異なる暗号テキストを生成するために、このキーを使用した暗号化を十分にランダム化する必要がある場合に返します。

IsUnlockedDeviceRequired

このキーを true 復号化または署名に使用するために画面のロックを解除する必要がある場合に返します。

IsUserAuthenticationRequired

trueユーザーが認証されている場合にのみ、キーの使用が承認されている場合に返します。

IsUserAuthenticationValidWhileOnBody

trueデバイスがユーザーの本文から削除されたときにキーが承認解除されるかどうかを返します。

IsUserConfirmationRequired

trueユーザーが確認したメッセージにのみキーを使用することが承認されている場合に返します。

IsUserPresenceRequired

ユーザープレゼンスのtrueテストが呼び出しの間に実行された場合にのみ、キーの使用が承認されている場合にSignature.initSign()Signature.sign()返します。

JniIdentityHashCode

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
JniPeerMembers

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

KeyValidityForConsumptionEnd

キーが復号化と検証に対して長く有効でない時間を取得します。

KeyValidityForOriginationEnd

キーが暗号化と署名に対して長く有効でない時間を取得します。

KeyValidityStart

キーがまだ有効でない時間を取得します。

MaxUsageCount

制限付き使用キーの使用が許可される最大回数、または KeyProperties#UNRESTRICTED_USAGE_COUNT キーを使用できる回数に制限がない場合に返します。

PeerReference

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
Purposes

目的のセットを取得します (例:

ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)
ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)
UserAuthenticationType

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

UserAuthenticationValidityDurationSeconds

ユーザーが正常に認証された後に、このキーの使用が承認される期間 (秒) を取得します。

メソッド

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
Dispose()

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
Dispose(Boolean)

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
GetBlockModes()

ブロック モードのセットを取得します (e.

GetDigests()

ダイジェスト アルゴリズムのセットを取得します (例:

GetEncryptionPaddings()

埋め込みスキームのセットを取得します (e.

GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
GetSignaturePaddings()

埋め込みスキームのセットを取得します (e.

JavaFinalize()

オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
ToArray<T>()

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
ToString()

オブジェクトの文字列表現を返します。

(継承元 Object)
UnregisterFromRuntime()

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
Wait()

現在のスレッドが目覚めるまで待機させます。通常<は、通知<>/em> または <em>割り込み/em> を受け<取ります。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

IJavaPeerable.Disposed()

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
IJavaPeerable.Finalized()

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

GetJniTypeName(IJavaPeerable)

Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。

適用対象