Prtachiavi AWS KMS ECDH - AWS Crittografia database SDK

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Prtachiavi AWS KMS ECDH

La nostra libreria di crittografia lato client è stata rinominata Database Encryption. AWS SDK Questa guida per sviluppatori fornisce ancora informazioni sul DynamoDB Encryption Client.
Importante

Il AWS KMS ECDH portachiavi è disponibile solo con la versione 1.5.0 della Material Providers Library.

Un AWS KMS ECDH portachiavi utilizza un accordo di chiave asimmetrico AWS KMS keysper ricavare una chiave di avvolgimento simmetrica condivisa tra due parti. Innanzitutto, il portachiavi utilizza l'algoritmo di accordo di chiave Elliptic Curve Diffie-Hellman (ECDH) per ricavare un segreto condiviso dalla chiave privata nella coppia KMS di chiavi del mittente e dalla chiave pubblica del destinatario. Quindi, il portachiavi utilizza il segreto condiviso per derivare la chiave di wrapping condivisa che protegge le chiavi di crittografia dei dati. La funzione di derivazione delle chiavi SDK utilizzata da AWS Database Encryption (KDF_CTR_HMAC_SHA384) per derivare la chiave di wrapping condivisa è conforme alle raccomandazioni per la derivazione delle chiavi. NIST

La funzione di derivazione delle chiavi restituisce 64 byte di materiale di codifica. Per garantire che entrambe le parti utilizzino il materiale di codifica corretto, la crittografia del AWS database SDK utilizza i primi 32 byte come chiave di commit e gli ultimi 32 byte come chiave di wrapping condivisa. In fase di decrittografia, se il portachiavi non è in grado di riprodurre la stessa chiave di commit e la stessa chiave di wrapping condivisa memorizzate nel campo di descrizione del materiale del record crittografato, l'operazione ha esito negativo. Ad esempio, se si crittografa un record con un portachiavi configurato con la chiave privata di Alice e la chiave pubblica di Bob, un portachiavi configurato con la chiave privata di Bob e la chiave pubblica di Alice riprodurrà la stessa chiave di impegno e la stessa chiave di wrapping condivisa e sarà in grado di decrittografare il record. Se la chiave pubblica di Bob non proviene da una coppia di KMS chiavi, Bob può creare un ECDHportachiavi Raw per decrittografare il record.

Il AWS KMS ECDH portachiavi crittografa i record con una chiave simmetrica utilizzando -. AES GCM La chiave dati viene quindi crittografata in busta con la chiave di wrapping condivisa derivata utilizzando -. AES GCM Ogni AWS KMS ECDH portachiavi può avere una sola chiave di imballaggio condivisa, ma è possibile includere più AWS KMS ECDH portachiavi, da soli o con altri portachiavi, in un portachiavi multiplo.

AWS KMS ECDHAutorizzazioni richieste per i portachiavi

La crittografia del AWS database SDK non richiede un AWS account e non dipende da alcun AWS servizio. Tuttavia, per utilizzare un AWS KMS ECDH portachiavi, è necessario disporre di un AWS account e delle seguenti autorizzazioni minime presenti AWS KMS keys nel portachiavi. Le autorizzazioni variano in base allo schema di accordo chiave utilizzato.

  • Per crittografare e decrittografare i record utilizzando lo schema di accordo KmsPrivateKeyToStaticPublicKey chiave, sono necessari kms: GetPublicKey e kms: DeriveSharedSecret sulla coppia di chiavi asimmetrica del mittente. KMS Se fornisci direttamente la chiave pubblica DER codificata dal mittente quando crei un'istanza del tuo portachiavi, hai solo bisogno dell'DeriveSharedSecretautorizzazione kms: sulla coppia di chiavi asimmetrica del mittente. KMS

  • Per decrittografare i record utilizzando lo schema di accordo KmsPublicKeyDiscovery chiave, sono necessarie le GetPublicKey autorizzazioni kms: DeriveSharedSecret e kms: sulla coppia di chiavi asimmetrica specificata. KMS

AWS KMS ECDHCreazione di un portachiavi

Per creare un AWS KMS ECDH portachiavi che crittografa e decrittografa i dati, è necessario utilizzare lo schema degli accordi chiave. KmsPrivateKeyToStaticPublicKey Per inizializzare un AWS KMS ECDH portachiavi con lo schema dell'accordo KmsPrivateKeyToStaticPublicKey chiave, fornite i seguenti valori:

  • ID del mittente AWS KMS key

    Deve identificare una coppia di KMS key ECC pair ellittica () NIST consigliata in modo asimmetrico con un valore di. KeyUsage KEY_AGREEMENT La chiave privata del mittente viene utilizzata per derivare il segreto condiviso.

  • (Facoltativo) Chiave pubblica del mittente

    Deve essere una chiave pubblica X.509 DER con codifica, nota anche come SubjectPublicKeyInfo (SPKI), come definita in 5280. RFC

    L' AWS KMS GetPublicKeyoperazione restituisce la chiave pubblica di una coppia di chiavi asimmetrica nel KMS formato con codifica richiesto. DER

    Per ridurre il numero di AWS KMS chiamate effettuate dal portachiavi, puoi fornire direttamente la chiave pubblica del mittente. Se non viene fornito alcun valore per la chiave pubblica del mittente, il portachiavi chiama AWS KMS per recuperare la chiave pubblica del mittente.

  • Chiave pubblica del destinatario

    È necessario fornire la chiave pubblica X.509 DER con codifica del destinatario, nota anche come SubjectPublicKeyInfo (SPKI), come definita in 5280. RFC

    L' AWS KMS GetPublicKeyoperazione restituisce la chiave pubblica di una coppia di chiavi asimmetrica nel KMS formato con codifica richiesto. DER

  • Specificazione della curva

    Identifica la specifica della curva ellittica nelle coppie di chiavi specificate. Entrambe le coppie di chiavi del mittente e del destinatario devono avere la stessa specifica di curva.

    Valori validi: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Facoltativo) Un elenco di token di concessione

    Se controlli l'accesso alla KMS chiave del tuo AWS KMS ECDH portachiavi con le sovvenzioni, devi fornire tutti i token di concessione necessari quando inizializzi il portachiavi.

