RSAPorte-clés Raw - AWS Encryption SDK

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

RSAPorte-clés Raw

Le trousseau de RSA clés brut effectue un chiffrement et un déchiffrement asymétriques des clés de données dans la mémoire locale à l'aide des clés RSA publiques et privées que vous fournissez. Vous devez générer, stocker et protéger la clé privée, de préférence dans un module de sécurité matériel (HSM) ou un système de gestion des clés. La fonction de chiffrement chiffre la clé de données sous la clé RSA publique. La fonction de déchiffrement déchiffre la clé de données à l'aide de la clé privée. Vous pouvez choisir parmi les différents modes de RSA rembourrage.

Un trousseau de RSA clés brut qui chiffre et déchiffre doit inclure une clé publique asymétrique et une paire de clés privées. Toutefois, vous pouvez chiffrer des données avec un jeu de RSA clés brut contenant uniquement une clé publique, et vous pouvez déchiffrer des données avec un jeu de RSA clés brut contenant uniquement une clé privée. Vous pouvez inclure n'importe quel RSA porte-clés Raw dans un porte-clés multiple. Si vous configurez un jeu de RSA clés brut avec une clé publique et une clé privée, assurez-vous qu'elles font partie de la même paire de clés. Certaines implémentations linguistiques du ne AWS Encryption SDK construiront pas un trousseau de RSA clés brut avec des clés provenant de paires différentes. D'autres comptent sur vous pour vérifier que vos clés proviennent de la même paire de clés.

Le trousseau de RSA clés Raw est équivalent et interagit avec le « JceMasterKeyin » Kit SDK de chiffrement AWS pour Java et le « RawMasterKeyin » Kit SDK de chiffrement AWS pour Python lorsqu'ils sont utilisés avec des clés de chiffrement RSA asymétriques. Vous pouvez chiffrer des données avec une certaine implémentation et déchiffrer les données avec n'importe quelle autre implémentation à l'aide de la même clé d'encapsulage. Pour plus de détails, consultez Compatibilité du porte-clés.

Note

Le RSA porte-clés Raw ne prend pas en charge les touches asymétriquesKMS. Si vous souhaitez utiliser des RSA KMS touches asymétriques, version 4. x du AWS Encryption SDK formulaire. NETet version 3. x des trousseaux de AWS KMS clés de Kit SDK de chiffrement AWS pour Java support qui utilisent le chiffrement symétrique (SYMMETRIC_DEFAULT) ou asymétrique. RSA AWS KMS keys

Si vous chiffrez des données à l'aide d'un jeu de RSA clés brut qui inclut la clé publique d'une RSA KMS clé, ni le AWS Encryption SDK NI ne AWS KMS peuvent les déchiffrer. Vous ne pouvez pas exporter la clé privée d'une clé AWS KMS asymétrique vers un trousseau de KMS RSA clés Raw. L'opération AWS KMS Decrypt ne peut pas déchiffrer le message chiffré renvoyé. AWS Encryption SDK

Lorsque vous créez un jeu de RSA clés brut dans le Kit SDK de chiffrement AWS pour C, veillez à fournir le contenu du PEM fichier qui inclut chaque clé sous forme de chaîne C terminée par un caractère nul, et non sous forme de chemin ou de nom de fichier. Lorsque vous créez un trousseau de RSA clés Raw JavaScript, soyez conscient de l'incompatibilité potentielle avec les implémentations d'autres langages.

Espaces de noms et noms

Pour identifier le contenu RSA clé d'un trousseau de clés, le trousseau de RSA clés brut utilise un espace de noms de clé et un nom de clé que vous fournissez. Ces valeurs ne sont pas secrètes. Ils apparaissent en texte brut dans l'en-tête du message chiffré renvoyé par l'opération de chiffrement. Nous vous recommandons d'utiliser l'espace de noms de clé et le nom de clé qui identifient la paire de RSA clés (ou sa clé privée) dans votre système de gestion des clés HSM ou dans votre système de gestion des clés.

Note

L'espace de noms et le nom de clé sont équivalents aux champs Provider ID (ou Provider) et Key ID dans le JceMasterKey etRawMasterKey.

Kit SDK de chiffrement AWS pour C réserve la valeur de l'aws-kmsespace de noms des KMS clés pour les clés. Ne l'utilisez pas dans un porte-clés Raw ou dans un AES RSA porte-clés Raw avec le. Kit SDK de chiffrement AWS pour C

