Keyring non elaborato RSA - 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à.

Keyring non elaborato RSA

Il portachiavi Raw RSA esegue la crittografia e la decrittografia asimmetriche delle chiavi di dati nella memoria locale con le chiavi pubbliche e private RSA fornite dall'utente. È necessario generare, archiviare e proteggere la chiave privata, preferibilmente in un modulo di sicurezza hardware (HSM) o in un sistema di gestione delle chiavi. La funzione di crittografia consente di crittografare la chiave di dati nella chiave pubblica RSA. La funzione di decrittazione consente di decrittare la chiave di dati con la chiave privata. Puoi scegliere tra i diverse modalità di padding RSA.

Un keyring non elaborato RSA che esegue crittografia e decrittazione deve includere una coppia di chiavi pubblica e privata asimmetriche. Tuttavia, è possibile crittografare i dati con un portachiavi Raw RSA che ha solo una chiave pubblica e decrittografare i dati con un portachiavi Raw RSA che ha solo una chiave privata. Puoi includere qualsiasi portachiavi Raw RSA in un portachiavi multiplo. Se configuri un portachiavi Raw RSA con una chiave pubblica e una privata, assicurati che facciano parte della stessa coppia di chiavi. Alcune implementazioni linguistiche di non AWS Encryption SDK costruiranno un portachiavi Raw RSA con chiavi di coppie diverse. Altri si affidano a te per verificare che le tue chiavi appartengano alla stessa coppia di chiavi.

Il portachiavi Raw RSA è equivalente e interagisce con l'JceMasterKeyin SDK di crittografia AWS per Java e l'RawMasterKeyin the SDK di crittografia AWS per Python quando viene utilizzato con chiavi di crittografia asimmetriche RSA. È possibile crittografare e decrittare i dati con implementazioni diverse, ma utilizzando la stessa chiave di wrapping. Per informazioni dettagliate, consultare Compatibilità dei keyring.

Nota

Il portachiavi Raw RSA non supporta le chiavi KMS asimmetriche. Se desideri utilizzare chiavi RSA KMS asimmetriche, versione 4. x di AWS Encryption SDK per .NET e versione 3. x dei AWS KMS portachiavi di SDK di crittografia AWS per Java supporto che utilizzano la crittografia simmetrica (SYMMETRIC_DEFAULT) o l'RSA asimmetrica. AWS KMS keys

Se si crittografano i dati con un portachiavi Raw RSA che include la chiave pubblica di una chiave RSA KMS, né l'utente né lo possono decriptare. AWS Encryption SDK AWS KMS Non è possibile esportare la chiave privata di una chiave KMS AWS KMS asimmetrica in un portachiavi RSA Raw. L'operazione Decrypt non può AWS KMS decrittografare il messaggio crittografato che restituisce. AWS Encryption SDK

Quando crei un keyring non elaborato RSA in SDK di crittografia AWS per C, assicurati di fornire i contenuti del file PEM che include ciascuna chiave sotto forma di stringa C con terminazione null, non come percorso o nome di file. Quando crei un portachiavi Raw RSA JavaScript, tieni presente la potenziale incompatibilità con altre implementazioni linguistiche.

Namespace e nomi

Per identificare il materiale chiave RSA in un portachiavi, il portachiavi Raw RSA utilizza uno spazio dei nomi e un nome chiave forniti dall'utente. Questi valori non sono segreti. Vengono visualizzati in testo semplice nell'intestazione del messaggio crittografato restituito dall'operazione di crittografia. Ti consigliamo di utilizzare lo spazio dei nomi e il nome della chiave che identificano la coppia di chiavi RSA (o la relativa chiave privata) nel tuo HSM o sistema di gestione delle chiavi.

Nota

Lo spazio dei nomi della chiave e il nome della chiave sono equivalenti ai campi Provider ID (o Provider) e Key ID presenti nel e. JceMasterKey RawMasterKey

The SDK di crittografia AWS per C riserva il valore dello spazio dei nomi aws-kms chiave per le chiavi KMS. Non utilizzarlo in un portachiavi Raw AES o Raw RSA con. SDK di crittografia AWS per C

Se si creano portachiavi diversi per crittografare e decrittografare un determinato messaggio, lo spazio dei nomi e i valori del nome sono fondamentali. Se lo spazio dei nomi della chiave e il nome della chiave nel portachiavi di decrittografia non corrispondono esattamente, con distinzione tra maiuscole e minuscole, per lo spazio dei nomi della chiave e il nome della chiave nel portachiavi di crittografia, il portachiavi di decrittografia non viene utilizzato, anche se le chiavi appartengono alla stessa coppia di chiavi.

