Come posso verificare le firme generate dalle chiavi asimmetriche di AWS KMS?

3 minuti di lettura
0

Desidero utilizzare Key Management Service (AWS KMS) per firmare un file. Dopodiché, voglio condividere il file, la sua firma e la chiave pubblica per verificare che la firma sia valida. Non voglio fornire agli utenti l'accesso API alla mia chiave AWS KMS.

Risoluzione

L'esempio seguente utilizza AWS KMS con una coppia di chiavi asimmetriche ECC_NIST_P256 (secp256r1). Quando AWS KMS genera un file di firma utilizzando questa coppia di chiavi, viene creato in base allo standard FIPS 168-4 NIST. Viene generata una firma digitale ECDSA contenente i valori (r, s) come specificato in ANS X9.62. Grazie allo standard aperto, è possibile verificare questa firma utilizzando OpenSSL.

Per ottenere il formato della firma per le coppie di chiavi RSA, segui le istruzioni per creare e gestire le tue chiavi AWS KMS.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Firmare un file locale utilizzando AWS KMS

Dopo aver creato la coppia di chiavi AWS KMS nel tuo account, fai riferimento alla coppia di chiavi utilizzando AWS CLI per firmare un file. La risposta ricevuta dall'API di AWS KMS è codificata in Base64. Nell'esempio seguente viene utilizzato il parametro --query per ottenere il valore della firma dalla risposta, che viene collocato nel file sign.b64.

[ec2-user@ip-172-31-23-22 ~]$ aws kms sign --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --message fileb://message.txt --signing-algorithm ECDSA_SHA_256 --query 'Signature' --output text > sign.b64

Nota: i messaggi che invii possono arrivare a un massimo di 4.096 byte. Per firmare un messaggio più grande, genera un digest hash del messaggio. Quindi, fornisci il digest hash nel parametro message. Per indicare se il messaggio è un messaggio completo o un digest, utilizza il parametro MessageType. Assicurati di prendere nota dell'algoritmo di firma, poiché è necessario per verificare la firma in un secondo momento.

Poiché la firma è in formato Base64, puoi convertirla in formato binario utilizzando il comando di codifica Linux base64 in modo simile al seguente:

[ec2-user@ip-172-31-23-22 ~]$ base64 -d sign.b64 > sign.bin

Per decodificare i file Base64 per il sistema operativo Windows, esegui il seguente comando:

certutil -decode C:\Temp\sign.b64 C:\Temp\sign.bin

Verificare la firma di AWS KMS utilizzando OpenSSL

Ora puoi condividere il file della firma sign.b64. Per verificare il file della firma, devi disporre della chiave pubblica. Per ottenere la chiave pubblica, esegui il comando di AWS CLI get-public-key in modo simile al seguente:

[ec2-user@ip-172-31-23-22 ~]$ aws kms get-public-key --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --output text --query 'PublicKey' > KMSPublic.b64

Per convertire il file base64 nella codifica DER in un altro file denominato KMSPublic.key, esegui il seguente comando:

[ec2-user@ip-172-31-23-22 ~]$ base64 -d KMSPublic.b64 > KMSPublic.key

Ora disponi della chiave pubblica e della firma in formato binario con il file message.txt. Per verificare la firma, esegui il comando di OpenSSL dgst in modo simile al seguente:

[ec2-user@ip-172-31-23-22 ~]$ openssl dgst -sha256 -verify KMSPublic.key -keyform DER -signature sign.bin message.txt
Verified OK

Questo esempio di output di "Verified OK" indica che la verifica è andata a buon fine.

Se non hai ricevuto una risposta di verifica, assicurati che:

  • L'algoritmo di firma di OpenSSL sia lo stesso utilizzato per firmare il file.
  • I tuoi file non siano codificati in Base64.

Informazioni correlate

Primitive crittografiche

Nozioni di base di AWS KMS

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa