KeyProtection Classe

Definição

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

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
IsDigestsSpecified

Retorna true se o conjunto de algoritmos digest com os quais a chave pode ser usada tiver sido especificado.

IsInvalidatedByBiometricEnrollment

Retorna true se a chave é irreversivelmente invalidada quando uma nova biometria é registrada ou todas as biometrias registradas são removidas.

IsMgf1DigestsSpecified

Retorna true se o conjunto de resumos da função de geração de máscara MGF1, com a qual a chave pode ser usada, tiver sido especificado.

IsRandomizedEncryptionRequired

Retornará true se a criptografia que usa essa chave precisar ser aleatória suficientemente para produzir diferentes textos criptografados para o mesmo texto sem formatação todas as vezes.

IsUnlockedDeviceRequired

Retornará true se a chave estiver autorizada a ser usada somente enquanto o dispositivo estiver desbloqueado.

IsUserAuthenticationRequired

Retornará true se a chave estiver autorizada a ser usada somente se o usuário tiver sido autenticado.

IsUserAuthenticationValidWhileOnBody

Retorna true se a chave será desautorizado quando o dispositivo for removido do corpo do usuário.

IsUserConfirmationRequired

Retornará true se a chave estiver autorizada a ser usada apenas para mensagens confirmadas pelo usuário.

IsUserPresenceRequired

Retornará true se a chave estiver autorizada a ser usada somente se um teste de presença do usuário tiver sido executado entre as chamadas e Signature.initSign() as Signature.sign() chamadas.

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 KeyProperties#UNRESTRICTED_USAGE_COUNT se não há nenhuma restrição no número de vezes que a chave pode ser usada.

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 self.

JavaAs<TResult>(IJavaPeerable)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

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 selfTResult, verificando se a coerção é válida no lado Java.

Aplica-se a