Partilhar via


Gerenciamento de chaves no Azure Cloud HSM

O gerenciamento eficaz de chaves é fundamental para otimizar o desempenho, a segurança e a eficiência do Azure Cloud HSM. Este artigo fornece práticas recomendadas e recomendações para lidar com limites de armazenamento de chaves, segurança de encapsulamento de chaves, atributos de chave e estratégias de cache.

Gerenciar o limite de armazenamento de chaves

Os módulos de segurança de hardware (HSMs) têm limites para o número máximo de tokens e chaves de sessão que podem ser armazenados de uma só vez. Para obter detalhes sobre esses limites, consulte Limites de serviço do Azure Cloud HSM.

Para evitar exceder os limites de serviço do Azure Cloud HSM, considere usar uma ou mais das seguintes estratégias para um gerenciamento eficiente de chaves:

  • Rotação de chaves: Rode as teclas com frequência para garantir que as teclas mais antigas são substituídas e que o espaço é libertado para as novas. A rotação frequente ajuda a manter o HSM dentro dos limites de armazenamento, mantendo a segurança.
  • Hierarquia de chaves: use uma hierarquia de chaves na qual você usa chaves primárias para criptografar outras chaves. Essa hierarquia reduz o número de chaves que precisam ser armazenadas diretamente no HSM.
  • Compartilhamento e reutilização de chaves: para aplicativos com várias sessões ou tokens, considere compartilhar chaves ou reutilizá-las para reduzir o número total armazenado.
  • Exclusão de chave: depois que você não precisar mais de uma chave (por exemplo, após o término de uma sessão), certifique-se de que ela seja excluída com segurança para liberar espaço para novas chaves.

Observação

Aguarde 24 horas depois de criar uma chave para garantir que a sincronização e os backups em sua implantação do Azure Cloud HSM estejam concluídos.

Gerenciar o embrulho de chaves

Use o EXTRACTABLE atributo no Azure Cloud HSM para marcar chaves como extraíveis ou não extraíveis. Por padrão, as chaves HSM são definidas como extraíveis. Você pode exportar chaves extraíveis do HSM por meio do encapsulamento de chaves, que criptografa as chaves. As chaves requerem então o desembrulhar através da mesma chave de embrulho antes de serem utilizadas.

Por outro lado, as chaves não extraíveis não podem ser exportadas do Azure Cloud HSM em nenhuma circunstância. Depois de definir as chaves como não extraíveis, não há como alterá-las para extraíveis. É crucial considerar cuidadosamente se você precisa que suas chaves sejam extraíveis e definir o atributo key de acordo.

Se a sua aplicação necessitar de encapsulamento de chaves, aconselhamo-lo a utilizar encapsulamento de chaves de confiança. Essa abordagem restringe os usuários do HSM a encapsular e desempacotar apenas chaves que um administrador explicitamente designou como confiáveis:

  • EXTRACTABLE=0: As chaves criadas com o EXTRACTABLE atributo definido como 0 não podem ser exportadas, exceto como objetos mascarados. Eles são ideais para chaves que você nunca quer deixar o HSM.

  • WRAP_WITH_TRUSTED=1: Por padrão, as chaves extraíveis criadas por meio do SDK do Azure Cloud HSM usam encapsulamento de chaves confiáveis. No entanto, a especificação para PKCS#11 define WRAP_WITH_TRUSTED como CK_FALSE (0) por padrão. Sem encapsulamento de chave confiável, um usuário de criptografia pode exportar o material privado de uma chave sem qualquer autorização. Qualquer pessoa que tenha acesso a um aplicativo cliente e use essas chaves pode exportá-las em texto sem formatação.

Suporte a atributos principais para provedores do Azure Cloud HSM

Provedor do Azure Cloud HSM Atributos padrão para chaves privadas e simétricas Suporta EXTRACTABLE=0 Suporta a configuração de WRAP_WITH_TRUSTED dentro do provedor Valor de WRAP_WITH_TRUSTED padrão
azcloudhsm_util EXTRACTABLE, !WRAP_WITH_TRUSTED Sim Sim 1 0(pode ser definido através de parâmetros)
PKCS#11 EXTRACTABLE, !WRAP_WITH_TRUSTED Sim Sim 0 (especificado na especificação PKCS#11, mas pode ser definido como 1 na API)
CNG/KSP EXTRACTABLE, !WRAP_WITH_TRUSTED Não Não 1
Motor OpenSSL EXTRACTABLE, !WRAP_WITH_TRUSTED Não Não 1
JCE !EXTRACTABLE, !PERSISTANT, !WRAP_WITH_TRUSTED Sim Não 1

As chaves que você cria usando o provedor Cryptography API: Next Generation (CNG) são sempre definidas como EXTRACTABLE. Você pode usar a CavImportKey.exe ferramenta para importar chaves de outras ferramentas do Azure Cloud HSM para o provedor CNG por meio de seus identificadores de chave. Essa importação cria uma chave no provedor de armazenamento de chaves (KSP) a partir de identificadores de chave existentes.

Para as autoridades de certificação que usam CNG ou KSP como provedor, todas as chaves geradas dentro do provedor CNG ainda são marcadas como extraíveis. Se uma chave estiver marcada como TRUSTED no HSM (como uma chave de criptografia gerada pelo usuário), ela pode ser usada para extrair o texto em claro da chave privada dessas chaves, mesmo depois de alterações como a WRAP_WITH_TRUSTED.

Nesses casos, recomendamos usar azcloudhsm_util para gerar a chave se você não quiser que ela seja marcada como EXTRACTABLE. Recomendamos que você use getAttribute para verificar se as chaves geradas têm os atributos desejados.

Empregar atributos de chave para gerenciar permissões de chave

Use atributos de chave para gerenciar recursos importantes, como permissões. Ao gerar uma chave, use atributos de chave para especificar permissões que permitam ou restrinjam operações específicas para essa chave. Aconselhamo-lo a gerar chaves apenas com os atributos necessários para o fim a que se destinam.

Por exemplo, uma chave AES (Advanced Encryption Standard) usada para criptografia não deve ter a capacidade de encapsular chaves fora do HSM. Para obter mais informações sobre atributos para o SDK do Azure Cloud HSM, consulte os guias de integração.

Otimize a latência armazenando em cache objetos de chave

Para reduzir a latência, considere armazenar em cache objetos de chave sempre que possível. Nas pesquisas por chaves, cada HSM no seu cluster HSM do Azure Cloud é consultado. Esta operação é dispendiosa e não é dimensionada de forma eficiente. O método para pesquisas de chave depende do provedor:

  • Para PKCS#11, as pesquisas de chave usam a C_FindObjects API.
  • Para a Java Cryptography Extension (JCE), as pesquisas de chave usam o valor KeyStore.

Para um desempenho ideal, recomendamos que você use comandos de localização de teclas (como findKey e key list) apenas uma vez durante a inicialização do aplicativo. Armazene o objeto de chave retornado na memória do aplicativo. Quando precisar desse objeto chave mais tarde, recupere-o do cache em vez de consultá-lo a cada operação. Pesquisar por isso gera uma sobrecarga significativa de desempenho.