104 lines
3.8 KiB
Text
104 lines
3.8 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Cours/TP 12/10/22 A1\n",
|
|
"\n",
|
|
"Injection de fautes, exploiter les failles.\n",
|
|
"Mecanismes cryptographiques, algo mathematiquement robustes. Quand on veut les implémenter, ils peuvent êtres soumis à différentes attaques.\n",
|
|
"\n",
|
|
"Attaque par injection de code. (Injecter des données, qui peuvent correspondre à du code donné, exploitation de bug dans le code logiciel)\n",
|
|
"Attaque par canaux auxiliaires. (temps d'execution, consommation elec, connexion)\n",
|
|
"\n",
|
|
"Raison d'optimisation (multiplication), multiplier par 0 -> pas de calcul, temps de calcul très long donc si secret = 0, temps de calcul court.\n",
|
|
"Attaque physique. (Ouvrir le circuit, sonder (microprobing) entre la mémoire et le processeur, FIB ?)\n",
|
|
"\n",
|
|
"Certaines attaques nécessitent le composant physique, d'autres à distances (marron et bleu p4)\n",
|
|
"Tirs lasers pour modifier la mémoire, injecter des fautes.\n",
|
|
"\n",
|
|
"\n",
|
|
"p9. nécessite une précision en cycle processeur très grande. Il faut cibler une ou quelques cycles.\n",
|
|
"p10. Algo plus connus/utilisé.\n",
|
|
"\n",
|
|
"Evaluation : QCM sur toutes les parties. (qu'est-ce qu'une attaque etc... Contres mesures et classification) Dans quel cas on utilise certaines contre mesure et dans cette attaque là quelle contre mesure utiliser ?\n",
|
|
"\n",
|
|
"p12. CRC pour protéger les CSP (critical security parameters) pour éviter de changer les p,q qui sont premiers.\n",
|
|
"\n",
|
|
"p14. On faute l'exposant d_i de proche en proche pour obtenir les m_i\n",
|
|
"p15. Contre mesure = rajouter un produit avec un nombre aléatoire (Stratégie Résilience)\n",
|
|
"\n",
|
|
"Vérification de valeur -> Stratégie détection\n",
|
|
"\n",
|
|
"p19. On déplace l'instant d'exécution de l'instruction sensible -> Observation de la consommation électrique\n",
|
|
"On peut rajouter des capteurs (lumière pour l'ouverture de la puce, f_clk pour le downclocking pour observer les signaux)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## TD\n",
|
|
"Q1 Donner l'équation de R_16 en fonction de R_15 et L_15\n",
|
|
"R_16 = L_15 ^ f(R_15,K_16) #f(.,.) p40\n",
|
|
"f(R_15,K_16) = P(S_1-8(E(R_15) ^ K_16))\n",
|
|
"\n",
|
|
"Q2 Entrée R_15 fautée : R_15'\n",
|
|
"R_16' = L_15' ^ P(S_1-8(E(R_15') ^ K_16))\n",
|
|
"\n",
|
|
"Q3 Delta(R_16) = R_16 ^ R_16'\n",
|
|
"= Delta(L_15) ^ P(a) ^ P(b)\n",
|
|
"= Delta(L_15) ^ P(S_1-8(E(R_15) ^ K_16) ^ S_1-8(E(R_15') ^ K_16))\n",
|
|
"\n",
|
|
"Q4\n",
|
|
"Connues : R_16, R_15 = L_16 et R_15' = L_16'\n",
|
|
"Inconnues : Delta(L_15) et K_16\n",
|
|
"\n",
|
|
"On veut Delta(L_15) = 0 donc ne pas toucher L_15 lors de la faute.\n",
|
|
"\n",
|
|
"Q5\n",
|
|
"P⁻¹(Delta(R_16)) = S_1-8(E(R_15) ^ K_16) ^ S_1-8(E(R_15') ^ K_16)\n",
|
|
"\n",
|
|
"On teste les clés K_16 pour avoir égalité des deux côtés, si elle c'est vérifié, la clé est une candidate."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Défi 4 :\n",
|
|
"\n",
|
|
"Q1 \n",
|
|
"P⁻¹_1(Delta(R_16)) = S_1(E(R_15) ^ K_16,1) ^ S_1(E(R_15') ^ K_16,1)\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 2.7.18 64-bit",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "2.7.18"
|
|
},
|
|
"orig_nbformat": 4,
|
|
"vscode": {
|
|
"interpreter": {
|
|
"hash": "f92b2924b84ff19c1c3dc485f7644d4486f64738191026bf8e6de303969141b5"
|
|
}
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|