Raw RSA 키링 - AWS Encryption SDK

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Raw RSA 키링

Raw RSA 키링은 제공한 RSA 퍼블릭 및 프라이빗 키를 사용하여 로컬 메모리에서 데이터 키의 비대칭 암호화 및 복호화를 수행합니다. 가급적이면 하드웨어 보안 모듈(HSM) 또는 키 관리 시스템에서 프라이빗 키를 생성, 저장 및 보호해야 합니다. 암호화 기능은 RSA 퍼블릭 키로 데이터 키를 암호화합니다. 복호화 함수는 프라이빗 키를 사용하여 데이터 키를 복호화합니다. 여러 RSA 패딩 모드 중에서 선택할 수 있습니다.

암호화 및 복호화하는 Raw RSA 키링에는 비대칭 퍼블릭 키 페어와 프라이빗 키 페어가 포함되어야 합니다. 단, 퍼블릭 키만 있는 Raw RSA 키링을 사용하여 데이터를 암호화할 수 있으며, 프라이빗 키만 있는 Raw RSA 키링을 사용하여 데이터를 복호화할 수 있습니다. 다중 키링에 Raw RSA 키링을 포함시킬 수 있습니다. 퍼블릭 키와 프라이빗 키로 Raw RSA 키링을 구성하는 경우 두 키링이 동일한 키 페어에 속하는지 확인하세요. 일부 AWS Encryption SDK 언어 구현에서는 서로 다른 페어의 키를 사용하여 Raw RSA 키링을 구성하지 않습니다. 다른 구현에서는 키가 동일한 키 페어에서 나온 것인지 사용자가 확인해야 합니다.

Raw RSA 키링은 RSA의 비대칭 암호화 키와 함께 사용되는 AWS Encryption SDK for Python 경우 JceMasterKeyin to AWS Encryption SDK for Java 및 RawMasterKeyin과 동일하며 상호 운용됩니다. 한 구현으로 데이터를 암호화하고 다른 구현으로는 동일한 래핑 키를 사용하여 데이터를 복호화할 수 있습니다. 자세한 내용은 키링 호환성 섹션을 참조하세요.

참고

Raw RSA 키링은 비대칭 KMS 키를 지원하지 않습니다. 비대칭 RSA KMS 키를 사용하려는 경우 버전 4. .NET과 버전 AWS Encryption SDK 3의 x입니다. x개의 AWS KMS 키링은 대칭 암호화 (SYMMETRIC_DEFAULT) 또는 비대칭 RSA를 사용합니다. AWS Encryption SDK for Java AWS KMS keys

RSA KMS 키의 퍼블릭 키가 포함된 원시 RSA 키링으로 데이터를 암호화하는 경우 AWS Encryption SDK 및 AWS KMS 모두 암호를 복호화할 수 없습니다. AWS KMS 비대칭 KMS 키의 프라이빗 키는 원시 RSA 키링으로 내보낼 수 없습니다. AWS KMS Decrypt 작업은 AWS Encryption SDK가 반환하는 암호화된 메시지를 복호화할 수 없습니다.

AWS Encryption SDK for C에서 RSA 키링을 구성할 때 각 키를 경로 또는 파일 이름이 아닌 Null로 종료된 C 문자열로 포함하는 PEM 파일의 콘텐츠를 제공하세요. Raw RSA 키링을 만들 때는 다른 언어 구현과 호환되지 않을 수 있다는 점에 유의하세요. JavaScript

네임스페이스 및 이름

키링에서 RSA 키 자료를 식별하기 위해 Raw RSA 키링은 사용자가 제공한 키 네임스페이스키 이름을 사용합니다. 이 값은 비밀이 아닙니다. 암호화 작업이 반환하는 암호화된 메시지 헤더에 일반 텍스트로 나타납니다. HSM 또는 키 관리 시스템에서 RSA 키 페어(또는 프라이빗 키)를 식별하는 키 네임스페이스와 키 이름을 사용하는 것이 좋습니다.

참고

키 네임스페이스와 키 이름은 JceMasterKeyRawMasterKey공급자 ID(또는 공급자) 및 키 ID 필드와 동일합니다.

AWS Encryption SDK for C는 KMS 키에 대한 aws-kms 키 네임스페이스 값을 예약합니다. Raw AES 키링 또는 Raw RSA 키링을 AWS Encryption SDK for C와 함께 사용하지 마세요.

특정 메시지를 암호화하고 복호화하기 위해 서로 다른 키링을 구성하는 경우 네임스페이스와 이름 값이 중요합니다. 복호화 키링의 키 네임스페이스와 키 이름이 대/소문자를 구분하여 암호화 키링의 키 네임스페이스와 키 이름이 정확히 일치하지 않으면 키가 동일한 키 페어에 속하더라도 복호화 키링이 사용되지 않습니다.

암호화 및 복호화 키링에 있는 키 자료의 키 네임스페이스와 키 이름은 키링에 RSA 퍼블릭 키, RSA 프라이빗 키 또는 키 페어의 두 키가 모두 포함되어 있는지 여부에 관계없이 동일해야 합니다. 예를 들어 키 네임스페이스 HSM_01 및 키 이름 RSA_2048_06이 있는 RSA 퍼블릭 키에 대한 Raw RSA 키링으로 데이터를 암호화한다고 가정해 보겠습니다. 해당 데이터를 복호화하려면 프라이빗 키(또는 키 페어)와 동일한 키 네임스페이스 및 이름을 사용하여 Raw RSA 키링을 구성하세요.

패딩 모드

암호화 및 복호화에 사용되는 Raw RSA 키링의 패딩 모드를 지정하거나 해당 패딩 모드를 지정하는 언어 구현 기능을 사용해야 합니다.

