emse-sas / sca_framework

Demonstration application for RO and TDC based SCA attack on the AES 128
MIT License
1 stars 0 forks source link

Attack quality tracking #59

Open samiBendou opened 4 years ago

samiBendou commented 4 years ago

Store the attack data and medias to visualize the evolution of attack's quality

samiBendou commented 4 years ago

@Remote-HWA @jmdutertre je mettrai ici les prochaines images liées à l'attaque et à la corrélation

samiBendou commented 4 years ago

Software attack :

samiBendou commented 4 years ago

Avant amélioration de la randomisation #3

average_hw_enc_5120

cor_hw_enc_5120_b0

cor_hw_enc_5120_b1

cor_hw_enc_5120_b2

cor_hw_enc_5120_b3

samiBendou commented 4 years ago

@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

implem

jmdutertre commented 4 years ago

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.


Jean-Max et Isabelle Dutertre 06.63.74.87.92 jmdutertre@gmail.com 425, Avenue Célestin Bressier 126, les Demeures de Monclar 13290 Aix les Mille

samiBendou commented 4 years ago

Hardware après amélioration de la randomisation #3

average_hw_enc_5120

cor_hw_enc_5120_b0

cor_hw_enc_5120_b1

cor_hw_enc_5120_b2

cor_hw_enc_5120_b3

samiBendou commented 4 years ago

@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

Remote-HWA commented 4 years ago

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")

Remote-HWA commented 4 years ago

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)

samiBendou commented 4 years ago

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

samiBendou commented 4 years ago

Ah oui et je voudrais savoir si en 113000 traces tu touve tout les bytes de la clé ou uniquement certains d'entre eux ?

samiBendou commented 4 years ago

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é cor_sw_enc_131072_b3

Remote-HWA commented 4 years ago

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

Remote-HWA commented 4 years ago

essaie de prendre 500,000 courbes, je pense que ça va marcher

samiBendou commented 4 years ago

le premier round te paraît ok cette image ?

average_sw_enc_131072

samiBendou commented 4 years ago

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)

samiBendou commented 4 years ago

Attaque software après correction du modèle SBox R0 0/16 exacts

cor_sw_enc_196608_b0

cor_sw_enc_196608_b14

@Remote-HWA @jmdutertre toujours pas d'hypothèse correcte après > 196000 itérations

samiBendou commented 4 years ago

Attaque hardware 16384

average_hw_enc_16384

cor_hw_enc_16384_b0

cor_hw_enc_16384_b1

cor_hw_enc_16384_b2

cor_hw_enc_16384_b3

samiBendou commented 4 years ago

Attaque OpenSSL (scripts Python Joseph) 2 000 000 traces

b10_ssl

b15_ssl

t_ssl

ssl_log

samiBendou commented 4 years ago

Attaque OpenSSL 2097152 traces (15/16) exacts

average_ssl_enc_2097152

Meilleure divergence

cor_ssl_enc_2097152_b14

Pire divergence

cor_ssl_enc_2097152_b5

Byte 4 non divergent

cor_ssl_enc_2097152_b4

Taille : 7.6Gb Temps : ~6h

samiBendou commented 4 years ago

@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];
}
Remote-HWA commented 4 years ago

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

image

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

Remote-HWA commented 4 years ago

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: image

Overview:

il faudra que tu doubles la taille de la fifo si tu veux voir tout l'AES, ici la moitié: image

byte 0 : image

byte 15: image

byte 2: image

samiBendou commented 4 years ago

Parfait c'est mis en place