OpenSSL을 사용하여 AWS KMS로 키를 가져오려고 했지만, "InvalidCiphertext" 오류가 발생했습니다. 이 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

AWS Key Management Service(AWS KMS)에서 AWS KMS 키를 생성했습니다. KMS 키 구성 요소 오리진을 외부로 지정하고, 래핑 키의 알고리즘으로 RSAES_OAEP_SHA_256을 선택한 후, OpenSSL을 사용하여 래핑 키로 키 구성 요소를 암호화했습니다. 암호화한 키 구성 요소를 가져오려 했으나 실패했고 ‘InvalidCiphertext’라는 오류 메시지를 받았습니다. 이 가져오기 오류를 어떻게 피할 수 있습니까?

간략한 설명

기본적으로 OpenSSL은 SHA-1 해시 함수를 사용합니다.

RSAES_OAEP_SHA_256 알고리즘(SHA-256 해시 함수)을 사용할 때 가져오기 오류를 방지하려면 openssl pkeyutl 명령을 사용하여 OpenSSL에서 키 구성 요소를 암호화하고 –pkeyopt rsa_padding_mode:oaep–pkeyopt rsa_oaep_md:sha256 파라미터를 지정합니다.

OpenSSL 및 RSAES_OAEP_SHA_256을 사용하여 AWS KMS로 키 구성 요소를 가져오는 전체 절차는 다음과 같습니다.

1.    Key Material Origin을 위해 External을 사용하여 KMS 키를 생성합니다.

2.    래핑(퍼블릭) 키와 가져오기 토큰을 다운로드합니다.

3.    256비트 대칭 키를 생성합니다.

4.    OpenSSL 버전에서 openssl pkeyutl을 지원하는지 확인합니다.

5.    래핑 키를 사용하여 키 구성 요소를 암호화합니다.

6.    암호화된 키 구성 요소를 가져옵니다.

참고: 래핑 키에 대해 RSAES_OAEP_SHA_1 암호화 알고리즘을 사용하는 경우 키 구성 요소를 가져오는 방법을 참조하십시오.

해결 방법

Key Material Origin을 위해 External을 사용하여 KMS 키 생성

다음 AWS 명령줄 인터페이스(AWS CLI) 명령을 실행하여 외부 키 구성 요소용 KMS를 생성합니다.

참고:

export REGION=us-east-1
export KEY_ALIAS=kms_key_with_externalmaterial
export KEY_ID=`aws kms create-key --region $REGION --origin EXTERNAL --description $KEY_ALIAS --query KeyMetadata.KeyId --output text`
aws kms --region $REGION create-alias --alias-name alias/$KEY_ALIAS --target-key-id $KEY_ID

키 구성 요소를 가져올 때까지 새로 생성된 KMS 키 상태는 [가져오기 보류 중(Pending Import)]입니다. 키 상태를 보려면 다음 명령을 실행합니다.

aws kms --region $REGION describe-key --key-id $KEY_ID

래핑(퍼블릭) 키와 가져오기 토큰 다운로드

다음 AWS CLI 명령을 실행하여 PublicKey(래핑 키) 및 ImportToken 값을 가져오고, base64를 사용하여 두 값을 디코딩하고, 별도의 파일에 해당 값을 각각 저장합니다. RSAES_OAEP_SHA_256 래핑 알고리즘은 get-parameters-for-import 명령에 지정됩니다.

export KEY_PARAMETERS=`aws kms --region $REGION get-parameters-for-import --key-id $KEY_ID --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048`
echo $KEY_PARAMETERS | awk '{print $7}' | tr -d '",' | base64 --decode > PublicKey.bin
echo $KEY_PARAMETERS | awk '{print $5}' | tr -d '",' | base64 --decode > ImportToken.bin

이 명령은 PublicKey.bin에 래핑 키를 저장하고 ImportToken.bin에 가져오기 토큰을 저장합니다.

256비트 대칭 키 생성

키 구성 요소는 256비트(32비트) 대칭 키여야 합니다. 다음 명령 중 하나를 실행하여 키를 생성합니다.

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32

-또는-

dd

dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1

OpenSSL 버전에서 openssl pkeyutl을 지원하는지 확인

래핑 알고리즘으로 RSAES_OAEP_SHA_256을 사용하여 키 구성 요소를 암호화하려면 openssl pkeyutl 명령을 사용합니다.

중요: 이 명령은 OpenSSL 1.0.2 이상 버전에서만 사용할 수 있습니다.

RHEL 기반 Linux 컴퓨터를 사용하는 경우(예: Amazon Linux AMI를 사용하여 시작된 Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스), 다음 단계를 수행합니다.

1.    다음 명령을 실행하여 OpenSSL 버전을 확인합니다.

openssl version

2.    OpenSSL을 업데이트하려면 다음 명령을 실행합니다.

sudo yum –y update openssl

macOS를 사용하는 경우에는 다음 단계를 수행합니다.

1.    다음 Homebrew 명령을 실행합니다.

brew update
brew upgrade openssl
brew info openssl

2.    마지막 명령어는 OpenSSL이 /usr/local/opt/openssl/bin/에 설치되었다는 점을 보여줍니다. 다음 명령을 실행하여 OpenSSL 버전을 확인합니다.

/usr/local/opt/openssl/bin/openssl version

3.    항상 최신 OpenSSL 버전을 사용하려면 ~ /.bash_profile을 편집하고 파일의 끝에 다음 행을 추가합니다.

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.    줄을 추가한 다음 다음 명령을 실행합니다.

source ~/.bash_profile

5.    macOS 환경에서 변경 내용을 확인하려면 다음 명령을 실행합니다.

echo $PATH
openssl version

래핑 키를 사용하여 키 구성 요소 암호화

다음 명령을 사용하여 이전에 다운로드한 래핑 키 및 최신 버전의 OpenSSL을 사용하여 키 구성 요소를 암호화합니다.

참고: 래핑 키는 PublicKey.bin에 저장됩니다.

openssl pkeyutl -in PlaintextKeyMaterial.bin -out EncryptedKeyMaterial.bin -inkey PublicKey.bin -keyform DER \
            -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

이 명령은 EncryptedKeyMaterial.bin을 생성합니다. 이 값을 암호화된 키 구성 요소로 KMS에 가져옵니다.

암호화된 키 구성 요소 가져오기

다음 AWS CLI 명령을 실행하여 암호화된 키 구성 요소를 KMS 키로 가져옵니다.

aws kms --region $REGION import-key-material --key-id $KEY_ID --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

가져오는 과정이 완료된 후, 키 상태는 Enabled로 바뀝니다. 다음 명령을 실행하여 키 상태를 확인합니다.

aws kms --region $REGION describe-key --key-id $KEY_ID

관련 정보

가져온 키 구성 요소 정보

댓글 없음

관련 콘텐츠