KeyProtection クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。
[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
- 継承
- 属性
- 実装
注釈
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.ECKey
java.security.interfaces.ECPublicKey
しますjava.security.interfaces.RSAPublicKey
。java.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 |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
IsDigestsSpecified |
キーを |
IsInvalidatedByBiometricEnrollment |
|
IsRandomizedEncryptionRequired |
|
IsUnlockedDeviceRequired |
このキーを |
IsUserAuthenticationRequired |
|
IsUserAuthenticationValidWhileOnBody |
|
IsUserConfirmationRequired |
|
IsUserPresenceRequired |
ユーザープレゼンスの |
JniIdentityHashCode |
Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。 (継承元 Object) |
JniPeerMembers |
Android キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。 |
KeyValidityForConsumptionEnd |
キーが復号化と検証に対して長く有効でない時間を取得します。 |
KeyValidityForOriginationEnd |
キーが暗号化と署名に対して長く有効でない時間を取得します。 |
KeyValidityStart |
キーがまだ有効でない時間を取得します。 |
MaxUsageCount |
制限付き使用キーの使用が許可される最大回数、または |
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 キーストア システムにインポートするときにキーまたはキー ペアをセキュリティで保護する方法の指定。 |