AWS KMS 비대칭 키로 생성된 서명을 확인하려면 어떻게 해야 합니까?

2분 분량
0

AWS Key Management Service(AWS KMS)를 사용하여 파일에 서명하려고 합니다. 이후 서명이 유효한지 확인하기 위해 파일, 서명 및 공개 키를 공유하려고 합니다. 사용자가 내 AWS KMS 키에 액세스할 수 있도록 API 액세스를 제공하고 싶지는 않습니다.

해결 방법

다음 예시에서는 ECC_NIST_P256 (secp256r1) 비대칭 키 페어와 AWS KMS를 사용합니다. AWS KMS에서 이 키 페어를 사용하여 서명 파일을 생성하면 NIST FIPS 168-4에 따라 파일이 생성됩니다. (r, s) 값을 포함하는 ECDSA 디지털 서명은 ANS X9.62에 지정된 대로 생성됩니다. 개방형 표준이기 때문에 OpenSSL을 사용하여 서명을 확인할 수 있습니다.

RSA 키 페어의 서명 형식을 가져오려면 RSA 키 서명 및 확인 사양을 참조하십시오.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

로컬 파일 서명

AWS 계정에 AWS KMS 비대칭 키를 생성한 후, 파일에 서명할 때 AWS CLI를 사용하여 키를 참조하십시오. AWS KMS API로부터 수신한 응답은 base64로 인코딩됩니다. 다음 예시에서는 --query 파라미터를 사용하여 응답에서 서명 값을 가져오고 이를 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

참고: 메시지는 최대 4096B까지 제출할 수 있습니다. 더 큰 메시지에 서명하려면 메시지의 해시 다이제스트를 생성하십시오. 이후 메시지 파라미터에 해시 다이제스트를 입력하십시오. 메시지가 전체 메시지인지 또는 다이제스트인지 여부를 표시하려면 MessageType 파라미터를 사용하십시오. 서명 알고리즘을 기록하고 나중에 서명을 확인하십시오.

서명이 base64 형식이므로 다음 Linux base64 인코딩 명령을 실행하여 형식을 바이너리로 변환합니다.

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

다음 명령을 실행하여 Windows OS(운영 체제)용 base64 파일을 디코딩합니다.

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

이제 sign.b64 서명 파일을 공유할 수 있습니다.

AWS KMS 서명을 확인합니다.

서명 파일을 확인하려면 공개 키가 있어야 합니다. 공개 키를 가져오려면 get-public-key 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

다음 명령을 실행하여 base64 파일을 이름이 KMSPublic.key인 DER 인코딩 파일로 변환합니다.

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

이제 message.txt 파일에 바이너리 형식의 공개 키와 서명이 있습니다.

서명을 확인하려면 dgst OpenSSL 명령을 실행합니다.

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

출력에 “Verified OK”가 표시되면 확인에 성공한 것입니다.

확인 응답을 수신하지 못한 경우 다음을 확인하십시오.

  • OpenSSL 서명 알고리즘은 파일에 서명할 때 사용한 알고리즘과 동일합니다.
  • 파일은 base64로 인코딩되지 않습니다.

관련 정보

암호화 프리미티브

AWS KMS 개념

AWS 공식
AWS 공식업데이트됨 한 달 전