Open samiBendou opened 4 years ago
@Remote-HWA @jmdutertre je mettrai ici les prochaines images liées à l'attaque et à la corrélation
Software attack :
Avant amélioration de la randomisation #3
@Remote-HWA avec 8 TDC les corrélations semblent plus marquées (15% vs 5%) mais d'autres pics de corrélations se présentent ce qui n'est pas le cas avec 4 TDC.
De plus, il ne semble pas que passer de 4 à 8 TDC n'améliore pas les performances, voici mon placement (en orange les TDC) :
EDIT les autres pics de corrélations étaient dus à la mauvaise randomisation des plains
Bravo :-) Je passe te voir, Jean-Max
Le 17 sept. 2020 à 10:23, bendou notifications@github.com a écrit :
https://user-images.githubusercontent.com/32769966/93440399-aa75ff80-f8cf-11ea-96dc-38fd25190fd6.png https://user-images.githubusercontent.com/32769966/93440421-ac3fc300-f8cf-11ea-9ce1-8501a1d15f4d.png https://user-images.githubusercontent.com/32769966/93440427-aea21d00-f8cf-11ea-9a58-ae431dd0a06a.png https://user-images.githubusercontent.com/32769966/93440443-b497fe00-f8cf-11ea-8998-3f2359ee39f7.png https://user-images.githubusercontent.com/32769966/93440449-b661c180-f8cf-11ea-96fa-b6de8fc39e59.png — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/samiBendou/sca_framework/issues/59#issuecomment-694078745, or unsubscribe https://github.com/notifications/unsubscribe-auth/AQG46INJWYTRGNUPE5JJH7LSGHBONANCNFSM4P6KAITQ.
Hardware après amélioration de la randomisation #3
@Remote-HWA peut-tu confirmer que le modèle d'hypothèse Sbox round 0 est correct :
for h, k in product(range(COUNT_HYP), range(COUNT_CLS)):
if model == Models.SBOX:
self.hypothesis[h, k] = bin(aes.S_BOX[k ^ h] ^ k).count("1")
elif model == Models.INV_SBOX:
self.hypothesis[h, k] = bin(aes.INV_S_BOX[k ^ h] ^ k).count("1")
return self
Préparation de la clé :
key = aes.words_to_block(channel.keys[0])
if model == cpa.Models.SBOX:
blocks = [aes.words_to_block(block) for block in channel.plains]
elif model == cpa.Models.INV_SBOX:
key = aes.key_expansion(key)[10].T # la key expansion transpose la clé
blocks = [aes.words_to_block(block) for block in channel.ciphers]
else:
return
if current.samples:
current.accumulate(blocks, traces)
else:
current.clear(traces.shape[1]).accumulate(blocks, traces)
Le modèle inverse SBox est fonctionnel pour l'attaque hardware
non là tu fais une distance de hamming comme au dernier tour. Le vrai modèle est le suivant: self.hypothesis[h, k] = bin(aes.S_BOX[k ^ h]).count("1")
aussi c'est bizarre d'appeler le plaintext "h", on dirait que tu parles d'une hypothèse alors que c'est sur k que tu fais l'hypothèse.
Normalement on met sbox(k^m)
aussi c'est bizarre d'appeler le plaintext "h", on dirait que tu parles d'une hypothèse alors que c'est sur k que tu fais l'hypothèse.
Normalement on met sbox(k^m)
h c'est l'hypothèse sur la clé et k c'est le byte du plaintext
Ah oui et je voudrais savoir si en 113000 traces tu touve tout les bytes de la clé ou uniquement certains d'entre eux ?
Attaque software après correction du modèle SBox R0 0/16 exacts
Les données brutes sont disponibles ici : https://github.com/samiBendou/sca_framework/issues/58#issuecomment-694764428
Meilleure corrélation avec la clé
Ah oui et je voudrais savoir si en 113000 traces tu touve tout les bytes de la clé ou uniquement certains d'entre eux ?
oui, tous
essaie de prendre 500,000 courbes, je pense que ça va marcher
le premier round te paraît ok cette image ?
essaie de prendre 500,000 courbes, je pense que ça va marcher
@jmdutertre il faudra un ordinateur dédié à cette tâche (> 24h d'acquisition)
Attaque software après correction du modèle SBox R0 0/16 exacts
@Remote-HWA @jmdutertre toujours pas d'hypothèse correcte après > 196000 itérations
Attaque hardware 16384
Attaque OpenSSL (scripts Python Joseph) 2 000 000 traces
Attaque OpenSSL 2097152 traces (15/16) exacts
Meilleure divergence
Pire divergence
Byte 4 non divergent
Taille : 7.6Gb Temps : ~6h
@Remote-HWA du coup tu peux me confirmer que la version du tiny qui doit fuiter est bien celle qui utilise l'implémentation de SBOX suivante :
static uint8_t getSBoxInvert(uint8_t num)
{
return rsbox[num];
}
en fait sur le papier je réussi l'attaque du tiny en ~110000 courbes parce que je prenais uniquement la partie qui m'intéréssais de l'AES (figure en dessous). du coup moins de désynchro et de meilleurs résultats
En utilisant la fonction cipher, sur le commit que je t'ai donné, j'ai réussi à sortir des bytes après 1M de courbes avant-hier
l'attaque est fonctionnelle avec l'AES dhuertas (très proche du tiny) : ici avec 500,000 traces TDC
tu peux directement linker le repo https://github.com/dhuertas/AES
Modèle utilisé: HW(sbox[k^m]) filtrage: passe haut fs: 200MHz fc: 13MHz ordre: 4
Résultats:
Overview:
il faudra que tu doubles la taille de la fifo si tu veux voir tout l'AES, ici la moitié:
byte 0 :
byte 15:
byte 2:
Parfait c'est mis en place
Store the attack data and medias to visualize the evolution of attack's quality