기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Raw RSA 키 링
Raw RSA 키링은 사용자가 제공한 RSA 공개 키와 개인 키를 사용하여 로컬 메모리의 데이터 키를 비대칭 암호화 및 암호 해독합니다. 개인 키는 가급적이면 하드웨어 보안 모듈 (HSM) 또는 키 관리 시스템에서 생성, 저장 및 보호해야 합니다. 암호화 기능은 RSA 공개 키의 데이터 키를 암호화합니다. 암호 해독 함수는 개인 키를 사용하여 데이터 키를 해독합니다. 여러 RSA 패딩 모드 중에서 선택할 수 있습니다.
암호화 및 복호화하는 Raw RSA 키링에는 비대칭 퍼블릭 키 및 프라이빗 key pair 페어가 포함되어야 합니다. 하지만 공개 키만 있는 Raw RSA 키링으로 데이터를 암호화할 수 있고, 개인 키만 있는 Raw RSA 키링으로 데이터를 해독할 수 있습니다. 모든 Raw RSA 키링을 멀티 키링에 포함할 수 있습니다. 공개 키와 개인 키로 Raw RSA 키링을 구성하는 경우 해당 키링이 동일한 key pair 페어에 속하는지 확인하십시오. 의 일부 언어AWS Encryption SDK 구현에서는 서로 다른 쌍의 키로 Raw RSA 키링을 구성하지 않습니다. 다른 사람들은 키가 동일한 key pair 페어에 속하는지 확인하기 위해 사용자를 신뢰합니다.
Raw RSA 키링은 RSA 비대칭 암호화 키와 함께 사용될AWS Encryption SDK for Python 때 JceMasterKeyRawMasterKeyin theAWS Encryption SDK for Java 및 in과 동일하며 상호 운용됩니다. 한 구현으로 데이터를 암호화하고 동일한 래핑 키를 사용하여 다른 구현에서 데이터를 해독할 수 있습니다. 세부 정보는 키 링 호환성을 참조하세요.
Raw RSA 키링에는 비대칭 KMS 키를 사용하지 마십시오. 원시 RSA 키링은 KMS 키를 지원하지 않습니다.
RSA KMS 키의 공개 키가 포함된 Raw RSA 키링으로 데이터를 암호화하면 해당AWS Encryption SDK 키링도 해당 키를AWS KMS 해독할 수 없습니다. AWS KMS비대칭 KMS 키의 프라이빗 키는 Raw RSA 키링으로 내보낼 수 없습니다. AWS KMS암호 해독 작업에서는AWS Encryption SDK 반환되는 암호화된 메시지를 해독할 수 없습니다.
AWS Encryption SDK for C의 RSA 키 링을 구성할 때 각 키를 경로 또는 파일 이름이 아닌 Null로 종료된 C 문자열로 포함하는 PEM 파일의 콘텐츠를 제공하십시오. 에서 JavaScript Raw RSA 키링을 구성할 때는 다른 언어 구현과 호환되지 않을 수 있다는 점에 유의하십시오.
네임스페이스와 이름
Raw RSA 키링은 키링에서 RSA 키 자료를 식별하기 위해 사용자가 제공한 키 네임스페이스와 키 이름을 사용합니다. 이 값은 암호가 아닙니다. 암호화 작업이 반환하는 암호화된 메시지의 헤더에 일반 텍스트로 표시됩니다. HSM 또는 키 관리 시스템에서 RSA 키 쌍 (또는 해당 프라이빗 키) 을 식별하는 키 네임스페이스와 키 이름을 사용하는 것이 좋습니다.
키 네임스페이스 및 키 이름은 및 의 제공자 ID (또는 제공자) 및 키 ID 필드와 동일합니다RawMasterKey
.JceMasterKey
는 KMSaws-kms
키의 키 네임스페이스 값을AWS Encryption SDK for C 예약합니다. Raw AES 키링 또는 Raw RSA 키링과 함께 사용하지 마십시오AWS Encryption SDK for C.
특정 메시지를 암호화하고 해독하기 위해 서로 다른 키링을 구성하는 경우 네임스페이스와 이름 값이 매우 중요합니다. 암호 해독 키링의 키 네임스페이스와 키 이름이 암호화 키링의 키 네임스페이스 및 키 이름과 정확히 일치하지 않는 경우 키가 동일한 key pair 쌍에 속하더라도 암호 해독 키링이 사용되지 않습니다.
암호화 및 암호 해독 키링에 있는 키 구성요소의 키 네임스페이스와 키 이름은 키링에 RSA 공개 키, RSA 프라이빗 키 또는 key pair 페어의 두 키가 모두 포함되어 있든 관계없이 동일해야 합니다. 예를 들어 키HSM_01
네임스페이스와 키 이름이 있는 RSA 공개 키에 대해 원시 RSA 키링으로 데이터를 암호화한다고 가정해 보겠습니다RSA_2048_06
. 해당 데이터를 해독하려면 개인 키 (또는 키 key pair) 와 동일한 키 네임스페이스 및 이름을 사용하여 Raw RSA 키링을 구성하십시오.
패딩 모드
암호화 및 암호 해독에 사용되는 Raw RSA 키링의 패딩 모드를 지정하거나 이를 지정하는 언어 구현 기능을 사용해야 합니다.
는 각 언어의 제약에 따라 다음과 같은 패딩 모드를AWS Encryption SDK 지원합니다. OAEP 패딩 모드, 특히 SHA-256 기능이 있는 OAEP 및 SHA-256 패딩을 사용하는 MGF1을 사용하는 것이 좋습니다. PKCS1 패딩 모드는 이전 버전과의 호환성을 위해서만 지원됩니다.
-
OAEP (SHA-1 포함) 및 MGF1 (SHA-1 패딩 포함)
-
OAEP (SHA-256 포함) 및 MGF1 (SHA-256 패딩 포함)
-
OAEP (SHA-384 포함) 및 MGF1 (SHA-384 패딩 포함)
-
OAEP (SHA-512 포함) 및 MGF1 (SHA-512 패딩 포함)
-
PKCS1 v1.5 패딩
다음 예에서는 RSA 키 key pair 퍼블릭 키와 프라이빗 키를 사용하여 원시 RSA 키링을 만드는 방법과 SHA-256 패딩 모드를 사용하는 SHA-256 및 MGF1을 사용하여 OAEP를 만드는 방법을 보여줍니다. RSAPublicKey
및RSAPrivateKey
변수는 사용자가 제공하는 주요 자료를 나타냅니다.
- C
-
에서 Raw RSA 키링을 만들려면AWS Encryption SDK for C 를 사용하십시오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 SDKfor .NET에서 Raw RSA 키링을 인스턴스화하려면materialProviders.CreateRawRsaKeyring()
메서드를 사용하십시오. 전체 예제는 raWRSAKeyringExample .cs를 참조하십시오.
// Instantiate the AWS Encryption SDK and material providers
var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk();
var materialProviders =
AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders();
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
-
브라우저에서 WebCrypto라이브러리에서 암호화 프리미티브를 가져옵니다.AWS Encryption SDK for JavaScript 키링을 구성하기 전에 원시 키 자료를importPublicKey()
사용하거나importPrivateKey()
WebCrypto 백엔드로 가져와야 합니다. 이렇게 하면 에 대한 모든 호출이 비동기식인 경우에도 키링이 WebCrypto 완료됩니다. 임포트 메서드가 취하는 객체에는 래핑 알고리즘과 해당 패딩 모드가 포함됩니다.
키 자료를 가져온 후RawRsaKeyringWebCrypto()
메서드를 사용하여 키링을 인스턴스화합니다. 에서 JavaScript Raw RSA 키링을 구성할 때는 다른 언어 구현과 호환되지 않을 수 있다는 점에 유의하십시오.
전체 예제는 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.jsAWS Encryption SDK for JavaScript 용 Raw RSA 키링을 인스턴스화하려면RawRsaKeyringNode
클래스의 새 인스턴스를 만드십시오. wrapKey
파라미에는 퍼블릭 키가 있습니다. unwrapKey
매개변수에는 개인 키가 들어 있습니다. 원하는 패딩 모드를 지정할 수 있지만RawRsaKeyringNode
생성자는 기본 패딩 모드를 자동으로 계산합니다.
에서 JavaScript 원시 RSA 키링을 구성할 때는 다른 언어 구현과 호환되지 않을 수 있다는 점에 유의하십시오.
전체 예제는 rsa_simple.ts (JavaScript Node.js) 를 참조하십시오.
const keyNamespace = 'HSM_01'
const keyName = 'RSA_2048_06'
const keyring = new RawRsaKeyringNode({ keyName, keyNamespace, rsaPublicKey, rsaPrivateKey})