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à.
Portachiavi grezzi RSA
Il RSA portachiavi Raw esegue la crittografia e la decrittografia asimmetriche delle chiavi di dati nella memoria locale con chiavi RSA pubbliche e private 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 crittografa la chiave dati sotto la chiave RSA pubblica. La funzione di decrittazione consente di decrittare la chiave di dati con la chiave privata. È possibile scegliere tra le diverse modalità di RSAimbottitura.
Un RSA portachiavi Raw che crittografa e decrittografa deve includere una chiave pubblica asimmetrica e una coppia di chiavi private. Tuttavia, puoi crittografare i dati con un RSA portachiavi Raw che ha solo una chiave pubblica e puoi decrittografare i dati con un portachiavi Raw che ha solo una chiave privata. RSA Puoi includere qualsiasi portachiavi Raw RSA in un portachiavi multiplo. Se configuri un RSA portachiavi Raw 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 con RSA chiavi di coppie diverse. Altri si affidano a te per verificare che le tue chiavi appartengano alla stessa coppia di chiavi.
Il RSA portachiavi Raw è equivalente e interagisce con gli JceMasterKeyin SDK di crittografia AWS per Java e gli RawMasterKeyin SDK di crittografia AWS per Python quando vengono utilizzati con chiavi di crittografia RSA asimmetriche. È possibile crittografare e decrittare i dati con implementazioni diverse, ma utilizzando la stessa chiave di wrapping. Per informazioni dettagliate, consultare Compatibilità dei keyring.
Il RSA portachiavi Raw non supporta le chiavi asimmetriche. KMS Se vuoi usare tasti RSA KMS asimmetrici, versione 4. x della forma. AWS Encryption SDK NETe versione 3. x dei AWS KMS portachiavi di SDK di crittografia AWS per Java
supporto che utilizzano la crittografia simmetrica (SYMMETRIC_DEFAULT
) o asimmetrica. RSA AWS KMS keys
Se crittografate i dati con un portachiavi RSA Raw che include la chiave pubblica di una chiave, né loro né possono decrittografarli. RSA KMS AWS Encryption SDK AWS KMS Non è possibile esportare la chiave privata di una chiave AWS KMS asimmetrica KMS in un portachiavi Raw. RSA L'operazione Decrypt non può AWS KMS decrittografare il messaggio crittografato che restituisce. AWS Encryption SDK
Quando create un RSA portachiavi Raw in SDK di crittografia AWS per C, assicuratevi di fornire il contenuto del PEM file che include ogni chiave come stringa C con terminazione nulla, non come percorso o nome di file. Quando costruisci un RSA portachiavi Raw in JavaScript, tieni presente la potenziale incompatibilità con altre implementazioni linguistiche.
Namespace e nomi
Per identificare il materiale RSA chiave in un portachiavi, il portachiavi Raw utilizza uno spazio RSA 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 RSA chiavi (o la relativa chiave privata) nel tuo HSM sistema di gestione delle chiavi.
Lo spazio dei nomi 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 o in un AES portachiavi Raw RSA con. SDK di crittografia AWS per C
Se costruisci 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 RSA pubblica, la chiave RSA privata o entrambe le chiavi della coppia di chiavi. Ad esempio, supponiamo di crittografare i dati con un portachiavi RSA Raw per una chiave pubblica con spazio dei nomi e nome della chiave. RSA HSM_01
RSA_2048_06
Per decrittografare quei dati, costruisci un RSA portachiavi Raw 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 RSA portachiavi Raw utilizzati per la crittografia e la decrittografia oppure utilizzare funzionalità dell'implementazione del linguaggio che la specificano automaticamente.
AWS Encryption SDK Supporta le seguenti modalità di riempimento, soggette ai vincoli di ogni lingua. Consigliamo una modalità di OAEPriempimento, in particolare OAEP con SHA -256 e con -256 Padding. MGF1 SHA La modalità PKCS1padding è supportata solo per la compatibilità con le versioni precedenti.
-
OAEPcon SHA -1 e MGF1 con SHA -1 padding
-
OAEPcon SHA -256 e MGF1 con SHA imbottitura -256
-
OAEPcon -384 e con SHA imbottitura -384 MGF1 SHA
-
OAEPcon -512 e con SHA imbottitura -512 MGF1 SHA
-
PKCS1Imbottitura v1.5
Gli esempi seguenti mostrano come creare un RSA portachiavi Raw con la chiave pubblica e privata di una coppia di RSA chiavi e OAEP con la modalità padding SHA -256 e MGF1 con SHA -256. Le RSAPrivateKey
variabili RSAPublicKey
and rappresentano il materiale chiave fornito.
- C
-
Per creare un RSA portachiavi Raw in SDK di crittografia AWS per C, usaaws_cryptosdk_raw_rsa_keyring_new
.
Quando crei un RSA portachiavi Raw in SDK di crittografia AWS per C, assicurati di fornire il contenuto del PEM file che include ogni chiave come stringa C con terminazione nulla, non come percorso o nome di file. Per un esempio completo, vedete 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 nella forma. RSA AWS Encryption SDK NET, usa il metodo. materialProviders.CreateRawRsaKeyring()
Per un esempio completo, vedere R awRSAKeyring Example.cs.
L'esempio seguente utilizza la versione 4. x del AWS Encryption SDK modulo. 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 JavaScript Nel 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 costruisci un RSA portachiavi Raw in JavaScript, tieni presente la potenziale incompatibilità con altre implementazioni linguistiche.
L'esempio seguente utilizza la buildClient
funzione per specificare la politica di impegno predefinita,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
È inoltre possibile utilizzare il buildClient
per limitare il numero di chiavi di dati crittografate in un messaggio crittografato. Per ulteriori informazioni, consulta Limitazione delle chiavi di dati crittografate.
Per un esempio completo, vedete rsa_simple.ts (Browser). JavaScript
import {
RsaImportableKey,
RawRsaKeyringWebCrypto,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-browser'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
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 RSA portachiavi Raw in SDK di crittografia AWS per JavaScript Node.js, create una nuova istanza della 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 costruisci un RSA portachiavi non elaborato JavaScript, tieni presente la potenziale incompatibilità con altre implementazioni linguistiche.
L'esempio seguente utilizza la buildClient
funzione per specificare la politica di impegno predefinita,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
È inoltre possibile utilizzare il buildClient
per limitare il numero di chiavi di dati crittografate in un messaggio crittografato. Per ulteriori informazioni, consulta Limitazione delle chiavi di dati crittografate.
Per un esempio completo, vedere rsa_simple.ts (Node.js). JavaScript
import {
RawRsaKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
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);
- Python
-
L'esempio seguente crea un'istanza del AWS Encryption SDK client con la politica di impegno predefinita,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Per un esempio completo, vedere raw_rsa_keyring_example.py nel SDK di crittografia AWS per Python repository in. GitHub
# Define the key namespace and key name
key_name_space = "HSM_01
"
key_name = "RSA_2048_06
"
# Instantiate the material providers
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create Raw RSA keyring
keyring_input: CreateRawRsaKeyringInput = CreateRawRsaKeyringInput(
key_namespace=key_name_space,
key_name=key_name,
padding_scheme=PaddingScheme.OAEP_SHA256_MGF1
,
public_key=RSAPublicKey
,
private_key=RSAPrivateKey
)
raw_rsa_keyring: IKeyring = mat_prov.create_raw_rsa_keyring(
input=keyring_input
)