Gestão de chaves no Azure Cloud HSM

Uma gestão eficaz de chaves é fundamental para otimizar o desempenho, a segurança e a eficiência do Azure Cloud HSM. Este artigo apresenta boas práticas e recomendações para lidar com limites de armazenamento de chaves, segurança de proteção de chaves, atributos de chave e estratégias de memória cache.

Gerencie 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 detalhes sobre estes limites, consulte os limites de serviço do Azure Cloud HSM.

Para evitar ultrapassar os limites de serviço do Azure Cloud HSM, considere utilizar uma ou mais das seguintes estratégias para uma gestão eficiente de chaves:

  • Rotação das teclas: Rodar as teclas frequentemente para garantir que as teclas antigas são substituídas e que há espaço livre 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 em que use chaves primárias para encriptar outras chaves. Essa hierarquia reduz o número de chaves que precisam ser armazenadas diretamente no HSM.
  • Partilha e reutilização de chaves: Para aplicações com múltiplas sessões ou tokens, considere partilhar chaves ou reutilizá-las para reduzir o número total armazenado.
  • Eliminação de chaves: Depois de deixar de precisar de uma chave (por exemplo, após o fim de uma sessão), certifique-se de que é eliminada de forma segura para libertar espaço para novas chaves.

Observação

Espere 24 horas após criar uma chave para garantir que a sincronização e os backups dentro da sua implementação do Azure Cloud HSM estão concluídos.

Atenção

Se uma chave existir apenas num nó e esse nó falhar sem uma cópia de segurança, pode ficar permanentemente impedido de aceder aos seus dados encriptados sem opção de recuperação. Verifique sempre que as chaves estão sincronizadas em todos os nós e mantenha cópias de segurança regulares.

Ao criar utilizadores, é responsabilidade do cliente garantir que os utilizadores estão presentes em todos os nós do cluster Azure Cloud HSM. Para mais informações, consulte Garantir que os seus utilizadores HSM estão disponíveis em todos os nós do seu cluster. Para os passos sobre a sincronização de chaves em falta, veja Sincronizar utilizadores e chaves entre os nós do Azure Cloud HSM.

Gerenciar o embrulho de chaves

Usas o atributo EXTRACTABLE no Azure Cloud HSM para marcar as chaves como extraíveis ou não extraíveles. 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.

Em contraste, 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 exigir envolvimento de chaves, aconselhamos que utilize envolvimento 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: Chaves criadas com o EXTRACTABLE atributo definido para 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, chaves extraíveis criadas através do SDK Azure Cloud HSM usam encapsulamento de chaves confiável. No entanto, a especificação para PKCS#11 define WRAP_WITH_TRUSTED para 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 uma aplicação cliente e utilize essas chaves pode exportá-las em texto simples.

Suporte de atributos chave para fornecedores Azure Cloud HSM

Azure Cloud HSM fornecedor 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 para 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 cria usando o fornecedor Cryptography API: Next Generation (CNG) são sempre definidas como EXTRACTABLE. Pode utilizar a ferramenta CavImportKey.exe para importar chaves de outras ferramentas HSM da Azure Cloud para o fornecedor CNG, através dos seus manipuladores de chaves. Esta importação cria uma chave no fornecedor de armazenamento de chaves (KSP) a partir de identificadores de chave existentes.

Para as autoridades certificadoras que utilizam GNC ou KSP como fornecedor, todas as chaves geradas dentro do fornecedor de GNC continuam marcadas como extraíveis. Se uma chave for marcada como TRUSTED no HSM (como uma chave de encriptação gerada pelo utilizador), pode ser usada para extrair o texto simples da chave privada dessas chaves, mesmo após a WRAP_WITH_TRUSTED alteração.

Nesses casos, recomendamos usar azcloudhsm_util para gerar a chave se não quiser que seja marcada como EXTRACTABLE. Recomendamos que a utilize 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 Advanced Encryption Standard (AES) usada para encriptação não deveria ter a capacidade de envolver chaves fora do HSM. Para mais informações sobre os atributos do SDK HSM do Azure Cloud, 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 o PKCS#11, as pesquisas por chave utilizam a C_FindObjects API.
  • Para Java Extensão de Criptografia (JCE), as pesquisas por chave utilizam o valor KeyStore.

Para um desempenho ótimo, aconselhamos que utilize comandos de procura de teclas (como findKey e key list) apenas uma vez durante o arranque da aplicação. 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.