Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
# cryptologie
# <i class="fa fa-user-secret" aria-hidden="true"></i>
## Pourquoi chiffre-t-on ?
1. Confidentialité
2. Authentification
3. Intégrité
4. Non répudiation
## opérations cryptographiques
* agit sur une donnée en claire
* une chaîne caractère
* un fichier texte
* un fichier multimédia
* une archive
* appelé aussi le **clair**
* le but de la protéger
## Hacher (to hash)
* hash / Empreinte / Condensat
* taille fixe (quelques octets)
* chaque **clair** a un hash unique
* collision = cassé
* pas d’opération inverse
* on parle de hashage
## Hacher (to hash)
<pre><code class="hljs bash"" style="font-size: 16px"">sha256("password") = 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8</code></pre>
* [MD5]([SHA-1](https://fr.wikipedia.org/wiki/MD5) <i class="fa fa-thumbs-down"></i>
* [SHA-1](https://fr.wikipedia.org/wiki/SHA-1) <i class="fa fa-thumbs-down"></i>
* [SHA-2](https://fr.wikipedia.org/wiki/SHA-2) <i class="fa fa-thumbs-up"></i>
* [SHA-256](https://fr.wikipedia.org/wiki/SHA-2#SHA-256)
* [SHA-512](https://fr.wikipedia.org/wiki/SHA-2#SHA-512)
* [SHA-384](https://fr.wikipedia.org/wiki/SHA-2#SHA-384)
* [Hash: online hash value calculator](https://www.fileformat.info/tool/hash.htm)
## Hash / attaques
* [force brute](https://fr.wikipedia.org/wiki/Attaque_par_force_brute)
* testé toutes les possibilités (online / offline)
* [par dictionnaire](https://fr.wikipedia.org/wiki/Attaque_par_dictionnaire)
* testé des combinaisons de possibilités probables (online / offline)
<!-- * [https://github.com/danielmiessler/SecLists/tree/master/Passwords](https://github.com/danielmiessler/SecLists/tree/master/Passwords) -->
* [Tables arc-en-ciel](https://fr.wikipedia.org/wiki/Rainbow_table)
* hashés précalculés de possibilités (offline)
* [https://crackstation.net/](https://crackstation.net/)
* [http://project-rainbowcrack.com/table.htm](http://project-rainbowcrack.com/table.htm)
<!--* [What are the differences between dictionary attack and brute force attack?](https://security.stackexchange.com/questions/67712/what-are-the-differences-between-dictionary-attack-and-brute-force-attack#67768) -->
## Saler (to salt)
* hasher en concaténant la donnée en claire avec une chaîne de caractères pseudo-aléatoires
* stocker le sel au niveau de l'enregistrement de l'utilisateur
* évite les attaques par tables arc-en-ciel
* n'évite pas la force brute / ni les attaques par dictionnaire
* on parle de salaison
## Saler (to salt)
<pre><code class="hljs bash" style="font-size: 14px">sha256("hello"."bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab</code></pre>
* utilisé notamment pour le stockage des mots de passe en base de données
* [Salted Password Hashing - Doing it Right](https://crackstation.net/hashing-security.htm)
## Coder (to encode)
* changer la manière de stocker la donnée en clair
* n'est pas réellement une opération cryptographique
* pas de secret
* la donnée n'est pas protégée
* on parle de codage
<pre><code class="hljs bash" style="font-size: 25px">base64_encode("all in clear") = YWxsIGluIGNsZWFy</code></pre>
* opération inverse décoder (to decode)
<pre><code class="hljs bash" style="font-size: 25px">base64_decode("YWxsIGluIGNsZWFy") = all in clear</code></pre>
## Chiffrer (to encrypt)
* rendre la compréhension de la donnée en claire impossible à quiconque ne possède pas le secret (la **clé** pour la lire)
* on parle de chiffrement
<pre><code class="hljs bash" style="font-size: 16px">openssl_encrypt("all in clear","aes128","secret") = d2xhqzZbLFzoCP6vNfdVOg==</code></pre>
* opération inverse déchiffrer (to decrypt)
<pre><code class="hljs bash" style="font-size: 16px">openssl_decrypt("d2xhqzZbLFzoCP6vNfdVOg==","aes128","secret") = all in clear</code></pre>
* Deux options : symétrique ou asymétrique
## Le reste ...
* **Décrypter**
* chercher à deviner la donnée en claire sans disposer du secret
* **Chiffrage**
* pour les devis (en homme / jour)
* **[Crypter, cryptage, encrypter n'existent pas](http://www.bortzmeyer.org/cryptage-n-existe-pas.html)**
* reviendrait à tenter de chiffrer sans connaîre le secret
* non sens
## en termes scientifiques ...
* **Cryptologie**
* science du secret
* **Cryptographie**
* comment protéger les messages
* **Cryptogranalyse**
* comment décrypter les messages
## Chiffrement symétrique
* Dit **à clé secrète**, **à clé privée**, ou encore **à secret partagé**
* la clé permet de chiffrer **et** de déchiffrer
* plus la clé est **grosse** plus il est difficile de la deviner
* <i class="fa fa-thumbs-o-up"></i> peu gourmand en calcul
* <i class="fa fa-thumbs-o-down"></i> la clé doit être partagée par l'émetteur et le(s) récepteur(s)
## Chiffrements symétriques connus
* <i class="fa fa-thumbs-down"></i> faibles
* Scytale spartiate, ROT13, Chiffre de Jules César
* <i class="fa fa-thumbs-up"></i> robustes
* Blowfish, AES, Twofish

## problème du chiffrement pour plusieurs
* démultiplie le nombre de clé
* une clé par destinataire
## problème du partage de la clé secrète
* risque d'interaction
* communiqué des messages chiffrés deux à deux
* n * (n-1) / 2
* si on veut couvrir tous les cas
* chiffré pour un groupe de 3 4
* démultiplication des clés
* non adaptée
Note:
* https://www.youtube.com/watch?v=9zNAUFtw7Ac 14:30
* https://romain.blogreen.org/files/2017-10-31-pki.pdf slide 15
## vecteur d'intialisation
https://stackoverflow.com/questions/11821195/use-of-initialization-vector-in-openssl-encrypt
* avoir la garanti que les chiffrés sont uniques
* se stocke en clair
* n'est utilisable qu'avec le secret
* mais deux messages identiques chiffrés avec de vi différent auront des chiffré différents
<?php
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes128"));
$crypt = openssl_encrypt("all in clear", "aes128", "secret", null, $iv);
$crypt = openssl_encrypt("all in clear", "aes128", "secret");
echo $crypt."\n";
$clear = openssl_decrypt($crypt, "aes128", "secret", null , $iv);
$clear = openssl_decrypt($crypt, "aes128", "secret");
echo $clear."\n";
## Chiffrement asymétrique
* Dit aussi à "clé publique"
* une clé privée
* une clé public
* un message chiffré avec une clé publique sera déchiffrable avec la clé privée associée
* un message chiffré avec une clé privé sera déchiffrable avec la clé publique associée
* plus complexe d'un simple secret à transmettre
* demande plus de ressources
* <i class="fa fa-thumbs-o-down"></i> gourmand en calcul
* <i class="fa fa-thumbs-up"></i> le plus connu
* [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA) since 1977
* Algo à courbes elliptiques
## distribution des clés?
* la clé publique est diffusable n'importe où
* sur une page web
* une carte de visite
* un pièce jointe d'un message en clair
* dans un chat
* sur un serveur de clés
* la clé privée est à protéger à tout prix
* quiconque la possède peut se l'utiliser en se faisant passer pour vous
## Dans la vraie vie
* Alice et Bob se sont chacun générées un couple de clé publique / clé privée
* ils se sont échangés lors clés publiques
* Alice a en sa possession
* la clé publique d'Alice
* la clé privée d'Alice
* la clé publique de Bob
* Bob a en sa possession
* la clé publique de Bob
* la clé privée de Bob
* la clé publique d'Alice
## Chiffrement asymétrique
## Signature
* Alice chiffre un message avec sa clé privée et l'envoi à Bob
* Bob peut déchiffrer le message avec la clé publique d'Alice
* Bob est alors sûr que le message a été émis avec la clé privée d'Alice
* **Autentification de l'origine**
<div style="text-align: center;">
<img src="images/TLS_Auth.gif" width="50%" />
</div>
* Deux solutions pour cette vérification
* Alice envoie le message en double
* une fois en claire
* une fois chiffré avec sa clé privée
* Bob peut comparer la similarité du clair et du message déchiffré
* Alice envoie
* le message chiffré
* un hashé chiffré du message
* Bob peut vérifier
* déchiffre le message avec la clé publique d'Alice
* calcul le hashé du message en clair
* déchiffré le hashé chiffré envoyé à Alice
* comparer la simmilarité du hashé déchiffré et du hashé calculé
* Bob à vérifier non seulement l'authenticité du message mais aussi son **intégrité**
### Les clés de Bob n'ont jamais été utilisée
## Chiffrement asymétrique
## Chiffrement
* Bob veut maintenant écrire à Alice
* qu'il sait être la vraie Alice
* en tout cas celle qui possède la clé privée associée à la clé publique qu'Alice lui a donné
* Bob chiffre le message avec la clé publique d'Alice
* Bob envoie le texte chiffré
* Alice déchiffre le message grâce à sa clé privée.
* garanti la **confidentialité**
<div style="text-align: center;">
<img src="images/Asymmetric_cryptography_step_1.svg.png" width="60%" />
</div>
## Chiffrement
* Bob veut maintenant écrire à Alice
* qu'il sait être la vraie Alice
* en tout cas celle qui possède la cl privée associée à la clé publique qu'Alice lui a donné
<div style="text-align: center;">
<img src="images/Asymmetric_cryptography_step_2.svg.png" width="60%" />
</div>
* Bob chiffre le message avec la clé publique d'Alice
* Bob envoie le texte chiffré
* Alice déchiffre le message grâce à sa clé privée.
* garanti la **confidentialité**
<div style="text-align: center;">
<img src="images/Asymmetric_cryptography_step_1.svg.png" width="60%" />
</div>
## Eve
* a récupéré la clé de Bob mal protégée
* elle peut envoyer des messages chiffrés à Alice
* en se faisant passer pour lui
## Bonne pratique
* toujours signer et chiffrer ses messages
* il faut être certain de l'identité du possesseur de la clé
* chiffrofête (cryptoparty)
* bien protéger sa clié privée
* passphrase
## Certificat
* clé publique
* des informations
* une signature
## Synthèse X.509 vs. PGP
### X.509
* Certificat créé par la CA
* 1 seule signature : celle de la CA
* Chiffre le tuyau (TLS/SSL)
* Confiance centralisée
* Confiance distribuée
* Forêt d’arbres de confiance
### PGP
* Certificat créé par l’utilisateur
* Plusieurs signatures
* Chiffre les messages
* Graph orienté de confiance
X.509 centralise
PGP distribue