¿Cómo verifico las firmas generadas por las claves asimétricas de AWS KMS?

3 minutos de lectura
0

Quiero usar AWS Key Management Service (AWS KMS) para firmar un archivo. A continuación, quiero compartir el archivo, su firma y la clave pública para comprobar que la firma es válida. No quiero proporcionar acceso a la API para que los usuarios accedan a mi clave de AWS KMS.

Resolución

El siguiente ejemplo usa AWS KMS con un par de claves asimétricas ECC_NIST_P256 (secp256r1). Cuando AWS KMS usa este par de claves para generar un archivo de firma, el archivo se crea de acuerdo con la norma NIST FIPS 168-4. Se genera una firma digital ECDSA que contiene valores (r, s) como se especifica en ANS X9.62. Debido al estándar abierto, puede usar OpenSSL para verificar la firma.

Para obtener el formato de firma para los pares de claves RSA, consulte las especificaciones de claves RSA para la firma y la verificación.

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Firma de un archivo local

Después de crear la clave asimétrica de AWS KMS en su cuenta de AWS, utilice la AWS CLI para hacer referencia a la clave cuando firme un archivo. La respuesta que recibe de la API de AWS KMS está codificada en base64. En el ejemplo siguiente, se usa el parámetro --query para obtener el valor de la firma de la respuesta y colocarlo en el archivo 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: Puede enviar mensajes de hasta 4096 B. Para firmar un mensaje más grande, genere un resumen de hash del mensaje. A continuación, proporcione el resumen de hash en el parámetro del mensaje. Para mostrar si el mensaje es un mensaje completo o un resumen, utilice el parámetro MessageType. Tenga en cuenta el algoritmo de firma para verificar la firma más adelante.

Como la firma está en formato base64, ejecute el siguiente comando de codificación en base64 de Linux para convertir el formato a binario:

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

Ejecute el siguiente comando para decodificar los archivos base64 para el sistema operativo (SO) Windows:

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

Ahora puede compartir el archivo de firma sign.b64.

Verificación de la firma de AWS KMS

Para verificar el archivo de firma, debe tener la clave pública. Para obtener la clave pública, ejecute el comando get-public-key de la AWS CLI:

[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

Ejecute el siguiente comando para convertir el archivo base64 en un archivo con codificación DER denominado KMSPublic.key:

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

Ahora tiene la clave pública y la firma en formato binario con el archivo message.txt.

Para verificar la firma, ejecute el comando dgst de OpenSSL:

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

La verificación se realiza correctamente cuando el resultado muestra «Verificado como correcto».

Si no recibe una respuesta de verificación, compruebe lo siguiente:

  • El algoritmo de firma de OpenSSL es el mismo que usó para firmar el archivo.
  • Sus archivos no están codificados en base64.

Información relacionada

Primitivas criptográficas

Conceptos de AWS KMS

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un mes