AWS Encryption SDK는 각 언어의 제약 조건에 따라 다음과 같은 패딩 모드를 지원합니다. OAEP 패딩 모드, 특히 SHA-256을 사용하는 OAEP와 SHA-256 패딩을 사용하는 MGF1을 추천합니다. PKCS1 패딩 모드는 이하 버전과의 호환성을 위해서만 지원됩니다.

  • SHA-1 패딩 모드가 있는 OAEP 및 MGF1

  • SHA-256 패딩 모드가 있는 OAEP 및 MGF1

  • SHA-384 패딩 모드가 있는 OAEP 및 MGF1

  • SHA-512 패딩 모드가 있는 OAEP 및 MGF1

  • PKCS1 v1.5 패딩

다음 예제는 SHA-256 패딩 모드가 있는 MGF1과 RSA 키 쌍의 공개 및 개인 키를 사용하여 원시 RSA 키링을 생성하는 방법을 보여줍니다. RSAPublicKeyRSAPrivateKey 변수는 사용자가 제공하는 키 자료를 나타냅니다.

C

AWS Encryption SDK for C에서 Raw RSA 키링을 만들려면 aws_cryptosdk_raw_rsa_keyring_new를 사용하세요.

AWS Encryption SDK for C에서 RSA 키링을 구성할 때 각 키를 경로 또는 파일 이름이 아닌 Null로 종료된 C 문자열로 포함하는 PEM 파일의 콘텐츠를 제공하세요. 전체 예제를 보려면 raw_rsa_keyring.c를 참조하세요.

struct aws_allocator *alloc = aws_default_allocator(); AWS_STATIC_STRING_FROM_LITERAL(key_namespace, "HSM_01"); AWS_STATIC_STRING_FROM_LITERAL(key_name, "RSA_2048_06"); struct aws_cryptosdk_keyring *rawRsaKeyring = aws_cryptosdk_raw_rsa_keyring_new( alloc, key_namespace, key_name, private_key_from_pem, public_key_from_pem, AWS_CRYPTOSDK_RSA_OAEP_SHA256_MGF1);
C# / .NET

AWS Encryption SDK for .NET에서 원시 RSA 키링을 인스턴스화하려면 materialProviders.CreateRawRsaKeyring() 메서드를 사용하세요. 전체 예제는 RawRSA .cs를 참조하십시오. KeyringExample

다음 예제에서는 AWS Encryption SDK for .NET 4.x 버전을 사용합니다.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var keyNamespace = "HSM_01"; var keyName = "RSA_2048_06"; // Get public and private keys from PEM files var publicKey = new MemoryStream(System.IO.File.ReadAllBytes("RSAKeyringExamplePublicKey.pem")); var privateKey = new MemoryStream(System.IO.File.ReadAllBytes("RSAKeyringExamplePrivateKey.pem")); // Create the keyring input var createRawRsaKeyringInput = new CreateRawRsaKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, PaddingScheme = PaddingScheme.OAEP_SHA512_MGF1, PublicKey = publicKey, PrivateKey = privateKey }; // Create the keyring var rawRsaKeyring = materialProviders.CreateRawRsaKeyring(createRawRsaKeyringInput);
JavaScript Browser

브라우저의 암호화 프리미티브를 AWS Encryption SDK for JavaScript 라이브러리에서 가져옵니다. WebCrypto 키링을 구성하기 전에 importPublicKey() 및/또는 를 사용하여 원시 키 자료를 importPrivateKey() 백엔드로 가져와야 합니다. WebCrypto 이렇게 하면 모든 호출이 비동기식이더라도 키링이 완전하게 유지됩니다. WebCrypto 가져오기 메서드가 사용하는 객체에는 래핑 알고리즘과 해당 패딩 모드가 포함됩니다.

키 자료를 가져온 후 RawRsaKeyringWebCrypto() 메서드를 사용하여 키링을 인스턴스화하세요. Raw RSA 키링을 만들 때는 다른 언어 구현과 호환되지 않을 수 있다는 점에 유의하세요. JavaScript

전체 예제는 rsa_simple.ts (브라우저) 를 참조하십시오. JavaScript

const privateKey = await RawRsaKeyringWebCrypto.importPrivateKey( privateRsaJwKKey ) const publicKey = await RawRsaKeyringWebCrypto.importPublicKey( publicRsaJwKKey ) const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringWebCrypto({ keyName, keyNamespace, publicKey, privateKey, })
JavaScript Node.js

Node.js용 AWS Encryption SDK for JavaScript에서 원시 RSA 키링을 인스턴스화하려면 RawRsaKeyringNode 클래스의 새 인스턴스를 만드세요. wrapKey 파라미터는 퍼블릭 키를 보유합니다. unwrapKey파라미터는 프라이빗 키를 보유합니다. 기본 패딩 모드를 지정할 수는 있지만 RawRsaKeyringNode 생성자가 기본 패딩 모드를 자동으로 계산합니다.

에서 원시 RSA 키링을 만들 때는 다른 언어 구현과 호환되지 않을 수 있다는 점에 JavaScript 유의하세요.

전체 예제는 rsa_simple.ts (Node.js) 를 참조하십시오. JavaScript

const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringNode({ keyName, keyNamespace, rsaPublicKey, rsaPrivateKey})
Java
final CreateRawRsaKeyringInput keyringInput = CreateRawRsaKeyringInput.builder() .keyName("RSA_2048_06") .keyNamespace("HSM_01") .paddingScheme(PaddingScheme.OAEP_SHA256_MGF1) .publicKey(RSAPublicKey) .privateKey(RSAPrivateKey) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); IKeyring rawRsaKeyring = matProv.CreateRawRsaKeyring(keyringInput);