J'essaie de calculer un HMAC avec SHA512 à l'intérieur d'une enclave Intel SGX. J'ai obtenu le code pour fonctionner mais recevoir les mauvais résultats. J'ai un exemple qui utilise une clé et une clé prédéfinies statiques à partir desquelles le HMAC est calculé, mais lors de la vérification du résultat reçu, celui-ci ne correspond pas au bon.SGX calcul HMAC à l'intérieur de l'enclave
apparantely il y a deux variantes différentes pour calculer le HMAC (selon ce enter link description here, je l'ai essayé à la fois
est ici la fonction de l'enclave.
int calculateHMAC(uint8_t *key, uint8_t *nonce, uint8_t *res_hmac) {
IppsHMACState *ctx;
IppStatus status;
int psize = 0;
//VARIANT 1
status = ippsHMAC_GetSize(&psize);
if (status == ippStsNullPtrErr)
return 1;
ctx = (IppsHMACState*) malloc(psize);
status = ippsHMAC_Init(key, 16, ctx, ippHashAlg_SHA512);
if (status != ippStsNoErr)
return 1;
status = ippsHMAC_Update(nonce, 16, ctx);
if (status != ippStsNoErr)
return 1;
uint8_t hmac[64];
memset(hmac, '\0', 64);
status = ippsHMAC_Final(hmac, 64, ctx);
if (status != ippStsNoErr)
return 1;
memcpy(res_hmac, hmac, 64);
//VARIANT 2
// uint8_t test_hmac[HMAC_LENGTH];
// status = ippsHMAC_Message(nonce, 16, key, 16, test_hmac, 64, ippHashAlg_SHA512);
// if (status != ippStsNoErr)
// return 1;
// memcpy(res_hmac, test_hmac, 64);
return 0;
}
est ici l'appel MISE À JOUR :
uint8_t ba_nonce[16] = {
0x7d, 0x93, 0x09, 0x9f, 0x7f, 0xed, 0x16, 0x21,
0x58, 0x36, 0xf7, 0xba, 0xd4, 0xdb, 0x0e, 0x48
};
uint8_t ba_key[16] = {
0xa5, 0xb1, 0x15, 0x53, 0x6d, 0x5b, 0xf3, 0x50,
0xc5, 0xb0, 0xfa, 0x6f, 0x69, 0x24, 0x2f, 0x18
};
uint8_t t_hmac[64];
memset(t_hmac, '\0', 64);
int error = calculateHMAC(ba_key, ba_nonce, t_hmac);
je ne vois pas ce que je fais mal !?
Cela se traduira par 7d2f2e3d57c84a58945b9016fb37e2df03afdde313c9d79c31ec1e6612d6d6b20456a8fcf799ef74d16f60c7f283e621400004422885f33fb3d2bb7ae7a1daa3
qui est faux selon cette calculatrice here
Je l'ai essayé avec votre suggestion, maintenant je reçois le même résultat pour chaque itération, ce qui est mieux; mais le résultat est toujours faux? – wasp256
Le résultat que le code mis à jour vous donne est correct. Le vérificateur en ligne interprète vos entrées comme des chaînes. Par conséquent, vous obtenez un hachage différent. J'ai reproduit les deux sorties, la bonne que donne le code mis à jour ainsi que celle que le vérificateur en ligne produit, avec Python: https://gist.github.com/fzgregor/db6b25ff9cb712a3c93face3b10672cd – fzgregor
Je l'ai revalidé maintenant et c'était l'erreur, merci Pour votre aide! – wasp256