Je suis donc un informaticien entouré majoritairement d'électronicien·ne·s !
Les contre-mesures palliatives, et les contre-mesures curatives.
Pour nous, l'assembleur c'est le plus bas niveau qu'on conçoit, en dessous c'est du matériel ça nous concerne plus :D.
(Combien faut-il d'informaticien·ne·s pour changer une ampoule ?
Aucun·e, c'est un problème hardware.)
Pour ça j'ai écrit un outil, paioli (pablo.rauzy.name/sensi/paioli.h…) qui sait faire deux choses : >>
Y a encore des gens qui suivent on je donne trop de détails et c'est reulou ? Dites moi hein si je raconte trop ma vie ^^ !
1- une non protégée, qui sert de "base" ;
2- une protégée mais en utilisant comme ressource les deux premiers bits (donc y compris le foireux), pour voir ce qu'apporte l'idée de la contremesure ; et >>
(Ça se voit que j'ai pris l'habitude de vendre mon travail ? :D)
(Un de mes derniers papiers de thèse alors que c'est le premier boulot que j'ai fait !)
Cette fois-ci, l'attaquant modifie le système pendant l'exécution de l'algorithme. Par exemple avec un laser on va "glitcher" un registre, ce qui va avoir pour effet de le mettre à zéro ou d'y mettre une valeur aléatoire.
Il n'y a plus besoin que d'un calcul de PGCD !
L'idée c'est que ça permet de remplacer le gros calcul dans l'ensemble de taille N par deux calculs dans des ensembles de tailles p et q.
— Sp le résultat du calcul dans l'ensemble de taille p,
— Sq le résultat du calcul dans l'ensemble de taille q,
— S = CRT(Sp, Sq) le résultat de la recombinaison de Sp et Sq dans l'ensemble de taille N.
(CRT pour "Chinese Remainder Theorem").
Il suffit d'injecter une faute (laser ou glitch d'alimentation) n'importe quand et on est quasi sûr de ne toucher qu'une des deux parties.
Seulement voilà…
Du coup on calcul non plus S = CRT(Sp, Sq),
mais plutôt Q = CRT(Qp, Sq).
Et il se trouve que dans ce cas S - Q va être un multiple de q…
(Ça aurait été un multiple de p si on avait fauté le calcule de Sq, et un multiple de N=p×q si on avait rien fauté).
Comme N = p×q deux nombres premiers, le résultat ne peut avoir que 4 valeurs :
– 1, si S - Q est premier avec N ;
– p, si S - Q est un multiple de p ;
– q, si S - Q est un multiple de q ;
– N, si S - Q est un multiple de p×q.
Toute la sécurité a fichu le camps !
Je me suis retrouvé un peu par hasard au bon endroit au bon moment =). #LowHangingFruit
La vérification c'est bien, mais ça ne vérifie que ce qu'on lui demande de vérifier, et pour ça il faut être capable de le modéliser…
Je fini la thèse maintenant et on parle de choses plus légères ce soir ou j'arrête là pour la thèse et on continue demain ?
Dans ce contexte tous les encarteurs (les industriels fabricants de cartes à puces et autres produits de sécurité) et quelques universitaires se donnent à fond pour proposer des solutions sécurisées.
Et ça, je peux le faire aussi en simulant des injections de fautes ! :)
– soit c'est une faute à zéro et la nouvelle propriété de a est d'être nul,
– soit c'est une faute aléatoire et a n'est plus qu'un multiple de b.
Du coup s'est posé la question de comment créer une contre-mesure résistante à plusieurs fautes ?
Ça me parait ahurissant aujourd'hui de raconter ça. Ça semble absurde que ça se soit passé comme ça, mais que voulez vous, on va pas réécrire l'histoire ^^'.
(D'ailleurs j'ai faim, je vais pas tarder à bouger de la fac !).