Cryptage / décryptage des chaînes de texte à l'aide d'OpenSSL ECC
Comment puis-je utiliser OpenSSL de l'ECC support pour crypter ou décrypter une chaîne de texte? Je suis en mesure de générer ECC privée/clé publique à l'aide d'OpenSSL Api, mais je ne sais pas comment chiffrer le texte en clair à l'aide de ces touches.
source d'informationauteur | 2009-07-20
Vous devez vous connecter pour publier un commentaire.
Car c'est tellement dur de trouver des exemples montrant comment utiliser ECC pour chiffrer les données, je pensais que je poste un peu de code à utiliser pour les autres. Pour la liste complète, consultez mon openssl-dev affichage:
http://www.mail-archive.com/[email protected]/msg28042.html
Fondamentalement, de son une rincée version utilisable de la façon d'utiliser ECDH pour fixer un bloc de données. ECDH est utilisé pour générer un secret partagé. Le secret partagé est ensuite hachée à l'aide de SHA-512. La résultante de 512 bits sont divisés, avec 256 servant de la clé de chiffrement symétrique (AES 256 dans mon exemple) et l'autre de 256 bits utilisée comme clé pour le HMAC. Mon application est vaguement basé sur le ECIES standard décrites par SECG groupe de travail.
Les fonctions clés sont ecies_encrypt() qui accepte la clé publique dans l'hex formulaire et renvoie les données chiffrées:
Et ecies_decrypt (), qui prend la clé privée, de nouveau en forme hexagonale, et décrypte les préalablement assuré de la mémoire tampon:
Je poste ceci car personnellement, je ne pouvais pas trouver d'autres exemples de la façon de sécuriser les fichiers à l'aide de l'ECC et la bibliothèque OpenSSL. Qui a dit que sa vaut la peine de mentionner des solutions de rechange qui ne sont pas utiliser OpenSSL. On est seccure qui suit un modèle similaire à mon exemple, il s'appuie libgcrypt. Depuis libgcrypt ne fournit pas tous de la sous-ECC fonctions nécessaires, le seccure programme comble les lacunes et met en œuvre l'ECC logique manquant de libgcrypt.
Un autre programme intéressant de regarder est SKS, qui utilise un semblable ECC chiffrement à base de processus l'exemple ci-dessus, mais n'ont pas de dépendances externes (donc tout le code ECC est là pour vous de regarder).
ECC lui-même n'a pas vraiment définir de chiffrement/déchiffrement des opérations - algorithmes construits sur les courbes elliptiques faire.
Un exemple est Elliptique-Curve Diffie-Hellman. Vous pourriez chiffrer un message à l'aide de ECDH par:
À déchiffrer:
EDIT: ce qui suit est l'idée de base pour générer un secret à l'aide de ECDH. Nous devons d'abord définir une fonction de dérivation de clé - celui-ci utilise le hachage SHA1.
C'est le ECDH code pour le côté de l'expéditeur. Il suppose que la clé publique du destinataire est déjà dans "recip_key", et vous avez vérifié avec EC_KEY_check_key(). Il omet également important pour la vérification des erreurs, par souci de concision, ce qui vous permettra de certainement souhaitez inclure dans le code de production.
Après cela, le tampon 'buf' contient 20 octets de matériel que vous pouvez utiliser pour la saisie des données. Cet abrégé exemple est basé sur le code dans la section "ecdhtest.c" dans le openssl distribution de la source, je suggère de prendre un coup d'oeil.
Vous souhaitez envoyer la partie de la clé publique de ephemeral_key avec le message chiffré, et en toute sécurité de jeter la clé privée de la partie. Un MAC sur les données est également une bonne idée, et si vous avez besoin de plus de 20 octets de matériel de chiffrement plus hachage est probablement dans l'ordre.
Le destinataire fait la même chose, sauf que sa clé privée existe déjà (depuis l'expéditeur eu à connaître la clé publique correspondante à l'avance), et la clé publique est reçu de l'expéditeur.