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

최종 업데이트 날짜: 2022년 8월 4일

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 키 페어의 서명 형식을 가져오려면 지침에 따라 AWS KMS 키를 생성 및 관리합니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

AWS KMS를 사용하여 로컬 파일에 서명

계정에서 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

참고: 메시지를 최대 4096바이트까지 제출할 수 있습니다. 더 큰 메시지에 서명하려면 메시지의 해시 다이제스트를 생성합니다. 그런 다음 메시지 파라미터에 해시 다이제스트를 제공합니다. 메시지가 전체 메시지인지 다이제스트인지 나타내려면 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

OpenSSL을 사용하여 AWS KMS 서명을 확인합니다.

이제 sign.b64 서명 파일을 공유할 수 있습니다. 서명 파일을 확인하려면 퍼블릭 키가 있어야 합니다. 퍼블릭 키를 가져오려면 다음과 유사한 AWS CLI 명령 get-public-key를 실행합니다.

[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

KMSPublic.key라는 다른 파일을 사용하여 base64 파일을 DER 인코딩으로 변환하려면 다음 명령을 실행합니다.

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

이제 message.txt 파일을 사용하여 이진 형식의 공개 키와 서명을 사용할 수 있습니다. 서명을 확인하려면 다음과 유사한 OpenSSL 명령 dgst를 실행합니다.

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

이러한 "Verified OK" 출력 예시는 검증이 성공했음을 나타냅니다.

확인 응답을 받지 못한 경우 다음 사항을 확인하십시오.

  • OpenSSL 서명 알고리즘은 파일 서명에 사용된 알고리즘과 동일합니다.
  • 파일이 Base64로 인코딩되지 않았습니다.

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?