Comment définir la clé privée pour la signature de messages lors de l'utilisation d'ECDSA dans OpenSSL par programme? J'ai le code suivant:Signature d'un message en utilisant ECDSA dans OpenSSL
static int create_signature(unsigned char* hash)
{
EC_KEY *eckey=NULL;
EC_GROUP *ecgroup=NULL;
EVP_PKEY *evpkey=NULL;
unsigned char *signature=NULL;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int signature_size, block_size;
unsigned char * block=NULL;
ecgroup = get_ec_group_192();
EC_GROUP_set_asn1_flag(ecgroup, OPENSSL_EC_NAMED_CURVE);
EC_GROUP_set_point_conversion_form(ecgroup, form);
eckey=EC_KEY_new();
EC_KEY_set_group(eckey,ecgroup);
EC_KEY_generate_key(eckey);
evpkey=EVP_PKEY_new();
EVP_PKEY_assign_EC_KEY(evpkey,eckey);
signature=OPENSSL_malloc(EVP_PKEY_size(evpkey));
ECDSA_sign(0, hash, sizeof(hash), signature, &signature_size, eckey);
printf("%s", signature);
return 0;
}
La fonction get_ec_group_192()
est créée en exécutant openssl ecparam -C -name secp192k1 -genkey
qui génère aussi des EC PARAMETERS
et un EC PRIVATE KEY
. Ce que j'essaie de faire est de crypter le message contenu dans hash
avec ma clé privée afin que seule la clé publique puisse le déchiffrer. Est-ce possible avec le code ci-dessus, ou est-ce que je fais cela complètement faux?
La terminologie correcte est "signature". Le mot "cryptage" est réservé à autre chose. Vous n'avez pas mentionné le problème que vous rencontrez. –
Ahh, désolé à ce sujet. Bien dans l'extrait de code ci-dessus la clé privée n'est pas utilisée n'importe où? Ou est-ce seulement nécessaire lors de la signature du message? – Anvar
Remarque, le cryptage à l'aide d'une clé privée est en réalité appelé "signature". Tout détenteur de la moitié publique correspondante décryptera le résultat (qui s'appelle en fait "vérification") – IanNorton