crypto.md 9.98 KB
Newer Older
mazenovi's avatar
mazenovi committed
1
2
3
4
5
6
7
8
9
10
11
12
13
# 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


mazenovi's avatar
mazenovi committed
14
## Opérations cryptographiques
mazenovi's avatar
mazenovi committed
15

mazenovi's avatar
mazenovi committed
16
* Agit sur une donnée en claire
mazenovi's avatar
mazenovi committed
17
18
19
20
21
  * une chaîne caractère
  * un fichier texte
  * un fichier multimédia
  * une archive

mazenovi's avatar
mazenovi committed
22
* Appelé aussi le **clair**
mazenovi's avatar
mazenovi committed
23

mazenovi's avatar
mazenovi committed
24
* Le but de la protéger
mazenovi's avatar
mazenovi committed
25
26
27
28


## Hacher (to hash)

mazenovi's avatar
mazenovi committed
29
30
31
* Hash / Empreinte / Condensat
* Taille fixe (quelques octets)
* Chaque **clair** a un hash unique
mazenovi's avatar
mazenovi committed
32
  * collision = cassé
mazenovi's avatar
mazenovi committed
33
34
* Pas d’opération inverse
* On parle de hashage
mazenovi's avatar
mazenovi committed
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52


## 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

mazenovi's avatar
mazenovi committed
53
* [Force brute](https://fr.wikipedia.org/wiki/Attaque_par_force_brute)
mazenovi's avatar
mazenovi committed
54
  * testé toutes les possibilités (online / offline)
mazenovi's avatar
mazenovi committed
55
* [Par dictionnaire](https://fr.wikipedia.org/wiki/Attaque_par_dictionnaire)
mazenovi's avatar
mazenovi committed
56
57
58
59
60
61
62
63
64
65
66
  * 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)

mazenovi's avatar
mazenovi committed
67
* Hasher en concaténant la donnée en claire avec une chaîne de caractères pseudo-aléatoires
mazenovi's avatar
mazenovi committed
68

mazenovi's avatar
mazenovi committed
69
* Stocker le sel au niveau de l'enregistrement de l'utilisateur
mazenovi's avatar
mazenovi committed
70
71
72
  * évite les attaques par tables arc-en-ciel
  * n'évite pas la force brute / ni les attaques par dictionnaire

mazenovi's avatar
mazenovi committed
73
* On parle de salaison
mazenovi's avatar
mazenovi committed
74
75
76
77
78
79


## Saler (to salt)

<pre><code class="hljs bash" style="font-size: 14px">sha256("hello"."bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab</code></pre>

mazenovi's avatar
mazenovi committed
80
* Utilisé notamment pour le stockage des mots de passe en base de données
mazenovi's avatar
mazenovi committed
81
82
83
84
85
  * [Salted Password Hashing - Doing it Right](https://crackstation.net/hashing-security.htm)


## Coder (to encode)

mazenovi's avatar
mazenovi committed
86
* Changer la manière de stocker la donnée en clair
mazenovi's avatar
mazenovi committed
87
88
89
90
91
  * 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

mazenovi's avatar
mazenovi committed
92
  <pre><code class="hljs bash" style="font-size: 25px">base64_encode("all in clear") = YWxsIGluIGNsZWFy</code></pre>
mazenovi's avatar
mazenovi committed
93

mazenovi's avatar
mazenovi committed
94
  * opération inverse décoder (to decode)
mazenovi's avatar
mazenovi committed
95

mazenovi's avatar
mazenovi committed
96
  <pre><code class="hljs bash" style="font-size: 25px">base64_decode("YWxsIGluIGNsZWFy") = all in clear</code></pre>
mazenovi's avatar
mazenovi committed
97
98
99
100


## Chiffrer (to encrypt)

mazenovi's avatar
mazenovi committed
101
* Rendre la compréhension de la donnée en claire impossible à quiconque ne possède pas le secret (la **clé** pour la lire)
mazenovi's avatar
mazenovi committed
102
103
  * on parle de chiffrement

mazenovi's avatar
mazenovi committed
104
  <pre><code class="hljs bash" style="font-size: 16px">openssl_encrypt("all in clear","aes128","secret") = d2xhqzZbLFzoCP6vNfdVOg==</code></pre>
mazenovi's avatar
mazenovi committed
105

mazenovi's avatar
mazenovi committed
106
  * opération inverse déchiffrer (to decrypt)
mazenovi's avatar
mazenovi committed
107

mazenovi's avatar
mazenovi committed
108
  <pre><code class="hljs bash" style="font-size: 16px">openssl_decrypt("d2xhqzZbLFzoCP6vNfdVOg==","aes128","secret") = all in clear</code></pre>
mazenovi's avatar
mazenovi committed
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

* 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é**
mazenovi's avatar
mazenovi committed
137
138
    * le secret permet de chiffrer **et** de déchiffrer
    * plus le secret est **long** plus il est difficile de le deviner
mazenovi's avatar
mazenovi committed
139
140
141
142
143
144
145
146
147
148
149
    * <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

mazenovi's avatar
mazenovi committed
150
![Bâton de plutarque](images/crypto/scytale.png)
mazenovi's avatar
mazenovi committed
151
152


mazenovi's avatar
mazenovi committed
153
154
## Chiffrement symétrique
### communications 2 à 2 pour n
mazenovi's avatar
mazenovi committed
155

mazenovi's avatar
mazenovi committed
156
* Une clé par destinataire
mazenovi's avatar
mazenovi committed
157
158
159
  * pour n destiantaires
    * n * (n-1) / 2 clés
    * démultiplication des clés
mazenovi's avatar
mazenovi committed
160
161


mazenovi's avatar
mazenovi committed
162
## Vecteur d'intialisation
mazenovi's avatar
mazenovi committed
163

mazenovi's avatar
mazenovi committed
164
165
* Avoir la garantie que les chiffrés sont uniques
* Se stocke en clair
mazenovi's avatar
mazenovi committed
166
  * n'est utilisable qu'avec le secret
mazenovi's avatar
mazenovi committed
167
* Deux messages identiques chiffrés avec de **vi** différents auront des chiffrés différents
mazenovi's avatar
mazenovi committed
168

mazenovi's avatar
mazenovi committed
169
170
171
172
173
```
$crypt = openssl_encrypt("all in clear", "aes128", "secret");
```
<pre><code class="hljs bash"" style="font-size: 16px">PHP Warning:  openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in /data/htdocs/blog.limos.fr/tmp.php on line 4
Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in /data/htdocs/blog.limos.fr/tmp.php on line 4</code></pre>
mazenovi's avatar
mazenovi committed
174
175


mazenovi's avatar
mazenovi committed
176
177
178
## Vecteur d'intialisation

### Right way
mazenovi's avatar
mazenovi committed
179

mazenovi's avatar
mazenovi committed
180
181
182
183
184
185
186
<pre><code class="hljs bash"" style="font-size: 18px">$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes128"));          
$crypt = openssl_encrypt("all in clear", "aes128", "secret", true, $iv);
$clear = openssl_decrypt($crypt, "aes128", "secret", true , $iv);               
</code></pre>

note:
- https://stackoverflow.com/questions/11821195/use-of-initialization-vector-in-openssl-encrypt
mazenovi's avatar
mazenovi committed
187
188
189
190


## Chiffrement asymétrique

mazenovi's avatar
mazenovi committed
191
* Dit aussi à **clé publique**
mazenovi's avatar
mazenovi committed
192
  * une clé privée
mazenovi's avatar
mazenovi committed
193
  * une clé publique
mazenovi's avatar
mazenovi committed
194

mazenovi's avatar
mazenovi committed
195
196
* 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
mazenovi's avatar
mazenovi committed
197

mazenovi's avatar
mazenovi committed
198
199
200

## Chiffrement asymétrique

mazenovi's avatar
mazenovi committed
201
* La clé publique doit être connue de l'expéditeur
mazenovi's avatar
mazenovi committed
202
203
  * plus complexe d'un simple secret à transmettre

mazenovi's avatar
mazenovi committed
204
* Demande plus de ressources
mazenovi's avatar
mazenovi committed
205

mazenovi's avatar
mazenovi committed
206
* <i class="fa fa-thumbs-o-down"></i> Gourmand en calcul
mazenovi's avatar
mazenovi committed
207

mazenovi's avatar
mazenovi committed
208
* <i class="fa fa-thumbs-up"></i> Le plus connu
mazenovi's avatar
mazenovi committed
209
210
211
212
213
214
    * [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA) since 1977
    * Algo à courbes elliptiques


## distribution des clés?

mazenovi's avatar
mazenovi committed
215
* la **clé publique** est diffusable n'importe où
mazenovi's avatar
mazenovi committed
216
  * sur un serveur de clés
mazenovi's avatar
mazenovi committed
217
  * sur une page web
mazenovi's avatar
mazenovi committed
218
  * via une carte de visite
mazenovi's avatar
mazenovi committed
219
220
  * via une pièce jointe
  * via un chat
mazenovi's avatar
mazenovi committed
221

mazenovi's avatar
mazenovi committed
222
* la **clé privée** est à protéger à tout prix
mazenovi's avatar
mazenovi committed
223
  * quiconque la possède peut l'utiliser en se faisant passer pour son propriétaire légitime
mazenovi's avatar
mazenovi committed
224
225


mazenovi's avatar
mazenovi committed
226
#### En pratique
mazenovi's avatar
mazenovi committed
227

Vincent Mazenod's avatar
Vincent Mazenod committed
228
* Alice et Bob se sont chacun générés un couple **clé publique** / **clé privée**
mazenovi's avatar
mazenovi committed
229
* Ils se sont **échangés** leur **clé publique** respective
mazenovi's avatar
mazenovi committed
230
231

* Alice a en sa possession
mazenovi's avatar
mazenovi committed
232
  * sa **clé publique**, sa **clé privée** et la **clé publique** de Bob
mazenovi's avatar
mazenovi committed
233
234

* Bob a en sa possession
mazenovi's avatar
mazenovi committed
235
  * sa **clé publique**, sa **clé privée** et la **clé publique** d'Alice
mazenovi's avatar
mazenovi committed
236
237
238
239
240
241
242
243
244
245


## 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**


mazenovi's avatar
mazenovi committed
246
#### Signature en pratique
mazenovi's avatar
mazenovi committed
247

mazenovi's avatar
mazenovi committed
248
249
250
* Alice envoie
  * le message chiffré
  * un hashé chiffré du message
mazenovi's avatar
mazenovi committed
251

mazenovi's avatar
mazenovi committed
252
253
254
255
256
* Bob peut vérifier en
  * déchiffrant le message avec la clé publique d'Alice
  * calculant le hashé du message en clair
  * déchiffrant le hashé chiffré envoyé par Alice
  * comparant le hashé calculé et le hashé déchiffré
mazenovi's avatar
mazenovi committed
257
258


mazenovi's avatar
mazenovi committed
259
## Signature en pratique
mazenovi's avatar
mazenovi committed
260

mazenovi's avatar
mazenovi committed
261
262
263
264
265
266
267
268
269
270
271
* Bob a pu vérifier
  * la clé à l'origine du message **autentification de l'origine**
  * l'**intégrité** du message

**autentification de l'origine** + **intégrité**

=

**non répudiation**

#### Les clés de Bob n'ont jamais été utilisées
mazenovi's avatar
mazenovi committed
272
273
274
275
276
277


## Chiffrement

* Bob veut maintenant écrire à Alice
  * qu'il sait être la vraie Alice
mazenovi's avatar
mazenovi committed
278
    * en tout cas celle qui possède la clé privée associée à la clé publique qu'Alice lui a donné
mazenovi's avatar
mazenovi committed
279
280
281
282
* 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.

mazenovi's avatar
mazenovi committed
283
* Garantie de la **confidentialité**
mazenovi's avatar
mazenovi committed
284
285


mazenovi's avatar
mazenovi committed
286
## Enjeu de la clé privée
mazenovi's avatar
mazenovi committed
287

mazenovi's avatar
mazenovi committed
288
* Eve a récupéré la **clé privée** de Bob (mal protégée)
mazenovi's avatar
mazenovi committed
289
  * elle peut envoyer des messages chiffrés à Alice, et à tout ceux qui font confiance à la clé publique de Bob
mazenovi's avatar
mazenovi committed
290
    * en se faisant passer pour Bob
mazenovi's avatar
mazenovi committed
291
  * elle peut lire tous les messages chiffrés avec la **clé publique** de Bob (à destination de Bob)
mazenovi's avatar
mazenovi committed
292
293
294
295


## Bonne pratique

mazenovi's avatar
mazenovi committed
296
297
* Toujours signer et chiffrer ses messages
* Toujours être certain de l'identité du possesseur de la clé
mazenovi's avatar
mazenovi committed
298
  * échange de clé IRL
mazenovi's avatar
mazenovi committed
299
* Bien protéger sa clé privée
mazenovi's avatar
mazenovi committed
300
  * stockée en sécurité
mazenovi's avatar
mazenovi committed
301
    * dans un keepass?
Vincent Mazenod's avatar
Vincent Mazenod committed
302
303
    * dans un coffre?
    * sur papier?
mazenovi's avatar
mazenovi committed
304
  * protégée par un mot de passe fort
mazenovi's avatar
mazenovi committed
305
306
307
308


## Certificat

mazenovi's avatar
mazenovi committed
309
310
* Clé publique
* Attributs
mazenovi's avatar
mazenovi committed
311
312
313
314
315
  * nom
  * mail
  * date d'expiration
  * algorithmes
  * ...
mazenovi's avatar
mazenovi committed
316
* Au moins une signature
mazenovi's avatar
mazenovi committed
317
318
319
320


## Trousseau

mazenovi's avatar
mazenovi committed
321
* Ensemble de clés
mazenovi's avatar
mazenovi committed
322
  * couples clé publique / clé privée
mazenovi's avatar
mazenovi committed
323
    * différentes fonctions
mazenovi's avatar
mazenovi committed
324
325
326
327
328
329
      * signature
      * chiffrement
      * création de certificat
      * authentification
  * clés publiques
    * importés (contacts)