Lo spazio dei nomi e il nome chiave del materiale chiave nei portachiavi di crittografia e decrittografia devono essere gli stessi indipendentemente dal fatto che il portachiavi contenga la chiave pubblica RSA, la chiave privata RSA o entrambe le chiavi della coppia di chiavi. Ad esempio, supponiamo di crittografare i dati con un portachiavi RSA Raw per una chiave pubblica RSA con namespace e nome chiave. HSM_01 RSA_2048_06 Per decrittografare quei dati, crea un portachiavi Raw RSA con la chiave privata (o coppia di chiavi) e lo stesso namespace e nome della chiave.

Modalità di imbottitura

È necessario specificare una modalità di riempimento per i portachiavi Raw RSA utilizzati per la crittografia e la decrittografia oppure utilizzare funzionalità dell'implementazione del linguaggio che la specificano automaticamente.

AWS Encryption SDKSupporta le seguenti modalità di riempimento, soggette ai vincoli di ogni lingua. Consigliamo una modalità di riempimento OAEP, in particolare OAEP con SHA-256 e MGF1 con SHA-256 Padding. La modalità di riempimento PKCS1 è supportata solo per la compatibilità con le versioni precedenti.

  • OAEP con SHA-1 e MGF1 con imbottitura SHA-1

  • OAEP con SHA-256 e MGF1 con imbottitura SHA-256

  • OAEP con SHA-384 e MGF1 con imbottitura SHA-384

  • OAEP con SHA-512 e MGF1 con imbottitura SHA-512

  • Imbottitura PKCS1 v1.5

Gli esempi seguenti mostrano come creare un portachiavi Raw RSA con la chiave pubblica e privata di una coppia di chiavi RSA e l'OAEP con SHA-256 e MGF1 con modalità padding SHA-256. RSAPublicKeyRSAPrivateKeyLe variabili and rappresentano il materiale chiave fornito.

C

Per creare un portachiavi Raw RSA inSDK di crittografia AWS per C, usa. aws_cryptosdk_raw_rsa_keyring_new

Quando crei un keyring non elaborato RSA in SDK di crittografia AWS per C, assicurati di fornire i contenuti del file PEM che include ciascuna chiave sotto forma di stringa C con terminazione null, non come percorso o nome di file. Per un esempio completo, vedi 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

Per creare un'istanza di un portachiavi Raw RSA in formato.NET, usa il metodo. AWS Encryption SDK materialProviders.CreateRawRsaKeyring() Per un esempio completo, vedi RawRSA .cs. KeyringExample

L'esempio seguente utilizza la versione 4. x del AWS Encryption SDK per .NET.

// 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

SDK di crittografia AWS per JavaScriptNel browser ottiene le sue primitive crittografiche dalla libreria. WebCrypto Prima di costruire il portachiavi, è necessario utilizzare importPublicKey() e/o importPrivateKey() importare il materiale chiave grezzo nel backend. WebCrypto Ciò garantisce che il portachiavi sia completo anche se tutte le chiamate a sono asincrone. WebCrypto L'oggetto utilizzato dai metodi di importazione include l'algoritmo di wrapping e la relativa modalità di riempimento.

Dopo aver importato il materiale chiave, utilizzate il RawRsaKeyringWebCrypto() metodo per creare un'istanza del portachiavi. Quando crei un portachiavi Raw RSA in JavaScript, tieni presente la potenziale incompatibilità con altre implementazioni linguistiche.

Per un esempio completo, vedete rsa_simple.ts (Browser). 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

Per creare un'istanza di un portachiavi Raw RSA in Node.js, create una nuova istanza della SDK di crittografia AWS per JavaScript classe. RawRsaKeyringNode Il wrapKey parametro contiene la chiave pubblica. Il unwrapKey parametro contiene la chiave privata. Il RawRsaKeyringNode costruttore calcola automaticamente una modalità di riempimento predefinita, sebbene sia possibile specificare una modalità di riempimento preferita.

Quando crei un portachiavi RSA non elaborato JavaScript, tieni presente la potenziale incompatibilità con altre implementazioni linguistiche.

Per un esempio completo, vedete 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);