KMS) Chiffrement d'enveloppe avec décryptage openssl et java

C'est un mémorandum

La sécurité n'est pas très forte, veuillez donc vous référer également à cette méthode.

Générer la clé de données KMS avec AWS CLI

$ aws kms generate-data-key --key-spec "AES_128" --key-id "arn:aws:kms:REGION_NAME:ACCOUNT_ID:key/HOGEHOGE"

{
  "ciphertextBlob": "foo",
  "Plaintext" : "bar",
  "KeyId" : "KEY-ID"
}

Le ciphertextBlog et le Plaintext renvoyés sont encodés en Base64

Crypter avec Openssl

$ KEY=$(echo "bar" | base64 -d | od -A n -t x1 -v | sed -e 's/ //g')
$ openssl aes-128-ecb -e -in secret.txt -out encrypted.txt -base64  -K ${KEY}

KEY = KMS DataKey converti en chaîne HEX (requête: manière plus intelligente) Chiffrez avec la commande openssl. À ce stade, le vecteur d'initialisation n'est pas nécessaire pour le traitement de bloc.

Décrypter avec Java

String encryptedTxt = "baz";
String plainDataKey = "bar";

byte[] key = DatatypeConverter.parseBase64Binary(plainDataKey);

SecretKeySpec secretKey = new SecretKeySpec(key, "AES");

Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);

byte[] encrypted = DatatypeConverter.parseBase64Binary(encryptedTxt);

String decryptedTxt = new String(cipher.doFinal(encrypted));
System.out.println("result: " + decryptedTxt);

Dans l'exemple ci-dessus, plainDataKey est écrit solidement, Pour être correct, plainDataKey doit être obtenu en décodant le ciphertextBlog en se référant à la documentation AWS. En outre, il existe une instruction dans la documentation AWS pour supprimer la plainDataKey utilisée dès que possible.

Autre

Si vous voulez bien faire les choses, vous devez générer la clé et le vecteur d'initialisation. Pensez-y comme amusant = sécurité réduite.

Recommended Posts

KMS) Chiffrement d'enveloppe avec décryptage openssl et java
Cryptage et décryptage Java PDF
Obtenez un cryptage compatible OpenSSL avec Java / PHP
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
Installez Java et Tomcat avec Ansible
Utilisez JDBC avec Java et Scala.
Sortie PDF et TIFF avec Java 8
Cryptage Java, décryptage de documents Word
Crypter avec Java et décrypter avec C #
Surveillez les applications Java avec jolokia et hawtio
Lier le code Java et C ++ avec SWIG
Essayons WebSocket avec Java et javascript!
[Java] Lecture et écriture de fichiers avec OpenCSV
Chiffrement d'enveloppe avec AWS Key Management Service
Exemple de création / chiffrement / déchiffrement de paire de clés RSA (JAVA)
Créez et testez des applications Java + Gradle avec Wercker
JSON avec Java et Jackson Part 2 XSS mesures
Préparer un environnement de scraping avec Docker et Java
Crypter / décrypter avec AES256 en PHP et Java
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
[Review] Lecture et écriture de fichiers avec java (JDK6)
Java et JavaScript
XXE et Java
[Java] Aligne les caractères même avec des caractères mixtes demi-largeur et pleine largeur
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
[Java] Comment chiffrer avec le chiffrement AES avec une bibliothèque standard
[Java] Se référer et définir des variables privées avec réflexion
Je veux faire des transitions d'écran avec kotlin et java!
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
Application de reconnaissance faciale conçue avec Amazon Rekognition et Java
[Java] Développement avec plusieurs fichiers en utilisant package et import
Java EE sans serveur à partir de Quarkus et Cloud Run