KeyProtection Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore.
[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
- Warisan
- Atribut
- Penerapan
Keterangan
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. Kelas ini menentukan penggunaan resmi kunci yang diimpor, seperti apakah autentikasi pengguna diperlukan untuk menggunakan kunci, operasi apa yang diotorisasi kunci (misalnya, dekripsi, tetapi tidak menandatangani) dengan parameter apa (misalnya, hanya dengan skema atau hash padding tertentu), dan tanggal mulai dan berakhir validitas kunci. Otorisasi penggunaan kunci yang dinyatakan dalam kelas ini hanya berlaku untuk kunci rahasia dan kunci privat -- kunci publik dapat digunakan untuk operasi yang didukung.
Untuk mengimpor kunci atau pasangan kunci ke Android Keystore, buat instans kelas ini menggunakan Builder
dan teruskan instans ke dalam java.security.KeyStore#setEntry(String, java.security.KeyStore.Entry, ProtectionParameter) KeyStore.setEntry
dengan kunci atau pasangan kunci yang sedang diimpor.
Untuk mendapatkan kunci rahasia/simetris atau privat dari Android Keystore gunakan java.security.KeyStore#getKey(String, char[]) KeyStore.getKey(String, null)
atau java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter) KeyStore.getEntry(String, null)
. Untuk mendapatkan kunci umum dari Android Keystore gunakan java.security.KeyStore#getCertificate(String)
lalu Certificate#getPublicKey()
.
Untuk membantu mendapatkan parameter publik khusus algoritma dari pasangan kunci yang disimpan di Android Keystore, kunci privatnya mengimplementasikan java.security.interfaces.ECKey
atau java.security.interfaces.RSAKey
antarmuka sedangkan kunci publiknya mengimplementasikan java.security.interfaces.ECPublicKey
atau java.security.interfaces.RSAPublicKey
antarmuka.
CATATAN: Materi kunci kunci yang disimpan di Android Keystore tidak dapat diakses.
Instans kelas ini tidak dapat diubah.
<h3>Masalah< yang diketahui/h3> Bug yang diketahui di Android 6.0 (API Level 23) menyebabkan otorisasi terkait autentikasi pengguna diberlakukan bahkan untuk kunci publik. Untuk mengatasi masalah ini, ekstrak materi kunci publik untuk digunakan di luar Android Keystore. Contohnya:
{@code
PublicKey unrestrictedPublicKey =
KeyFactory.getInstance(publicKey.getAlgorithm()).generatePublic(
new X509EncodedKeySpec(publicKey.getEncoded()));
}
<Contoh h3>: Kunci AES untuk enkripsi/dekripsi dalam mode< GCM/h3> Contoh ini menggambarkan cara mengimpor kunci AES ke Android KeyStore di bawah alias key1
yang diizinkan untuk digunakan hanya untuk enkripsi/dekripsi dalam mode GCM tanpa padding. Kunci harus mengekspor materi kuncinya melalui Key#getEncoded()
dalam RAW
format.
{@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);
...
}
<Contoh h3>: Kunci HMAC untuk menghasilkan MAC menggunakan SHA-512</h3> Contoh ini menggambarkan cara mengimpor kunci HMAC ke Android KeyStore di bawah alias key1
yang diizinkan untuk digunakan hanya untuk menghasilkan MAC menggunakan hash SHA-512. Kunci harus mengekspor materi kuncinya melalui Key#getEncoded()
dalam RAW
format.
{@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);
...
}
<Contoh h3>: Pasangan kunci EC untuk penandatanganan/verifikasi menggunakan ECDSA</h3> Contoh ini menggambarkan cara mengimpor pasangan kunci EC ke Android KeyStore di bawah alias key2
dengan kunci privat yang diizinkan untuk digunakan hanya untuk penandatanganan dengan hash SHA-256 atau SHA-512. Penggunaan kunci publik tidak dibatasi. Baik kunci privat maupun publik harus mengekspor materi kuncinya masing-masing melalui Key#getEncoded()
dalam PKCS#8
dan X.509
format.
{@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);
...
}
<Contoh h3>: Pasangan kunci RSA untuk penandatanganan/verifikasi menggunakan padding< PKCS#1/h3> Contoh ini menggambarkan cara mengimpor pasangan kunci RSA ke Android KeyStore di bawah alias key2
dengan kunci privat yang diizinkan untuk digunakan hanya untuk penandatanganan menggunakan skema padding tanda tangan PKCS#1 dengan hash SHA-256 dan hanya jika pengguna telah diautentikasi dalam sepuluh menit terakhir. Penggunaan kunci publik tidak dibatasi (lihat Masalah yang Diketahui). Baik kunci privat maupun publik harus mengekspor materi kuncinya masing-masing melalui Key#getEncoded()
dalam PKCS#8
dan X.509
format.
{@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);
...
}
<Contoh h3>: Pasangan kunci RSA untuk enkripsi/dekripsi menggunakan padding< PKCS#1/h3> Contoh ini menggambarkan cara mengimpor pasangan kunci RSA ke Android KeyStore di bawah alias key2
dengan kunci privat yang diizinkan untuk digunakan hanya untuk dekripsi menggunakan skema padding enkripsi PKCS#1. Penggunaan kunci publik tidak dibatasi, sehingga mengizinkan enkripsi menggunakan skema dan hash padding apa pun. Baik kunci privat maupun publik harus mengekspor materi kuncinya masing-masing melalui Key#getEncoded()
dalam PKCS#8
dan X.509
format.
{@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);
...
}
Dokumentasi Java untuk android.security.keystore.KeyProtection
.
Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.
Properti
Class |
Mengembalikan kelas runtime dari . |
Handle |
Handel ke instans Android yang mendasar. (Diperoleh dari Object) |
IsDigestsSpecified |
Mengembalikan |
IsInvalidatedByBiometricEnrollment |
Mengembalikan |
IsRandomizedEncryptionRequired |
|
IsUnlockedDeviceRequired |
Mengembalikan |
IsUserAuthenticationRequired |
Mengembalikan |
IsUserAuthenticationValidWhileOnBody |
Mengembalikan |
IsUserConfirmationRequired |
Mengembalikan |
IsUserPresenceRequired |
Mengembalikan |
JniIdentityHashCode |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
JniPeerMembers |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. |
KeyValidityForConsumptionEnd |
Mendapatkan waktu seketika setelah itu kunci tidak valid lama untuk dekripsi dan verifikasi. |
KeyValidityForOriginationEnd |
Mendapatkan waktu seketika setelah itu kunci tidak valid lama untuk enkripsi dan penandatanganan. |
KeyValidityStart |
Mendapatkan instan waktu sebelum kunci belum valid. |
MaxUsageCount |
Mengembalikan berapa kali kunci penggunaan terbatas diizinkan untuk digunakan atau |
PeerReference |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
Purposes |
Mendapatkan serangkaian tujuan (e. |
ThresholdClass |
API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. (Diperoleh dari Object) |
ThresholdType |
API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. (Diperoleh dari Object) |
UserAuthenticationType |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. |
UserAuthenticationValidityDurationSeconds |
Mendapatkan durasi waktu (detik) di mana kunci ini diizinkan untuk digunakan setelah pengguna berhasil diautentikasi. |
Metode
Clone() |
Membuat dan mengembalikan salinan objek ini. (Diperoleh dari Object) |
Dispose() |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
Dispose(Boolean) |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
Equals(Object) |
Menunjukkan apakah beberapa objek lain "sama dengan" yang satu ini. (Diperoleh dari Object) |
GetBlockModes() |
Mendapatkan set mode blok (e. |
GetDigests() |
Mendapatkan set algoritma hash (e. |
GetEncryptionPaddings() |
Mendapatkan set skema padding (e. |
GetHashCode() |
Mengembalikan nilai kode hash untuk objek . (Diperoleh dari Object) |
GetSignaturePaddings() |
Mendapatkan set skema padding (e. |
JavaFinalize() |
Dipanggil oleh pengumpul sampah pada objek ketika pengumpulan sampah menentukan bahwa tidak ada lagi referensi ke objek. (Diperoleh dari Object) |
Notify() |
Membangunkan satu utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
NotifyAll() |
Membangunkan semua utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Handle Mengatur properti. (Diperoleh dari Object) |
ToArray<T>() |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
ToString() |
Mengembalikan representasi string objek. (Diperoleh dari Object) |
UnregisterFromRuntime() |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
Wait() |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <diberitahu></em> atau <em>terganggu</em>. (Diperoleh dari Object) |
Wait(Int64) |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah real time telah berlalu. (Diperoleh dari Object) |
Wait(Int64, Int32) |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah real time telah berlalu. (Diperoleh dari Object) |
Implementasi Antarmuka Eksplisit
IJavaPeerable.Disposed() |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
IJavaPeerable.Finalized() |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
IJavaPeerable.JniManagedPeerState |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. (Diperoleh dari Object) |
Metode Ekstensi
JavaCast<TResult>(IJavaObject) |
Melakukan konversi jenis yang diperiksa runtime Bahasa Umum Android. |
JavaCast<TResult>(IJavaObject) |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. |
GetJniTypeName(IJavaPeerable) |
Spesifikasi tentang bagaimana kunci atau pasangan kunci diamankan saat diimpor ke sistem Android Keystore. |