KeyProtection Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore.
[Android.Runtime.Register("android/security/keystore/KeyProtection", ApiSince=23, DoNotGenerateAcw=true)]
public sealed class KeyProtection : Java.Lang.Object, IDisposable, 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
- Herança
- Atributos
- Implementações
Comentários
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. Essa classe especifica os usos autorizados da chave importada, como se a autenticação de usuário é necessária para usar a chave, para quais operações a chave está autorizada (por exemplo, descriptografia, mas não assinatura) com quais parâmetros (por exemplo, apenas com um esquema de preenchimento ou resumo específico) e as datas de início e término da validade da chave. As autorizações de uso de chave expressas nessa classe se aplicam somente a chaves secretas e chaves privadas. As chaves públicas podem ser usadas para qualquer operação com suporte.
Para importar uma chave ou par de chaves para o Repositório de Chaves do Android, crie uma instância dessa classe usando a Builder instância e passe a instância java.security.KeyStore#setEntry(String, java.security.KeyStore.Entry, ProtectionParameter) KeyStore.setEntry com a chave ou o par de chaves sendo importado.
Para obter a chave secreta/simétrica ou privada do Android Keystore use java.security.KeyStore#getKey(String, char[]) KeyStore.getKey(String, null) ou java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter) KeyStore.getEntry(String, null). Para obter a chave pública do android Keystore use java.security.KeyStore#getCertificate(String) e, em seguida Certificate#getPublicKey(), .
Para ajudar a obter parâmetros públicos específicos do algoritmo de pares de chaves armazenados no Repositório de Chaves do Android, suas chaves privadas implementam java.security.interfaces.ECKey ou java.security.interfaces.RSAKey interfaces, enquanto suas chaves públicas implementam java.security.interfaces.ECPublicKey ou java.security.interfaces.RSAPublicKey interfaces.
OBSERVAÇÃO: O material de chave das chaves armazenadas no Repositório de Chaves do Android não está acessível.
As instâncias dessa classe são imutáveis.
<h3>Problemas conhecidos</h3> Um bug conhecido no Android 6.0 (Nível de API 23) faz com que as autorizações relacionadas à autenticação do usuário sejam impostas mesmo para chaves públicas. Para contornar esse problema, extraia o material de chave pública a ser usado fora do Android Keystore. Por exemplo:
{@code
PublicKey unrestrictedPublicKey =
KeyFactory.getInstance(publicKey.getAlgorithm()).generatePublic(
new X509EncodedKeySpec(publicKey.getEncoded()));
}
<Exemplo de h3>: chave AES para criptografia/descriptografia no modo< GCM/h3> Este exemplo ilustra como importar uma chave AES para o Android KeyStore sob alias key1 autorizado a ser usado apenas para criptografia/descriptografia no modo GCM sem preenchimento. A chave deve exportar seu material de chave por meio Key#getEncoded() do RAW formato.
{@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);
...
}
<Exemplo de h3>: chave HMAC para gerar MACs usando SHA-512</h3> Este exemplo ilustra como importar uma chave HMAC para o Android KeyStore sob alias key1 autorizado a ser usado apenas para gerar MACs usando o resumo SHA-512. A chave deve exportar seu material de chave por meio Key#getEncoded() do RAW formato.
{@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);
...
}
<Exemplo de h3>: par de chaves EC para assinatura/verificação usando ECDSA</h3> Este exemplo ilustra como importar um par de chaves EC para o Android KeyStore sob alias key2 com a chave privada autorizada a ser usada apenas para assinatura com resumos SHA-256 ou SHA-512. O uso da chave pública é irrestrito. Tanto a chave privada quanto a chave pública devem exportar seu material de chave por meio Key#getEncoded()PKCS#8 e X.509 formato, respectivamente.
{@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);
...
}
<Exemplo h3>: par de chaves RSA para assinatura/verificação usando pkcs#1 preenchimento</h3> Este exemplo ilustra como importar um par de chaves RSA para o Android KeyStore sob alias key2 com a chave privada autorizada a ser usada apenas para assinatura usando o esquema de preenchimento de assinatura PKCS nº 1 com o resumo SHA-256 e somente se o usuário tiver sido autenticado nos últimos dez minutos. O uso da chave pública é irrestrito (consulte Problemas Conhecidos). Tanto a chave privada quanto a chave pública devem exportar seu material de chave por meio Key#getEncoded()PKCS#8 e X.509 formato, respectivamente.
{@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);
...
}
<Exemplo h3>: par de chaves RSA para criptografia/descriptografia usando pkcs#1 preenchimento</h3> Este exemplo ilustra como importar um par de chaves RSA para o Android KeyStore sob alias key2 com a chave privada autorizada a ser usada apenas para descriptografia usando o esquema de preenchimento de criptografia PKCS#1. O uso da chave pública é irrestrito, permitindo a criptografia usando esquemas de preenchimento e resumos. Tanto a chave privada quanto a chave pública devem exportar seu material de chave por meio Key#getEncoded()PKCS#8 e X.509 formato, respectivamente.
{@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 documentação para android.security.keystore.KeyProtection.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.
Propriedades
| Nome | Description |
|---|---|
| Class |
Retorna a classe de runtime deste |
| Handle |
O identificador para a instância subjacente do Android. (Herdado de Object) |
| IsDigestsSpecified |
Retorna |
| IsInvalidatedByBiometricEnrollment |
Retorna |
| IsMgf1DigestsSpecified |
Retorna |
| IsRandomizedEncryptionRequired |
Retornará |
| IsUnlockedDeviceRequired |
Retornará |
| IsUserAuthenticationRequired |
Retornará |
| IsUserAuthenticationValidWhileOnBody |
Retorna |
| IsUserConfirmationRequired |
Retornará |
| IsUserPresenceRequired |
Retornará |
| JniIdentityHashCode |
Obtém o código de hash de identidade atribuído a esse par Java pelo runtime de interoperabilidade. (Herdado de Object) |
| JniManagedPeerState |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| JniPeerMembers |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. |
| KeyValidityForConsumptionEnd |
Obtém o instante de tempo após o qual a chave não é válida por muito tempo para descriptografia e verificação. |
| KeyValidityForOriginationEnd |
Obtém o instante de tempo após o qual a chave não é válida por muito tempo para criptografia e assinatura. |
| KeyValidityStart |
Obtém o instante de tempo antes do qual a chave ainda não é válida. |
| MaxUsageCount |
Retorna o número máximo de vezes que a chave de uso limitada tem permissão para ser usada ou |
| Mgf1Digests |
Retorna o conjunto de resumos que podem ser usados pela função de geração de máscara MGF1 (por exemplo, |
| PeerReference |
Obtém a referência de objeto JNI para este par Java. (Herdado de Object) |
| Purposes |
Obtém o conjunto de finalidades (e. |
| ThresholdClass |
Essa API é compatível com a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código. (Herdado de Object) |
| ThresholdType |
Essa API é compatível com a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código. (Herdado de Object) |
| UserAuthenticationType |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. |
| UserAuthenticationValidityDurationSeconds |
Obtém a duração do tempo (segundos) para o qual essa chave está autorizada a ser usada depois que o usuário é autenticado com êxito. |
Métodos
| Nome | Description |
|---|---|
| Clone() |
Cria e retorna uma cópia desse objeto. (Herdado de Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| Dispose() |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| Dispose(Boolean) |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| DisposeUnlessReferenced() |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| Equals(Object) |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| Equals(Object) |
Indica se algum outro objeto é "igual a" este. (Herdado de Object) |
| GetBlockModes() |
Obtém o conjunto de modos de bloco (por exemplo, |
| GetDigests() |
Obtém o conjunto de algoritmos digest (por exemplo, |
| GetEncryptionPaddings() |
Obtém o conjunto de esquemas de preenchimento (por exemplo, |
| GetHashCode() |
Retorna um valor de código hash para o objeto. (Herdado de Object) |
| GetSignaturePaddings() |
Obtém o conjunto de esquemas de preenchimento (por exemplo, |
| JavaFinalize() |
Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto. (Herdado de Object) |
| Notify() |
Ativa um único thread que está aguardando no monitor deste objeto. (Herdado de Object) |
| NotifyAll() |
Ativa todos os threads que estão aguardando no monitor deste objeto. (Herdado de Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Define a propriedade Handle (Herdado de Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| ToArray<T>() |
Cria uma matriz gerenciada com base nesse wrapper de matriz Java. (Herdado de Object) |
| ToString() |
Retorna uma representação de cadeia de caracteres do objeto. (Herdado de Object) |
| UnregisterFromRuntime() |
Cancela o registro desse par Java do runtime de interoperabilidade. (Herdado de Object) |
| Wait() |
Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<> (Herdado de Object) |
| Wait(Int64, Int32) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
| Wait(Int64) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
Implantações explícitas de interface
| Nome | Description |
|---|---|
| IJavaPeerable.Disposed() |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| IJavaPeerable.Finalized() |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. (Herdado de JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. |
Métodos de Extensão
| Nome | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtém o nome JNI do tipo da instância |
| JavaAs<TResult>(IJavaPeerable) |
Tente coagir a digitar |
| JavaCast<TResult>(IJavaObject) |
Executa uma conversão de tipo marcada por runtime do Android. |
| JavaCast<TResult>(IJavaObject) |
Especificação de como um par de chaves ou chave é protegido quando importado para o sistema Android Keystore. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Tente coagir a digitar |