-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.html
379 lines (376 loc) · 17.9 KB
/
index.html
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
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>EntroCalc - Calculateur d'entropie de mot de passe</title>
<!-- Favicon -->
<link rel="icon" type="image/png" href="https://www.acceis.fr/voy_content/uploads/2021/07/32.jpg" sizes="32x32" />
<!-- Icônes d'application -->
<link rel="shortcut icon" href="https://www.acceis.fr/voy_content/uploads/2021/07/48-1.jpg">
<link rel="apple-touch-icon" href="https://www.acceis.fr/voy_content/uploads/2021/07/32.jpg">
<link rel="apple-touch-icon" sizes="72x72" href="https://www.acceis.fr/voy_content/uploads/2021/07/72-1.jpg" />
<link rel="apple-touch-icon" sizes="144x144" href="https://www.acceis.fr/voy_content/uploads/2021/07/144-1.jpg" />
<meta name="msapplication-TileColor" content="#ed1c24" />
<meta name="msapplication-TileImage" content="https://www.acceis.fr/voy_content/uploads/2021/07/144-1.jpg" />
<meta name="theme-color" content="#ed1c24">
<!-- CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css"
integrity="sha256-rTpdO0HXBCNpreAHcu6tB2Ppg515Vo+5GtYSsnNLz+8=" crossorigin="anonymous">
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@creativebulma/[email protected]/dist/bulma-tooltip.min.css"
integrity="sha256-OdzWB7wl1AMkFaqhYBnoQJGUJMDAexXa44rXs/d2n4A=" crossorigin="anonymous">
<!-- JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
<script>
function htmlDecode(str) {
var doc = new DOMParser().parseFromString(str, "text/html");
return doc.documentElement.textContent;
}
function entropie() {
/* Calcul de l'entropie */
var jeu_de_char = '';
var longueur = parseInt($('#longueur').val());
$('button').not('.is-outlined').each(function () {
jeu_de_char += htmlDecode($(this).data('charset'));
console.log(htmlDecode($(this).data('charset')).length);
});
// Supprime les valeurs dupliquées
jeu_de_char = [...new Set(jeu_de_char)].join("");
taille_jeu_de_char = [...jeu_de_char].length;
$('#symboles').text(longueur);
$('#jeu-de-char').text(taille_jeu_de_char);
var entropie = Math.round(Math.log2(taille_jeu_de_char ** longueur));
$('#entropie').text(entropie);
robustesse(entropie);
}
function robustesse(entropie) {
/* Calcul de la force théorique et applique le style correspondant */
var rob = $('#robustesse');
if (entropie < 64) {
rob.text('très faible');
rob.removeClass();
rob.addClass('has-text-weight-bold has-background-dark has-text-light');
} else if (entropie >= 64 && entropie < 80) {
rob.text('faible');
rob.removeClass();
rob.addClass('has-text-weight-bold has-background-danger');
} else if (entropie >= 80 && entropie < 100) {
rob.text('moyen');
rob.removeClass();
rob.addClass('has-text-weight-bold has-background-warning');
} else if (entropie >= 100 && entropie < 128) {
rob.text('fort');
rob.removeClass();
rob.addClass('has-text-weight-bold has-background-success');
} else if (entropie > 128) {
rob.text('fort (longue durée)');
rob.removeClass();
rob.addClass('has-text-weight-bold has-background-success-dark has-text-light');
}
}
/* Gestionnaire d'évènements */
$(document).ready(function () {
/* Lors du clic sur les boutons */
$("button").click(function () {
/* Sélectionner / Désélectionner les jeux de caractère */
if ($(this).hasClass('is-outlined')) {
$(this).removeClass('is-outlined');
} else {
$(this).addClass('is-outlined');
$(this).blur(); // Corrige https://github.com/Acceis/EntroCalc/issues/1
}
entropie();
});
/* Lorsque le champ longueur change de valeur */
$("input").change(function () {
entropie();
});
});
</script>
<style>
input#longueur {
width: 10%;
min-width: 150px;
}
.round-border {
border-radius: 15px;
padding: 10px;
}
</style>
<!-- SEO -->
<meta name="description"
content="EntroCalc est un site statique permettant de calculer l'entropie d'un mot de passe ou d'une politique de mot de passe en fonction de sa longueur et des jeux de caractères possibles et ainsi d'évaluer sa force." />
</head>
<body>
<section class="section">
<div class="container">
<h1 class="title is-1"><span class="has-text-primary">EntroCalc</span> - Calculateur d'entropie de mot de passe
</h1>
<hr class="has-background-primary">
<div class="round-border has-background-light">
<h3 class="title is-3">Longueur (nombre de caractères)</h3>
<input class="input is-primary" type="number" value="8" min="1" id="longueur">
<h3 class="title is-3 mt-4">Jeux de caractères</h3>
<h4 class="title is-4 has-text-grey-dark">Unitaires</h4>
<div class="field is-grouped buttons">
<p class="control">
<button class="jeu-de-char button is-primary" value="26" data-charset="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
data-tooltip="26 symboles de A à Z (code alphabétique majuscule)">
A-Z
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary" value="26" data-charset="abcdefghijklmnopqrstuvwxyz"
data-tooltip="26 symboles de a à z (code alphabétique minuscule)">
a-z
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary" value="10" data-charset="0123456789"
data-tooltip="10 symboles de 0 à 9 (code décimal)">
0-9
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="8" data-charset="#$%&@^`~"
data-tooltip="8 symboles # $ % & @ ^ ` ~ (caractères spéciaux n°1)">
# $ % & @ ^ ` ~
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="4" data-charset=".,:;"
data-tooltip="4 symboles . , : ; (caractères spéciaux n°2)">
. , : ;
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="2" data-charset=""'"
data-tooltip="2 symboles " ' (caractères spéciaux n°3)">
" '
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="5" data-charset="\/|_-"
data-tooltip="5 symboles \ / | _ - (caractères spéciaux n°4)">
\ / | _ -
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="7" data-charset="<>*+!?="
data-tooltip="7 symboles < > * + ! ? = (caractères spéciaux n°5)">
< > * + ! ? =
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="6" data-charset="{[()]}"
data-tooltip="6 symboles { [ ( ) ] } (caractères spéciaux n°6)">
{ [ ( ) ] }
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="5" data-charset="éèùàç"
data-tooltip="5 symboles é è ù à ç (lettres accentuées courantes avec touche sur clavier AZERTY)">
é è ù à ç
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="6" data-charset="âêëîïô"
data-tooltip="6 symboles â ê ë î ï ô (lettres accentuées courantes sans touche sur clavier AZERTY)">
â ê ë î ï ô
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="6" data-charset="°£€¤µ§"
data-tooltip="6 symboles ° £ € ¤ µ § (caractères spéciaux n°7, autres symboles sur clavier AZERTY)">
° £ € ¤ µ §
</button>
</p>
</div>
<h4 class="title is-4 has-text-grey-dark">Composés</h4>
<div class="field is-grouped buttons">
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="2" data-charset="01"
data-tooltip="2 symboles de 0 ou 1 (code binaire)">
0-1
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="16" data-charset="0123456789ABCDEF"
data-tooltip="16 symboles 0 à 9 et A à F (code hexadécimal)">
0-9 + A-F
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="32"
data-charset="#$%&@^`~.,:;"'\/|_-<>*+!?={[()]}"
data-tooltip="32 symboles # $ % & @ ^ ` ~ . , : ; " ' \ / | _ - < > * + ! ? = { [ ( ) ] } (caractères spéciaux)">
caractères spéciaux
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="38"
data-charset="#$%&@^`~.,:;"'\/|_-<>*+!?={[()]}°£€¤µ§"
data-tooltip="38 symboles # $ % & @ ^ ` ~ . , : ; " ' \ / | _ - < > * + ! ? = { [ ( ) ] } ° £ € ¤ µ § (caractères spéciaux étendus)">
caractères spéciaux étendus
</button>
</p>
<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="11" data-charset="éèùàçâêëîïô"
data-tooltip="11 symboles é è ù à ç â ê ë î ï ô (lettres accentuées courantes)">
lettres accentuées
</button>
</p>
<!--<p class="control">
<button class="jeu-de-char button is-primary is-outlined" value="149813"
data-tooltip="149813 symboles (Unicode version 15.1)">
Unicode
</button>
</p>-->
</div>
<h3 class="title is-3">Entropie</h3>
<p class="is-size-4">L'entropie du mot de passe de <span class="has-text-weight-bold has-text-primary" id="symboles">?</span>
symboles sélectionnés aléatoirement parmi un jeu de <span class="has-text-weight-bold has-text-primary"
id="jeu-de-char">?</span> caractères est de <span class="has-text-weight-bold has-text-primary"
id="entropie">?</span> bits.</p>
<p class="is-size-4">Ce mot de passe est théoriquement <span class="has-text-weight-bold has-text-primary"
id="robustesse">?</span>.</p>
</div>
<hr class="has-background-primary">
<div class="columns">
<div class="column is-one-quarter ">
<h3 class="title is-3">Force théorique</h3>
<table class="table">
<thead>
<tr>
<th>Entropie</th>
<th>Force théorique</th>
</tr>
</thead>
<tfoot>
<th>Entropie</th>
<th>Force théorique</th>
</tfoot>
<tbody>
<tr>
<td>1 < 64</td>
<td class="has-background-dark has-text-light">très faible</td>
</tr>
<tr>
<td>64 < 80</td>
<td class="has-background-danger">faible</td>
</tr>
<tr>
<td>80 < 100</td>
<td class="has-background-warning">moyen</td>
</tr>
<tr>
<td>100 < 128</td>
<td class="has-background-success">fort</td>
</tr>
<tr>
<td>≥ 128</td>
<td class="has-background-success-dark has-text-light">fort (longue durée)</td>
</tr>
</tbody>
</table>
</div>
<div class="column is-auto">
<h3 class="title is-3">L'entropie, qu'est-ce que c'est ?</h3>
<div class="content">
<p>Communément, on parle de « force » d’un mot de passe pour désigner sa capacité à résister à une énumération de toutes les combinaisons de mots de passe possibles (attaque par force brute).</p>
<p>La force d’un mot de passe peut être estimée par comparaison avec les techniques cryptographiques, ce qui serait l'équivalent d'une taille de clé.</p>
<p>Cette force, robustesse ou taille de clé est exprimée en termes d'entropie de Shannon, mesurée en bits. Cette unité de mesure est plus pratique que d'exprimer le nombre de combinaisons maximal nécessaire à trouver le mot de passe.</p>
<p>Attention ⚠ : l'entropie ne reflète qu'une force théorique basée sur le nombre de combinaisons possibles. En
effet, un mot de passe peu avoir une complexité théorique élevée, mais être très faible en pratique, par
exemple
<code>Password123*</code>. C'est pourquoi il est important de générer ses mots de passe aléatoirement.
</p>
<p>L'entropie d'un mot de passe est calculée avec la formule suivante : <code>log2(R^L)</code> où <code>R</code>
= le nombre de caractères possibles (longueur du jeu de caractère considéré) et <code>L</code> = la longueur
du mot de passe, soit <code>R^L</code> le nombre de combinaisons possibles.</p>
</div>
</div>
</div>
<h3 class="title is-3">Indications</h3>
<div class="content">
<p class="has-text-weight-bold">Site statique (HTML / JavaScript) permettant de calculer l'entropie d'un mot de passe ou d'une politique de
mot de passe en fonction de sa longueur et des jeux de caractères possibles et ainsi d'évaluer sa force.</p>
<p>Cette page est inspirée du "<a
href="https://web.archive.org/web/20230109120945/https://www.ssi.gouv.fr/administration/precautions-elementaires/calculer-la-force-dun-mot-de-passe/">Calculateur
de force de mot de passe</a>" de l'<a href="https://cyber.gouv.fr/">ANSSI</a> qui a existé entre 2015 et
2023,
supprimé lors d'un changement de site web.</p>
<p>Le code source de la page est disponible sur le dépôt Github suivant : <a
href="https://github.com/Acceis/EntroCalc">Acceis/EntroCalc</a>. Outil dévellopé par <a href="https://pwn.by/noraj/">Alexandre ZANNI alias noraj</a>, Ingénieur en Test d’Intrusion chez <a href="https://www.acceis.fr/">ACCEIS</a>.
</p>
<p>Les personnes désireuses d'approfondir le sujet pourront consulter le guide de l'ANSSI « <a href="https://cyber.gouv.fr/publications/recommandations-relatives-lauthentification-multifacteur-et-aux-mots-de-passe">Recommandations relatives à l'authentification multifacteur et aux mots de passe</a> ».</p>
</div>
<h3 class="title is-3">Exemples</h3>
<table class="table">
<thead>
<tr>
<th>Jeux de caractères</th>
<th>Entropie</th>
<th>Force théorique</th>
<th>Exemple de mot de passe faible en pratique</th>
<th>Exemple de mot de passe aléatoire</th>
</tr>
</thead>
<tfoot>
<th>Jeux de caractères</th>
<th>Entropie</th>
<th>Force théorique</th>
<th>Exemple de mot de passe faible en pratique</th>
<th>Exemple de mot de passe aléatoire</th>
</tfoot>
<tbody>
<tr>
<td>Mot de passe de 8 caractères dans un alphabet de 70 symboles</td>
<td>49</td>
<td class="has-background-dark has-text-light">très faible</td>
<td><code>Azerty0*</code></td>
<td><code>5@&kmnY&</code></td>
</tr>
<tr>
<td>Mot de passe de 10 caractères dans un alphabet de 90 symboles</td>
<td>65</td>
<td class="has-background-danger">faible</td>
<td><code>1Chocolat€</code></td>
<td><code>7w<:]KY&"\</code></td>
</tr>
<tr>
<td>Mot de passe de 12 caractères dans un alphabet de 90 symboles</td>
<td>78</td>
<td class="has-background-danger">faible</td>
<td><code>Inf0rm4t!que</code></td>
<td><code>(;@"x/%Y.3R!</code></td>
</tr>
<tr>
<td>Mot de passe de 16 caractères dans un alphabet de 36 symboles</td>
<td>82</td>
<td class="has-background-warning">moyen</td>
<td><code>ANNIVERSAIRE1994</code></td>
<td><code>HE73HJZMM9P4JY7A</code></td>
</tr>
<tr>
<td>Mot de passe de 16 caractères dans un alphabet de 90 symboles</td>
<td>104</td>
<td class="has-background-success">fort</td>
<td><code>%Soleil22soleiL%</code></td>
<td><code>.4=R*Nj{_!D#5u'g</code></td>
</tr>
<tr>
<td>Mot de passe de 20 caractères dans un alphabet de 90 symboles</td>
<td>130</td>
<td class="has-background-success-dark has-text-light">fort (longue durée)</td>
<td><code>MonEntrepriseDe2024!</code></td>
<td><code>Fr+-!',"MS~3f9m>(RTC</code></td>
</tr>
</tbody>
</table>
</div>
</section>
</body>
</html>