AWS KMS Portachiavi ECDH - AWS SDK per la crittografia del database

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à.

AWS KMS Portachiavi ECDH

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

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

Un portachiavi AWS KMS ECDH utilizza un accordo di chiave asimmetrico per ricavare una chiave di avvolgimento simmetrica AWS KMS keyscondivisa tra due parti. Innanzitutto, il portachiavi utilizza l'algoritmo di accordo delle chiavi Elliptic Curve Diffie-Hellman (ECDH) per ricavare un segreto condiviso dalla chiave privata nella coppia di chiavi KMS 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 utilizzata da AWS Database Encryption SDK (KDF_CTR_HMAC_SHA384) per derivare la chiave di wrapping condivisa è conforme alle raccomandazioni del NIST per la derivazione delle chiavi.

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, AWS Database Encryption SDK utilizza i primi 32 byte come chiave di commit e gli ultimi 32 byte come chiave di wrapping condivisa. In caso di decrittografia, se il portachiavi non è in grado di riprodurre la stessa chiave di impegno 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 chiavi KMS, Bob può creare un portachiavi ECDH Raw per decrittografare il record.

Il portachiavi AWS KMS ECDH 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 portachiavi AWS KMS ECDH può avere solo una chiave di avvolgimento condivisa, ma è possibile includere più portachiavi AWS KMS ECDH, da soli o con altri portachiavi, in un portachiavi multiplo.

AWS KMS Autorizzazioni richieste per i portachiavi ECDH

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

AWS KMS Creazione di un portachiavi ECDH

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

  • ID del mittente AWS KMS key

    Deve identificare una coppia di chiavi KMS a curva ellittica (ECC) asimmetrica consigliata dal NIST 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 con codifica DER, nota anche come SubjectPublicKeyInfo (SPKI), come definita in RFC 5280.

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

    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 con codifica DER del destinatario, nota anche come SubjectPublicKeyInfo (SPKI), come definita in RFC 5280.

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

  • 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 chiave KMS nel tuo portachiavi AWS KMS ECDH con le sovvenzioni, devi fornire tutti i token di concessione necessari quando inizializzi il portachiavi.

Java

L'esempio seguente crea un portachiavi AWS KMS ECDH con la chiave KMS del mittente, la 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();

Creazione di un portachiavi AWS KMS ECDH Discovery

Durante la decrittografia, è consigliabile specificare le chiavi che il AWS Database Encryption SDK può utilizzare. Per seguire questa best practice, utilizzate un portachiavi AWS KMS ECDH con lo schema degli accordi chiave. KmsPrivateKeyToStaticPublicKey Tuttavia, puoi anche creare un portachiavi AWS KMS ECDH discovery, ovvero un portachiavi AWS KMS ECDH in grado di decrittografare qualsiasi record in cui la chiave pubblica della coppia di chiavi KMS specificata corrisponda alla 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 KmsPublicKeyDiscovery chiave, si accettano tutte le chiavi pubbliche, indipendentemente dal proprietario.

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

  • ID del destinatario AWS KMS key

    Deve identificare una coppia di chiavi KMS a curva ellittica (ECC) asimmetrica consigliata dal NIST con un valore di. KeyUsage KEY_AGREEMENT

  • Specificazione della curva

    Identifica la specifica della curva ellittica nella coppia di chiavi 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 chiave KMS nel tuo portachiavi AWS KMS ECDH con le sovvenzioni, devi fornire tutti i token di concessione necessari quando inizializzi il portachiavi.

Java

L'esempio seguente crea un portachiavi AWS KMS ECDH discovery con una coppia di chiavi KMS sulla curva. ECC_NIST_P256 È necessario disporre delle DeriveSharedSecret autorizzazioni kms: GetPublicKey e kms: sulla coppia di key pair KMS specificata. Questo portachiavi può decrittografare qualsiasi record in cui la chiave pubblica della coppia di chiavi KMS specificata corrisponde alla 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();