Gerenciamento e uso de chaves com autenticação de quórum habilitada para que o AWS CloudHSM use a CloudHSM CLI
Depois de configurar a autenticação de quórum para seu cluster do AWS CloudHSM, os usuários de criptografia não poderão realizar operações de gerenciamento ou uso de chaves do HSM sozinhos se a chave tiver valores de quórum associados. Este tópico explica como um usuário de criptografia pode obter um token temporário para realizar uma operação de gerenciamento ou uso de chaves do HSM.
nota
Cada token de quórum é válido para uma operação. Quando essa operação é bem-sucedida, o token não é mais válido e o usuário de criptografia deve obter um novo token. Um token de quórum só é válido durante sua sessão de login atual. Se você fizer log out da CloudHSM CLI ou se a rede se desconectar, o token não será mais válido e você precisará obter um novo. Você só pode usar um token do CloudHSM na CloudHSM CLI. Ele não pode ser usado para autenticação em uma aplicação diferente.
O exemplo a seguir mostra a saída quando um usuário de criptografia tenta criar uma assinatura com uma chave associada ao quórum no HSM após a configuração da autenticação de quórum. O comando falha com um erro Quorum Failed, o que significa que a autenticação de quórum falhou:
aws-cloudhsm >crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz{ "error_code": 1, "data": "Quorum Failed" }
Um usuário de criptografia deve concluir as seguintes tarefas para obter um token temporário para realizar uma operação de gerenciamento ou uso de chaves no HSM:
Etapas
Etapa 1. Obter um token de quorum
-
Inicie a CloudHSM CLI.
-
Faça login no cluster como usuário de criptografia.
aws-cloudhsm >login --username--password<crypto_user1>--role crypto-userpassword123Este exemplo faz login de
crypto_user1na CloudHSM CLI com a funçãocrypto-user. Substitua estes valores pelos seus próprios.{ "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } } -
Use o comando quorum token-sign generate para obter um token de quórum.
No comando a seguir,
key-usageidentifica o nome do serviço em que você pode usar o token que você está gerando. Nesse caso, o token é para operações de uso de chaves (serviçokey-usage). Este exemplo usa o sinalizador--filterpara associar o token a uma chave específica.aws-cloudhsm >quorum token-sign generate --service key-usage --token</path/crypto_user1.token>--filter attr.label=rsa-private-key-example{ "error_code": 0, "data": { "path": "/home/crypto_user1.token" } }Este exemplo obtém um token de quórum para o usuário de criptografia com o nome de usuário
crypto_user1e salva o token em um arquivo chamadocrypto_user1.token. Para usar o exemplo de comando, substitua esses valores por seus próprios:O comando quorum token-sign generate gera um token de quórum de serviço de uso de chave no caminho de arquivo especificado. Você pode inspecionar o arquivo de token:
$cat</path/crypto_user1.token>{ "version": "2.0", "service": "key-usage", "key_reference": "0x0000000000680006", "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==", "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=", "signatures": [] }O caminho do arquivo consiste no seguinte:
-
service: um identificador do serviço de quórum ao qual o token está associado.
-
key_reference: um identificador para a chave à qual esse token de quórum está associado.
-
approval_data: um token de dados brutos codificado em base64 gerado pelo HSM.
-
token: um token codificado em base64 e com hash SHA-256 do approval_data
-
signatures: uma matriz de tokens assinados codificados em base64 (assinaturas) do token não assinado. Cada assinatura do aprovador está na forma de um literal de objeto JSON:
{ "username": "<APPROVER_USERNAME>", "role": "<APPROVER_ROLE>", "signature": "<APPROVER_RSA2048_BIT_SIGNATURE>" }Cada assinatura é criada do resultado de um aprovador usando sua chave privada RSA de 2048 bits correspondente, cuja chave pública foi registrada no HSM.
-
-
Valide o novo token de quórum do serviço de usuário. O comando quorum token-sign list confirma que o token existe no CloudHSM.
aws-cloudhsm >quorum token-sign list{ "error_code": 0, "data": { "tokens": [ { "username": "crypto_user", "service": "key-usage", "key-reference": "0x0000000000680006", "minimum-token-count": 2 } ] } }O
minimum-token-countapresenta uma visão agregada do cluster do número mínimo utilizável de tokens de chave correspondentes ao nome de usuário, serviço e referência de chave que são recuperados de um único HSM no cluster.Por exemplo, supondo um cluster de 2 HSM, se recebermos dois (2) tokens de uso de chave gerados pelo usuário
crypto_user1para chave com referência0x0000000000680006do primeiro HSM no cluster e recebermos um (1) token de uso de chave gerado pelo usuáriocrypto_user1para chave com referência0x0000000000680006do outro HSM no cluster, exibiremos"minimum-token-count": 1.
Etapa 2. Obter assinaturas dos usuários de criptografia de aprovação
Um usuário de criptografia que tenha um token de quórum deve fazer com que o token seja aprovado por outros usuários de criptografia. Para darem sua aprovação, os outros usuários de criptografia usam suas chaves de assinatura para assinar criptograficamente o token fora do HSM.
Existem muitas maneiras diferentes de assinar o token. O exemplo a seguir mostra como assinar o token usando OpenSSL
Neste exemplo, o usuário de criptografia que possui o token (crypto-user) precisa de pelo menos duas (2) aprovações. Os comandos do exemplo a seguir mostram como dois (2) usuários de criptografia podem usar o OpenSSL para assinar criptograficamente o token.
-
Decodifique o token não assinado codificado em base64 e coloque-o em um arquivo binário:
$echo -n '5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=' | base64 -d > crypto_user1.bin -
Use o OpenSSL e a chave privada do aprovador para assinar o token não assinado de quórum binário para o serviço ao usuário e criar um arquivo de assinatura binária:
$openssl pkeyutl -sign \ -inkey crypto_user1.key \ -pkeyopt digest:sha256 \ -keyform PEM \ -in crypto_user1.bin \ -out crypto_user1.sig.bin -
Codifique a assinatura binária em base64:
$base64 -w0 crypto_user1.sig.bin > crypto_user1.sig.b64 -
Copie e cole a assinatura codificada em base64 no arquivo de token, usando o formato literal do objeto JSON especificado anteriormente para a assinatura do aprovador:
{ "version": "2.0", "service": "key-usage", "key_reference": "0x0000000000680006", "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==", "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=", "signatures": [ { "username": "crypto_user1", "role": "crypto-user", "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg==" }, { "username": "crypto_user2", "role": "crypto-user", "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg==" } ] }
Etapa 3. Aprove o token no cluster do CloudHSM e execute uma operação
Depois que um usuário de criptografia tiver as aprovações e assinaturas necessárias, ele poderá fornecer esse token ao cluster do CloudHSM junto com uma operação de gerenciamento ou uso de chaves.
Certifique-se de que a operação da chave corresponda ao serviço de quórum apropriado associado ao token de quórum. Para obter mais informações, consulte Serviços e tipos compatíveis.
Durante a transação, o token será aprovado no cluster do AWS CloudHSM e executará a operação de chave solicitada. O sucesso da operação de chave depende tanto de um token de quórum válido aprovado quanto de uma operação válida de chave.
exemplo Gerar uma assinatura com o mecanismo RSA-PKCS
No comando do exemplo a seguir, um usuário de criptografia logado cria uma assinatura com uma chave no HSM:
aws-cloudhsm >crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /path/crypto_user1.token{ "error_code": 0, "data": { "key-reference": "0x0000000000640007", "signature": "h6hMqXacBrT3x3MXV13RXHdQno0+IQ6iy0kVrGzo23+eoWT0ZZgrSpBCu5KcuP6IYYHw9goQ5CfPf4jI1nO5m/IUJtF1A1lmcz0HjEy1CJ7ICXNReDRyeOU8m43dkJzt0OUdkbtkDJGAcxkbKHLZ02uWsGXaQ8bOKhoGwsRAHHF6nldTXquICfOHgSd4nimObKTqzUkghhJW5Ot5oUyLMYP+pZmUS38ythybney94Wj6fzYOER8v7VIY5ijQGa3LfxrjSG4aw6QijEEbno5LSf18ahEaVKmVEnDBL54tylCJBGvGsYSY9HNhuJoHPgiDL/TDd2wfvP4PaxbFRyyHaw==" } }
Se o usuário de criptografia tentar realizar outra operação de uso da chave HSM com o mesmo token, ela falhará:
aws-cloudhsm >crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /home/crypto_user1.token{ "error_code": 1, "data": "Quorum approval is required for this operation" }
Para realizar outra operação de chave do HSM, o usuário de criptografia deve gerar um novo token de quórum, obter novas assinaturas dos aprovadores e executar a operação de chave desejada com o argumento --approval para fornecer o token de quórum.
Use quorum token-sign list para verificar o token disponível. Este exemplo mostra que o usuário de criptografia não tem tokens aprovados.
aws-cloudhsm >quorum token-sign list{ "error_code": 0, "data": { "tokens": [] } }