M2_SETI/A1/DFA_DES/A1_10-12.ipynb
2022-10-19 09:02:34 +02:00

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
}