-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtutorial-password-hashing-argon2.html
More file actions
66 lines (52 loc) · 8.11 KB
/
tutorial-password-hashing-argon2.html
File metadata and controls
66 lines (52 loc) · 8.11 KB
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tutorial: Argon2 als Passwort-Hashing-Algorithmus - WebSuite Dokumentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<h2><a href="index.html">WebSuite Dokumentation</a></h2><h3>Klassen</h3><ul><li><a href="Cronjob.html">Cronjob</a><ul class='methods'><li data-type='method'><a href="Cronjob.html#registerJob">registerJob</a></li></ul></li><li><a href="CryptoUtil.html">CryptoUtil</a><ul class='methods'><li data-type='method'><a href="CryptoUtil.html#.hash">hash</a></li><li data-type='method'><a href="CryptoUtil.html#.verify">verify</a></li></ul></li><li><a href="Database.html">Database</a><ul class='methods'><li data-type='method'><a href="Database.html#query">query</a></li></ul></li><li><a href="EventHandler.html">EventHandler</a><ul class='methods'><li data-type='method'><a href="EventHandler.html#emit">emit</a></li><li data-type='method'><a href="EventHandler.html#on">on</a></li></ul></li><li><a href="FileUtil.html">FileUtil</a><ul class='methods'><li data-type='method'><a href="FileUtil.html#.fileExists">fileExists</a></li><li data-type='method'><a href="FileUtil.html#.readFile">readFile</a></li><li data-type='method'><a href="FileUtil.html#.saveFile">saveFile</a></li></ul></li><li><a href="Logger.html">Logger</a><ul class='methods'><li data-type='method'><a href="Logger.html#debug">debug</a></li><li data-type='method'><a href="Logger.html#error">error</a></li><li data-type='method'><a href="Logger.html#info">info</a></li><li data-type='method'><a href="Logger.html#warn">warn</a></li></ul></li><li><a href="Mail.html">Mail</a></li><li><a href="Sessions.html">Sessions</a><ul class='methods'><li data-type='method'><a href="Sessions.html#getUserID">getUserID</a></li><li data-type='method'><a href="Sessions.html#getUserSessions">getUserSessions</a></li></ul></li><li><a href="TimeUtil.html">TimeUtil</a><ul class='methods'><li data-type='method'><a href="TimeUtil.html#.currentTime">currentTime</a></li><li data-type='method'><a href="TimeUtil.html#.futureTime">futureTime</a></li><li data-type='method'><a href="TimeUtil.html#.pastTime">pastTime</a></li></ul></li><li><a href="UserHandler.html">UserHandler</a><ul class='methods'><li data-type='method'><a href="UserHandler.html#getUserByEMail">getUserByEMail</a></li><li data-type='method'><a href="UserHandler.html#getUserByUserID">getUserByUserID</a></li><li data-type='method'><a href="UserHandler.html#getUserByUserName">getUserByUserName</a></li></ul></li><li><a href="UserUtil.html">UserUtil</a><ul class='methods'><li data-type='method'><a href="UserUtil.html#.emailAvailable">emailAvailable</a></li><li data-type='method'><a href="UserUtil.html#.emailValid">emailValid</a></li><li data-type='method'><a href="UserUtil.html#.usernameAvailable">usernameAvailable</a></li><li data-type='method'><a href="UserUtil.html#.usernameValid">usernameValid</a></li></ul></li><li><a href="WebSocketHandler.html">WebSocketHandler</a><ul class='methods'><li data-type='method'><a href="WebSocketHandler.html#registerCpEvent">registerCpEvent</a></li><li data-type='method'><a href="WebSocketHandler.html#registerEvent">registerEvent</a></li><li data-type='method'><a href="WebSocketHandler.html#sendToClient">sendToClient</a></li></ul></li><li><a href="WebSuite.html">WebSuite</a><ul class='methods'><li data-type='method'><a href="WebSuite.html#getCrons">getCrons</a></li><li data-type='method'><a href="WebSuite.html#getDatabase">getDatabase</a></li><li data-type='method'><a href="WebSuite.html#getEventHandler">getEventHandler</a></li><li data-type='method'><a href="WebSuite.html#getLogger">getLogger</a></li><li data-type='method'><a href="WebSuite.html#getMail">getMail</a></li><li data-type='method'><a href="WebSuite.html#getSessions">getSessions</a></li><li data-type='method'><a href="WebSuite.html#getUserHandler">getUserHandler</a></li><li data-type='method'><a href="WebSuite.html#getWebSocketHandler">getWebSocketHandler</a></li></ul></li></ul><h3>Tutorials</h3><ul><li><a href="tutorial-getting-started.html">Einführung in die Entwicklung</a></li><li><a href="tutorial-password-hashing-argon2.html">Argon2 als Passwort-Hashing-Algorithmus</a></li></ul>
</nav>
<div id="main">
<section>
<header>
<h2>Argon2 als Passwort-Hashing-Algorithmus</h2>
</header>
<article>
<p>Argon2 ist laut <strong>Password Hashing Competition (PHC)</strong> 2015 als sicherster Algorithmus zum hashen von Passwörtern empfohlen worden.</p>
<blockquote>
<p>Es existierten zunächst zwei Varianten von Argon2: die Variante Argon2i zielt auf Sicherheit gegenüber <a href="https://de.wikipedia.org/wiki/Seitenkanalattacke">Seitenkanalangriffen</a> ab, während die Variante Argon2d vorwiegend vor GPU-<a href="https://de.wikipedia.org/wiki/Brute-Force-Methode">Brute-Force-Angriffen</a> schützen soll. Argon2d wurde für Kryptowährungen und Backend-Server-Authentifizierungen empfohlen, während Argon2i für Frontend-Server-Authentifizierungen und Festplatten-Verschlüsselungen empfohlen wurde. Im Zweifel empfahlen die Entwickler, Argon2i zu verwenden. Beide Varianten verfügen über drei Parameter, mit denen sich die CPU-Rechenzeit, der Speicherverbrauch und die Parallelisierbarkeit einstellen lassen.</p>
<p>Im März 2017 wurde ein Dokument der IETF der Version 1.3 veröffentlicht, das die Variante Argon2id als primäre Variante vorstellt und Argon2i und Argon2d nur noch als zusätzliche Varianten aufführt. Argon2id ist eine hybride Funktion, deren erster Teil resistent gegen cache timing attacks ist, während der zweite Teil einen <a href="https://de.wikipedia.org/wiki/Time-Memory_Tradeoff">Time-Memory Tradeoff</a> verhindern soll.</p>
<h6><em>Quelle: <a href="https://de.wikipedia.org/wiki/Password_Hashing_Competition#Argon2">Wikipedia</a></em></h6></blockquote>
<h3>Sicher, dennoch deaktiviert</h3><p>Auch wenn an Argon2 als Vorteil erstmal die Sicherheit genannt werden kann, so bringt es doch einige Nachteile, die uns dazu gezwungen haben, Argon2 als Hashing-Algorithmus standardmäßig zu deaktivieren.
Der Grund für diese Entscheidung liegt auf der Hand: Die Installation von Argon2 stellt sich als eher umfangreich und schwierig heraus.</p>
<p>Da Argon2 als C++-Binding nativ in die Software eingearbeitet ist (siehe <a href="https://www.npmjs.com/package/argon2">npm</a>) müssen verschiedene Programme und Libraries installiert sein, um diese Klassen zu kompilieren. Da diese nicht mittels npm mitinstalliert werden können (u.A. Visual Studio 2015), muss die Installation von argon2 manuell durchgeführt werden.</p>
<p>Somit wird standardmäßig bcrypt zum Hashen der Passwörter verwendet. Sofern die Nutzung von Argon2 gewünscht ist, so kann dieses mittels der folgenden Anleitung installiert werden.</p>
<p><strong>Information:</strong> Ein Umstieg von bcrypt auf Argon2 ist auch noch später möglich, da mittels bcrypt gehashte und gespeicherte Passwörter auch nach Aktivierung von Argon2 noch verifiziert werden können. Dabei wird der mittels bcrypt gespeicherte Hash dann mit dem neuen durch Argon2 generierte Hash getauscht. Ein Wechsel in die andere Richtung (also von Argon2 zu bcrypt) wird aktuell nicht unterstützt.</p>
<h3>Installation: Linux</h3>
</article>
</section>
</div>
<br class="clear">
<footer>
Seite zuletzt am 18.11.2018 um 00:27 Uhr generiert
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>