Prtachiavi AWS KMS ECDH - AWS Encryption 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

Importante

Il AWS KMS ECDH portachiavi è disponibile solo con la versione 3. x del. SDK di crittografia AWS per Java Il AWS KMS ECDH portachiavi è stato introdotto nella 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 che AWS Encryption SDK utilizza (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, AWS Encryption SDK utilizza i primi 32 byte come chiave di impegno 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 testo cifrato dell'intestazione del messaggio, l'operazione ha esito negativo. Ad esempio, se si crittografano i dati 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 i dati. Se la chiave pubblica di Bob non proviene da una coppia di KMS chiavi, Bob può creare un ECDHportachiavi Raw per decrittografare i dati.

Il AWS KMS ECDH portachiavi crittografa i dati 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

AWS Encryption SDK Non richiede un AWS account e non dipende da alcun AWS servizio. Tuttavia, per utilizzare un AWS KMS ECDH portachiavi, è necessario un AWS account e le seguenti autorizzazioni minime sul AWS KMS keys portachiavi. Le autorizzazioni variano in base allo schema di accordo chiave utilizzato.

  • Per crittografare e decrittografare i dati 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 dati 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.

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 possono utilizzare. AWS Encryption SDK Per seguire questa best practice, utilizzate un AWS KMS ECDH portachiavi con lo schema di accordo KmsPrivateKeyToStaticPublicKey chiave. Tuttavia, puoi anche creare un portachiavi AWS KMS ECDH discovery, ovvero un AWS KMS ECDH portachiavi in grado di decrittografare qualsiasi messaggio in cui la chiave pubblica della coppia KMS di chiavi specificata corrisponda alla chiave pubblica del destinatario memorizzata nel testo cifrato del messaggio.

Importante

Quando decifrate i messaggi utilizzando lo schema del contratto di KmsPublicKeyDiscovery chiave, accettate 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.

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 messaggio in cui la chiave pubblica della coppia di chiavi specificata corrisponde alla KMS chiave pubblica del destinatario memorizzata nel testo cifrato del messaggio.

// 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();