Si vous créez différents trousseaux de clés pour chiffrer et déchiffrer un message donné, l'espace de noms et les valeurs des noms sont essentiels. Si l'espace de noms de clé et le nom de clé du jeu de clés de déchiffrement ne correspondent pas exactement, en distinguant majuscules et minuscules, à l'espace de noms de clé et au nom de clé du jeu de clés de chiffrement, le jeu de clés de déchiffrement n'est pas utilisé, même si les clés proviennent de la même paire de clés.

L'espace de noms de clé et le nom de clé du contenu clé des trousseaux de clés de chiffrement et de déchiffrement doivent être identiques, que le trousseau de clés contienne la clé RSA publique, la clé RSA privée ou les deux clés de la paire de clés. Supposons, par exemple, que vous cryptiez des données à l'aide d'un jeu de RSA clés brut pour une clé RSA publique avec un espace de noms HSM_01 et un nom de clé. RSA_2048_06 Pour déchiffrer ces données, créez un jeu de RSA clés brut avec la clé privée (ou paire de clés), ainsi que le même espace de noms et le même nom de clé.

Mode de rembourrage

Vous devez spécifier un mode de remplissage pour les trousseaux de RSA clés bruts utilisés pour le chiffrement et le déchiffrement, ou utiliser les fonctionnalités de l'implémentation de votre langage qui le spécifient pour vous.

Il AWS Encryption SDK prend en charge les modes de remplissage suivants, sous réserve des contraintes de chaque langue. Nous recommandons un mode de OAEPrembourrage, en particulier OAEP avec SHA -256 et MGF1 -256 Padding. SHA Le mode de PKCS1rembourrage n'est pris en charge que pour des raisons de rétrocompatibilité.

  • OAEPavec SHA -1 et MGF1 avec SHA -1 rembourrage

  • OAEPavec SHA -256 et MGF1 avec SHA -256 rembourrage

  • OAEPavec SHA rembourrage -384 et MGF1 avec rembourrage SHA -384

  • OAEPavec SHA -512 et MGF1 avec rembourrage SHA -512

  • PKCS1Rembourrage v1.5

Les exemples suivants montrent comment créer un trousseau de RSA clés brut avec les clés publique et privée d'une paire de RSA clés et le mode de OAEP remplissage avec SHA -256 et MGF1 avec SHA -256. Les RSAPrivateKey variables RSAPublicKey et représentent le matériel clé que vous fournissez.

C

Pour créer un trousseau de RSA clés brut dans le Kit SDK de chiffrement AWS pour C, utilisezaws_cryptosdk_raw_rsa_keyring_new.

Lorsque vous créez un jeu de RSA clés brut dans le Kit SDK de chiffrement AWS pour C, veillez à fournir le contenu du PEM fichier qui inclut chaque clé sous forme de chaîne C terminée par un caractère nul, et non sous forme de chemin ou de nom de fichier. Pour un exemple complet, consultez 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

Pour instancier un trousseau de RSA clés Raw dans le formulaire. AWS Encryption SDK NET, utilisez la materialProviders.CreateRawRsaKeyring() méthode. Pour un exemple complet, voir R awRSAKeyring Example.cs.

L'exemple suivant utilise la version 4. x du AWS Encryption SDK formulaire. 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

Le Kit SDK de chiffrement AWS pour JavaScript navigateur obtient ses primitives cryptographiques de la WebCryptobibliothèque. Avant de construire le porte-clés, vous devez utiliser importPublicKey() et/ou importPrivateKey() importer le matériau clé brut dans le WebCrypto backend. Cela garantit que le trousseau de clés est complet même si tous les appels WebCrypto sont asynchrones. L'objet utilisé par les méthodes d'importation inclut l'algorithme d'encapsulage et son mode de remplissage.

Après avoir importé le matériel clé, utilisez la RawRsaKeyringWebCrypto() méthode pour instancier le trousseau de clés. Lorsque vous créez un trousseau de RSA clés Raw JavaScript, soyez conscient de l'incompatibilité potentielle avec les implémentations d'autres langages.

Pour un exemple complet, consultez 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

Pour instancier un jeu de RSA clés Raw dans Kit SDK de chiffrement AWS pour JavaScript Node.js, créez une nouvelle instance de la classe. RawRsaKeyringNode Le wrapKey paramètre contient la clé publique. Le unwrapKey paramètre contient la clé privée. Le RawRsaKeyringNode constructeur calcule un mode de remplissage par défaut pour vous, bien que vous puissiez spécifier un mode de remplissage préféré.

Lorsque vous créez un trousseau de RSA clés brut JavaScript, soyez conscient des incompatibilités potentielles avec les implémentations d'autres langages.

Pour un exemple complet, consultez 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);