AWS KMS 비대칭 키를 사용하여 OpenSSL을 사용하는 파일을 암호화하려면 어떻게 해야 합니까?

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

키 관리 서비스(AWS KMS) 키를 사용하여 OpenSSL을 사용하는 파일을 암호화하려고 합니다. 어떻게 해야 합니까?

간략한 설명

RSA 키로는 대규모 데이터를 암호화할 수 없습니다. 예를 들어 RSAES_OAEP_SHA_256을 사용하여 2048바이트의 RSA 키 쌍 크기를 암호화하려는 경우, 암호화할 수 있는 최대 크기는 190바이트입니다. 고급 암호화 표준(AES) 키를 사용하면 암호 블록 체인(CBC)을 사용하여 데이터를 더 작은 조각으로 분할할 수 있습니다.

해결 방법

다음 지침에 따라 CBC를 사용하여 키를 암호화 및 해독합니다.

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

RSA 키 페어 생성, 공개 키 다운로드 및 AES 256비트 키 생성

1.    AWS Management Console을 사용하는 RSA 키 페어 생성 지침을 따릅니다.

2.    다음과 유사한 AWS CLI 명령 get-public-key를 사용하여 퍼블릭 키를 다운로드합니다.

$ aws kms get-public-key --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin
참고: --query 함수는 공개 키만 가져온 다음, base64 파일을 DER 키로 디코딩합니다.

3.    OpenSSL rand 명령을 사용하여 AES 256비트 키를 생성해 임의의 데이터를 만든 다음, 다음과 유사한 key.bin 파일로 출력합니다.

$ openssl rand -base64 32 > key.bin

데이터 암호화

1.    다음과 유사하게 CBC에서 암호화한 OpenSSL enc 명령을 사용하여 key.bin 파일을 이용해 데이터를 암호화합니다.

$ openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin

참고:

  • -pbkdf2 명령은 OpenSSL 1.1.1에서만 사용할 수 있습니다. Amazon Linux 2 AMI에는 -pbkdf2 명령을 지원하지 않는 OpenSSL 1.0.2가 설치되어 있습니다.
  • CBC를 사용하면 모든 크기의 파일을 암호화할 수 있습니다.
  • FILE_TO_ENCRYPT값을 암호화하려는 파일의 이름으로 변경합니다.

2.    AWS KMS 퍼블릭 키를 사용하여 AES 256비트 키 key.bin을 암호화합니다. 이렇게 하면 데이터의 키가 안전한지 확인할 수 있습니다. AWS KMS 프라이빗 키에 액세스할 수 있는 사용자만 key.bin 키에 액세스할 수 있습니다.

다음과 유사하게 OpenSSL pkeyutl 명령을 실행합니다.

$ openssl pkeyutl -in key.bin -out enc.key.bin -inkey RSAPublic.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

참고: pkeyutl 명령은 AWS KMS API(RSAES_OAEP_SHA_256)를 통한 암호 해독을 지원하는 암호화 알고리즘을 사용합니다. AWS KMS 퍼블릭 키 RSAPublic.bin은 AES 256 키를 암호화하고 enc.key.bin이라는 새 파일을 생성합니다.

3.    사용자가 액세스할 수 없도록 key.bin 파일을 암호화합니다( enc.key.bin 파일의 암호를 다음과 유사한 AWS CLI 명령 rm을 사용하여 해독할 수 있는 경우가 아닌 경우).

$ rm key.bin && rm FILE_TO_ENCRYPT

참고: 암호화하려는 원본 파일을 삭제하여 사용자가 액세스할 수 없도록 선택할 수도 있습니다.

이제 다음과 같은 기능을 사용할 수 있습니다.

  • FILE_TO_ENCRYPT.enc 파일의 암호화된 데이터입니다.
  • 암호화된 AES 256비트 키 enc.key.bin입니다.
  • AWS KMS 퍼블릭 키 RSAPublic.bin입니다.

참고: 암호화된 데이터가 있는 사용자는 암호 해독을 위해 이러한 파일을 보내야 합니다.

전송된 파일의 암호 해독

암호화된 데이터를 검색하려면 AES 256비트 키를 해독한 다음, 해당 키를 사용하여 데이터 파일 FILE_TO_ENCRYPT.enc를 해독합니다.

참고: AWS KMS 프라이빗 키는 일반 텍스트로 볼 수 없으므로 AWS KMS API에 대한 액세스 권한이 있어야 합니다.

1.    AES 256비트 키를 해독하고, enc.key.bin 파일을 다음과 유사한 AWS CLI 명령 암호를 해독하여 AWS KMS API에 제출합니다.

$ aws kms decrypt --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin
참고: --query 함수는 일반 텍스트를 선택한 다음, base64 값을 decryptedKey.bin 파일로 디코딩합니다.

2.    OpenSSL enc 명령을 실행할 때 decryptedKey.bin 파일을 사용하여 다음과 유사한 DECRYPTED_FILE로 출력합니다.

$ openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin

참고: DECRYPTED_FILE 값을 해독하려는 파일의 이름으로 변경합니다.

DECRYPTED_FILE과 FILE_TO_ENCRYPT를 비교하여 암호화 및 암호 해독이 완료되었는지 확인할 수 있습니다.


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


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