Bagikan melalui


KeyProtection Kelas

Definisi

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
KeyProtection
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 .Object

(Diperoleh dari Object)
Handle

Handel ke instans Android yang mendasar.

(Diperoleh dari Object)
IsDigestsSpecified

Mengembalikan true jika kumpulan algoritma hash yang kuncinya dapat digunakan telah ditentukan.

IsInvalidatedByBiometricEnrollment

Mengembalikan true jika kunci tidak valid saat biometrik baru didaftarkan atau semua biometrik terdaftar dihapus.

IsRandomizedEncryptionRequired

true Mengembalikan jika enkripsi menggunakan kunci ini harus cukup acak untuk menghasilkan ciphertext yang berbeda untuk teks biasa yang sama setiap saat.

IsUnlockedDeviceRequired

Mengembalikan true jika layar harus dibuka kuncinya agar kunci ini digunakan untuk dekripsi atau penandatanganan.

IsUserAuthenticationRequired

Mengembalikan true jika kunci diotorisasi untuk digunakan hanya jika pengguna telah diautentikasi.

IsUserAuthenticationValidWhileOnBody

Mengembalikan true jika kunci akan dide-otorisasi saat perangkat dihapus dari isi pengguna.

IsUserConfirmationRequired

Mengembalikan true jika kunci diotorisasi untuk digunakan hanya untuk pesan yang dikonfirmasi oleh pengguna.

IsUserPresenceRequired

Mengembalikan true jika kunci berwenang untuk digunakan hanya jika pengujian kehadiran pengguna telah dilakukan antara Signature.initSign() panggilan dan Signature.sign() .

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 KeyProperties#UNRESTRICTED_USAGE_COUNT jika tidak ada batasan berapa kali kunci dapat digunakan.

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.

Berlaku untuk