[Chiffrement] Génération clés (Elgamal)

InsouInsou Membre

Bonjour tout le monde,

Je reviens vers vous car je me heurte à un problème de chiffrement qui me dépasse..

Pour vous situer le contexte, il y a un développeur qui s'occupe de l'api du projet et il y a une partie du json qui va être chiffrée.
Je dois donc déchiffrer son contenu.
Il m'a listé toute les fonctions dont je vais avoir besoin côté iOs.

J'ai donc son code javascript et je dois refaire l'équivalent en swift.

Je bloque sur la génération de clés privées/publiques en utilisant le chiffrement ElGamal

Voici la fonction javascript que j'ai :

function generate_keypair () {
     var keypair = sjcl.ecc.elGamal.generateKeys(256) // On génère la paire de clefs asymétriques, (courbe P-256)
     console.log('[keypair]', keypair)
     var public_key = keypair.pub.get()
     var secret_key = keypair.sec.get()
     console.log('[public_key]', public_key)
     console.log('[secret_key]', secret_key)
     var public_key_base64 = sjcl.codec.base64.fromBits(public_key.x.concat(public_key.y))
     var secret_key_base64 = sjcl.codec.base64.fromBits(secret_key)
     console.log('[result]', {publickey: public_key_base64, secretkey: secret_key_base64})

     return {publickey: public_key_base64, secretkey: secret_key_base64}
  }

La ligne qui m'intéresse est : sjcl.ecc.elGamal.generateKeys(256)
Il utilise la librairie SJCL : https://github.com/bitwiseshiftleft/sjcl/

Quelqu'un sait comment générer une paire de clés privée/publique en swift en utilisant le chiffrement d'ElGamal ?

Merci de votre aide :)

Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur

    Ce n'est pas un sujet que je maîtrise, mais CryptoKit propose un chiffrement avec une courbe P-256.
    Utilise CryptoKit si tu peux!

  • DrakenDraken Membre

    Même réponse que Céroce. Il y a un framework de codage avec Swift. Regarde s'il ne contient pas déjà la solution a ton problème, ou des outils simplifiant ta tâche.

  • InsouInsou Membre

    C'est pas un sujet que je maitrise non plus :D

    Du coup, merci pour ton aide, tu m'as débloqué pour générer les clés privées/publiques ^^

    Le code si ça peut aider les prochains..

     let keypair = P256.Signing.PrivateKey() // génération d'une paire de clés
    
     let private_key = keypair.rawRepresentation.base64EncodedString()   // clé privée
     print(private_key)
     print("------------")
    
     let public_key = keypair.publicKey // clé publique - DATA
     print(public_key)
     print("------------")
    
     let publicKeyString = public_key.rawRepresentation.base64EncodedString() // clé publique - STRING - à partager
     print(publicKeyString)
    

    Maintenant que j'ai mes clés privées/publiques, il faut que je chiffre un message et j'ai du mal à comprendre le principe :/

    Voici la fonction en javascript pour chiffrer :

    var c256 = sjcl.ecc.curves.c256;
    var publickeyBas64ToBits = sjcl.codec.base64.toBits(publickey);
    
    console.log(c256);
    console.log(publickey);
    console.log(publickeyBas64ToBits);
    
    var pub = new sjcl.ecc.elGamal.publicKey(
                        c256, 
                        publickeyBas64ToBits
                    )
    var ciphertext = sjcl.encrypt(pub, message)
    return ciphertext
    

    Je suis tombé sur ce lien aussi : https://www.andyibanez.com/posts/common-cryptographic-operations-with-cryptokit/

    Je retourne faire quelques tests..

Connectez-vous ou Inscrivez-vous pour répondre.