C# / .NET

L'esempio seguente crea un AWS KMS ECDH portachiavi con la chiave del mittente, la KMS chiave pubblica del mittente e la chiave pubblica del destinatario. Questo esempio utilizza il senderPublicKey parametro opzionale per fornire la chiave pubblica del mittente. Se non fornisci la chiave pubblica del mittente, il portachiavi chiama AWS KMS per recuperare la chiave pubblica del mittente. Entrambe le coppie di chiavi del mittente e del destinatario sono pronte. ECC_NIST_P256

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Must be DER-encoded X.509 public keys var BobPublicKey = new MemoryStream(new byte[] { }); var AlicePublicKey = new MemoryStream(new byte[] { }); // Create the AWS KMS ECDH static keyring var staticConfiguration = new KmsEcdhStaticConfigurations { KmsPrivateKeyToStaticPublicKey = new KmsPrivateKeyToStaticPublicKeyInput { SenderKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", SenderPublicKey = BobPublicKey, RecipientPublicKey = AlicePublicKey } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = staticConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

L'esempio seguente crea un AWS KMS ECDH portachiavi con la chiave del mittente, la KMS chiave pubblica del mittente e la chiave pubblica del destinatario. Questo esempio utilizza il senderPublicKey parametro opzionale per fornire la chiave pubblica del mittente. Se non fornisci la chiave pubblica del mittente, il portachiavi chiama AWS KMS per recuperare la chiave pubblica del mittente. Entrambe le coppie di chiavi del mittente e del destinatario sono pronte. ECC_NIST_P256

// Retrieve public keys // Must be DER-encoded X.509 public keys ByteBuffer BobPublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"); ByteBuffer AlicePublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the AWS KMS ECDH static keyring final CreateAwsKmsEcdhKeyringInput senderKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPrivateKeyToStaticPublicKey( KmsPrivateKeyToStaticPublicKeyInput.builder() .senderKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab") .senderPublicKey(BobPublicKey) .recipientPublicKey(AlicePublicKey) .build()).build()).build();

Creare un portachiavi AWS KMS ECDH Discovery

Durante la decrittografia, è consigliabile specificare le chiavi che la crittografia SDK del AWS database può utilizzare. Per seguire questa procedura ottimale, utilizzate un AWS KMS ECDH portachiavi con lo schema degli accordi KmsPrivateKeyToStaticPublicKey chiave. Tuttavia, è anche possibile creare un portachiavi AWS KMS ECDH discovery, ovvero un AWS KMS ECDH portachiavi in grado di decrittografare qualsiasi record in cui la chiave pubblica della coppia di chiavi specificata corrisponda alla KMS chiave pubblica del destinatario memorizzata nel campo di descrizione del materiale del record crittografato.

Importante

Quando si decifrano i record utilizzando lo schema degli accordi di KmsPublicKeyDiscovery chiave, si accettano tutte le chiavi pubbliche, indipendentemente dal proprietario.

Per inizializzare un AWS KMS ECDH portachiavi con lo schema degli accordi KmsPublicKeyDiscovery chiave, fornisci i seguenti valori:

  • ID del destinatario AWS KMS key

    Deve identificare una coppia di KMS key ECC pair ellittica () NIST consigliata in modo asimmetrico con un valore di. KeyUsage KEY_AGREEMENT

  • Specificazione della curva

    Identifica la specifica della curva ellittica nella key pair KMS del destinatario.

    Valori validi: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Facoltativo) Un elenco di token di concessione

    Se controlli l'accesso alla KMS chiave del tuo AWS KMS ECDH portachiavi con le sovvenzioni, devi fornire tutti i token di concessione necessari quando inizializzi il portachiavi.

C# / .NET

L'esempio seguente crea un portachiavi AWS KMS ECDH discovery con una coppia di KMS chiavi sulla ECC_NIST_P256 curva. È necessario disporre delle DeriveSharedSecret autorizzazioni kms: GetPublicKey e kms: sulla coppia KMS di chiavi specificata. Questo portachiavi può decrittografare qualsiasi record in cui la chiave pubblica della coppia di chiavi specificata corrisponde alla KMS chiave pubblica del destinatario memorizzata nel campo di descrizione del materiale del record crittografato.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Create the AWS KMS ECDH discovery keyring var discoveryConfiguration = new KmsEcdhStaticConfigurations { KmsPublicKeyDiscovery = new KmsPublicKeyDiscoveryInput { RecipientKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = discoveryConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

L'esempio seguente crea un portachiavi AWS KMS ECDH discovery con una coppia di KMS chiavi sulla ECC_NIST_P256 curva. È necessario disporre delle DeriveSharedSecret autorizzazioni kms: GetPublicKey e kms: sulla coppia KMS di chiavi specificata. Questo portachiavi può decrittografare qualsiasi record in cui la chiave pubblica della coppia di chiavi specificata corrisponde alla KMS chiave pubblica del destinatario memorizzata nel campo di descrizione del materiale del record crittografato.

// Create the AWS KMS ECDH discovery keyring final CreateAwsKmsEcdhKeyringInput recipientKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPublicKeyDiscovery( KmsPublicKeyDiscoveryInput.builder() .recipientKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321").build() ).build()) .build();