KeyProtection Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Спецификация защиты пары ключей или ключей при импорте в систему Хранилища ключей 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
импортируемой парой ключей или ключей.
Получение секрета или симметричного или закрытого ключа из использования java.security.KeyStore#getKey(String, char[]) KeyStore.getKey(String, null)
хранилища ключей Android или java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter) KeyStore.getEntry(String, null)
. Чтобы получить открытый ключ из хранилища java.security.KeyStore#getCertificate(String)
ключей Android, и затем Certificate#getPublicKey()
.
Чтобы получить открытые параметры, относящиеся к алгоритму, пары ключей, хранящиеся в хранилище ключей Android, его закрытые ключи реализуют или интерфейсы, а открытые ключи реализуют java.security.interfaces.ECKey
java.security.interfaces.ECPublicKey
или java.security.interfaces.RSAKey
java.security.interfaces.RSAPublicKey
интерфейсы.
ПРИМЕЧАНИЕ. Основные материалы ключей, хранящиеся в хранилище ключей Android, недоступны.
Экземпляры этого класса неизменяемы.
<h3 Известные проблемы</h3>> Известная ошибка в Android 6.0 (уровень API 23) приводит к применению авторизации, связанных с проверкой подлинности пользователей, даже для открытых ключей. Чтобы обойти эту проблему, извлеките материал открытого ключа для использования за пределами Хранилища ключей Android. Например:
{@code
PublicKey unrestrictedPublicKey =
KeyFactory.getInstance(publicKey.getAlgorithm()).generatePublic(
new X509EncodedKeySpec(publicKey.getEncoded()));
}
<Пример h3>. Ключ AES для шифрования и расшифровки в режиме< GCM/h3> в этом примере демонстрирует, как импортировать ключ AES в Android KeyStore под псевдонимом key1
, авторизованным для шифрования и расшифровки в режиме GCM без заполнения. Ключ должен экспортировать свой ключевой материал с 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>. Ключ HMAC для создания MAC с помощью SHA-512</h3> в этом примере демонстрирует импорт ключа HMAC в Android KeyStore под псевдонимом key1
, авторизованным для создания macs с помощью дайджеста SHA-512. Ключ должен экспортировать свой ключевой материал с 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>. Пара ключей EC для подписывания и проверки с помощью ECDSA</h3> в этом примере демонстрирует, как импортировать пару ключей EC в Android KeyStore под псевдонимом key2
с закрытым ключом, авторизованным использовать только для подписывания с дайджестами SHA-256 или SHA-512. Использование открытого ключа является неограниченным. Как закрытый, так и открытый ключ должны экспортировать свои ключевые материалы в Key#getEncoded()
PKCS#8
формате и X.509
соответственно.
{@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>Пример. Пара ключей RSA для подписи и проверки с помощью PKCS#1 padding</h3> в этом примере иллюстрирует импорт пары ключей RSA в Android KeyStore под псевдонимом key2
с авторизованным закрытым ключом для подписи с помощью схемы подписи PKCS#1 с помощью дайджеста SHA-256 и только в том случае, если пользователь прошел проверку подлинности за последние десять минут. Использование открытого ключа является неограниченным (см. раздел "Известные проблемы"). Как закрытый, так и открытый ключ должны экспортировать свои ключевые материалы в Key#getEncoded()
PKCS#8
формате и X.509
соответственно.
{@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);
...
}
<>Пример: пара ключей RSA для шифрования и расшифровки с помощью PKCS#1 padding</h3> в этом примере демонстрирует импорт пары ключей RSA в Android KeyStore под псевдонимом key2
с закрытым ключом, авторизованным для расшифровки с помощью схемы шифрования PKCS#1. Использование открытого ключа является неограниченным, что позволяет шифрованию использовать любые схемы заполнения и дайджесты. Как закрытый, так и открытый ключ должны экспортировать свои ключевые материалы в Key#getEncoded()
PKCS#8
формате и X.509
соответственно.
{@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 и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.
Свойства
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 |
Возвращает набор целей (e). |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
UserAuthenticationType |
Спецификация защиты пары ключей или ключей при импорте в систему Хранилища ключей Android. |
UserAuthenticationValidityDurationSeconds |
Получает продолжительность времени (секунды), для которого этот ключ авторизован после успешной проверки подлинности пользователя. |
Методы
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Dispose() |
Спецификация защиты пары ключей или ключей при импорте в систему Хранилища ключей Android. (Унаследовано от Object) |
Dispose(Boolean) |
Спецификация защиты пары ключей или ключей при импорте в систему Хранилища ключей Android. (Унаследовано от Object) |
Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
GetBlockModes() |
Возвращает набор режимов блоков (e). |
GetDigests() |
Возвращает набор алгоритмов дайджеста (e). |
GetEncryptionPaddings() |
Получает набор схем заполнения (e). |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
GetSignaturePaddings() |
Получает набор схем заполнения (e). |
JavaFinalize() |
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
Notify() |
Пробуждение одного потока, ожидающего монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
ToArray<T>() |
Спецификация защиты пары ключей или ключей при импорте в систему Хранилища ключей Android. (Унаследовано от Object) |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
Спецификация защиты пары ключей или ключей при импорте в систему Хранилища ключей Android. (Унаследовано от Object) |
Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>. (Унаследовано от Object) |
Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>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. |