Kennwortverschlüsselung (Salt): Unterschied zwischen den Versionen

Aus MoodleDocs
Wechseln zu:Navigation, Suche
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{Sicherheit}}{{ÜberarbeitenNeu}}
{{Sicherheit}}{{ÜberarbeitenNeu}}
==Was bedeutet Kennwortverschlüsselung?==
==Was bedeutet Passwort-Salting und Passwort-Peppering?==


Kennwörter werden in Moodle in verschlüsselter Form als [http://de.wikipedia.org/wiki/Message-Digest_Algorithm_5 MD5 Hash]' gespeichert.
[http://de.wikipedia.org/wiki/Salt_(Kryptologie) Passwort-Salting] is a way of making password hashing more secure by adding a random string of characters to passwords before their hash is calculated, which makes them harder to reverse.


[http://de.wikipedia.org/wiki/Salt_%28Kryptologie%29 Salt] ist eine Möglichkeit, Kennwörter noch sicherer zu machen, indem man zu einem Kennwort eine zufällige Zeichenkette hinzufügt, bevor der MD5 Hash berechnet wird. Je länger diese zufällige Zeichenkette ist, desto schwieriger wird ein Entschlüsseln via Hashlookup, desto sicherer sind die Kennwörter.
[https://en.wikipedia.org/wiki/Pepper_%28cryptography%29 Password peppering] is a secret added to a password at hashing time to increase the security of the hashed password. This value differs from a salt in that it is not stored with the password hash, instead the pepper is kept separate in the config.php file. It must also be kept secret and be be hard to guess. Keeping the value separate to the salt and hashed password, meaning if password hashes are compromised, it is much harder to reverse engineer the plain text passwords.


==Wie funktioniert die Kennwortverschlüsselung in Moodle?==
==How does Moodle use password salting?==
Vor Moodle 2.5 gab es einen Salt, der systemweit Gültigkeit hatte und mit dem alle Nutzerkennwörter verschlüsselt wurden. Ab Moodle 2.5 generiert Moodle automatisch einen Salt für jede/n einzelne/n Nutzer/in und verschlüsselt damit dessen/deren Kennwort. Das ist sicherer als das bisherige Verfahren. Das bedeutet, dass für '''Neuinstallationen''' von Moodle 2.5  die Salt-Variable in der Moodle-Konfigurationsdatei nicht mehr benötigt wird.


==Kennwortverschlüsselung aktivieren==
Prior to Moodle 2.5 there was a single site-wide salt which was used when hashing every user's password. From Moodle 2.5 onwards Moodle automatically generates and adds a different salt for each individual user. This is more secure and means that a site-wide configuration variable for the salt is no longer required for '''new''' installations of 2.5 or greater.


Um die Kennwortverschlüsselung zu aktivieren, müssen Sie folgende Zeile in der [[Moodle-Konfigurationsdatei]] ''config.php'' hinzufügen:
==How does Moodle use password peppering?==


$CFG->passwordsaltmain = 'eine zufällige, möglichst lange Zeichenkette';
{{New features}}Moodle 4.3 introduces password peppers that are configured and managed via the config.php file. A pepper needs to have at least 112 bits of entropy, so the pepper itself cannot be easily brute forced if you have a known password + hash combo.


Diese zufällige Zeichenkette sollte ein Mix aus Buchstaben, Ziffern und Sonderzeichen sein. Sie können den [http://dev.moodle.org/gensalt.php Moodle Salt Generator] verwenden, um eine hinreichende lange Zeichenkette zu generieren. Wir empfehlen eine Länge von mindestens 40 Zeichen.
Once a pepper is set, existing passwords will be updated on next user login. To set peppers for your site, the following setting must be set in config.php:


''Achtung'': Aus Sicherheitsgründen kann man die Kennwortverschlüsselung ausschließlich in der Moodle-Konfigurationsdatei aktivieren und nicht direkt über Moodle im Browser.
<pre>
      $CFG->passwordpeppers = [
          1 => '#GV]NLie|x$H9[$rW%94bXZvJHa%z'
    ];
</pre>


==Den Salt ändern==
The 'passwordpeppers' array must be numerically indexed with a positive number.  New peppers can be added by adding a new element to the array with a higher numerical index.  Upon next login a users password will be rehashed with the new pepper:


Wenn Sie aus irgend einem Grund den Salt ändern wollen, dann muss der alte Salt in der [[Moodle-Konfigurationsdatei]] aufgehoben und der neue Salt zusätzlich hinzugefügt werden.
<pre>
      $CFG->passwordpeppers = [
          1 => '#GV]NLie|x$H9[$rW%94bXZvJHa%z',
          2 => '#GV]NLie|x$H9[$rW%94bXZvJHa%$'
      ];
</pre>


<code>passwordsaltmain</code> muss geändert werden in <code>passwordsaltalt1</code> ('''Achtung''': genau diese Schreibweise verwenden!) und der neue Wert hinzugefügt werden:
Peppers can not be removed in bulk without resetting all user passwords. However, peppers can be progressively removed by setting the latest pepper to an empty string:


$CFG->passwordsaltalt1 = 'alte zufällige, möglichst lange Zeichenkette';
<pre>
$CFG->passwordsaltmain = 'neue zufällige, möglichst lange Zeichenkette';
      $CFG->passwordpeppers = [
          1 => '#GV]NLie|x$H9[$rW%94bXZvJHa%z',
          2 => '#GV]NLie|x$H9[$rW%94bXZvJHa%$',
          3 => ''
      ];
</pre>


Wenn Sie den Salt ein zweites Mal ändern wollen, müssen alle alten Salts aufgehoben werden (zumindest so lange, bis jeder Nutzer sich mindestens einmal angemeldet hat). Verwenden Sie dazu <code>$CFG->passwordsaltalt2, $CFG->passwordsaltalt3, etc.</code> um bis zu 20 alte Salts zu speichern.
==Backwards compatibility for site upgrades==


'''Achtung: Wenn Sie den Salt ändern, ohne den alten Wert in der Datei ''config.php'' zu speichern, können Sie sich nicht mehr in Ihrer Moodle-Installation anmelden!'''
'''Important!''' If you are upgrading a site from 2.4 or below and you are already using a site-wide salt in your configuration file, '''you need to keep using it to ensure your existing users can still log in'''.


==Kennwortverschlüsselung deaktivieren==
Each time a user logs in their password hash will be converted to the new scheme, but it may take a long time before all your users have logged in. Alternatively, if you would like to force all your users to use the new scheme you could force reset all passwords using [[Bulk_user_actions|Bulk user actions]].


'''Achtung: Davon wird dringend abgeraten! Wenn Sie die Kennwortverschlüsselung einmal aktiviert haben, sollten Sie diese nicht wieder deaktivieren.'''
For more details about the old site-wide salt configuration, see the [https://docs.moodle.org/24/en/Password_salting Moodle 2.4 Password Salt documentation].


Um die Kennwortverschlüsselung wieder zu deaktiveren, müssen Sie den Wert von <code>$CFG->passwordsaltmain</code> löschen, auskommentieren oder auf die leere Zeichenkette setzen.  
==Sites running PHP version below 5.3.7==


// Beispiel: auskommentieren
The new password hashing mechanism relies on bcrypt support from PHP which is only normally available in PHP version is 5.3.7 or greater (see note below). If you are using a version of PHP which doesn't properly support bcrypt, Moodle will fall back to the old password hashing scheme, so we recommend that you continue to use a site-wide salt until you are able to upgrade PHP.
/*
$CFG->passwordsaltmain = <nowiki>''</nowiki>;
*/


// Beispiel: auf leere Zeichenkette setzen
Note: While an important fix to PHP's hashing algorithm was added in 5.3.7, some distributions of Linux have backported the fix to bcrypt to earlier versions of PHP. This means that some earlier versions of PHP may still work. To confirm if your PHP supports the new hashing scheme you can use [https://github.com/ircmaxell/password_compat/blob/master/version-test.php this test].
$CFG->passwordsaltmain = <nowiki>''</nowiki>;
 
Zusätzlich müssen Sie den alten Salt in einen <code>alt</code>-Wert verschieben (analog zur Saltänderung, siehe oben):
 
$CFG->passwordsaltalt1 = 'alte zufällige, möglichst lange Zeichenkette';
$CFG->passwordsaltmain = <nowiki>''</nowiki>;
 
==Nutzer aus einer anderen Moodle-Installation importieren==
 
Wenn Sie Nutzer aus einer anderen Moodle-Installation importieren, und diese Installation nutzt die Kennwortverschlüsselung, dann müssen Sie den Salt der anderen Moodle-Installation zur Konfigurationsdatei ''config.php'' Ihrer Moodle-Installation hinzufügen. Sie können bis zu 20 Salts anderer Moodle-Installation hinzufügen.
 
$CFG->passwordsaltalt1, $CFG->passwordsaltalt2, ... $CFG->passwordsaltalt20
 
==Wie funktioniert die Kennwortverschlüsselung?==
 
Wenn Moodle ein Kennwort prüft, wird im Code nach <code>CFG->passwordsaltmain</code> gesucht. Wenn diese Variable gesetzt ist, hängt der Code das Kennwort an den Salt an und berechnet anschließend den MD5 Hash.
 
Wenn der MD5 Hash vom Kennwort ohne Salt validiert werden kann, dann wird angenommen, dass der Salt erstmalig gesetzt wurde, seit der Nutzer sich das letzte Mal angemeldet hat. Das Kennwort des Nutzers wird unter Verwendung des Salts aktualisiert. ''Das Kennwort wird also beim ersten Login des Nutzers nach Setzen des Salts in der Datei ''config.php'' verschlüsselt.''' 
 
Wenn der MD5 Hash vom Kennwort weder mit noch ohne Salt validiert werden kann, dann sucht der Code nach bis zu 20 alternativen Salts. Diese müssen wie oben beschrieben in der Datei ''config.php'' gespeichert werden.
 
Wenn sich ein Nutzer anmeldet, dessen Kennwort mit einem alten Salt verschlüsselt ist, dann funktioniert die Validisierung mit dem neuen Salt nicht. In diesem Fall werden die alternativen Salts nacheinander abgearbeitet und geprüft. Sobald ein Salt erreicht ist, bei dem die Validierung erfolgreich ist, stoppt die Abarbeitung, und das Kennwort wird unter Verwendung dieses zuletzt verwendeten Salts aktualisiert.
 
==Siehe auch==
*[[Sicherheitsregeln der Website#Kennwortregeln|Kennwortregeln]]


[[Category:Sicherheit]]
[[Category:Sicherheit]]
[[en:Password salting]]
[[en:Password salting]]

Version vom 21. Dezember 2023, 20:24 Uhr

Baustelle.png Diese Seite muss überarbeitet werden, weil sie neue Funktionalitäten enthält. Greif zu!
Wenn du dich um diesen Artikel kümmern willst, dann kennzeichne das, indem du die Vorlage {{ÜberarbeitenNeu}} durch die Vorlage {{ÜberarbeitenVergeben}} ersetzt.
Wenn du mit deiner Arbeit fertig bist, dann entferne die Vorlage aus dem Artikel.
Danke für deine Mitarbeit!


Was bedeutet Passwort-Salting und Passwort-Peppering?

Passwort-Salting is a way of making password hashing more secure by adding a random string of characters to passwords before their hash is calculated, which makes them harder to reverse.

Password peppering is a secret added to a password at hashing time to increase the security of the hashed password. This value differs from a salt in that it is not stored with the password hash, instead the pepper is kept separate in the config.php file. It must also be kept secret and be be hard to guess. Keeping the value separate to the salt and hashed password, meaning if password hashes are compromised, it is much harder to reverse engineer the plain text passwords.

How does Moodle use password salting?

Prior to Moodle 2.5 there was a single site-wide salt which was used when hashing every user's password. From Moodle 2.5 onwards Moodle automatically generates and adds a different salt for each individual user. This is more secure and means that a site-wide configuration variable for the salt is no longer required for new installations of 2.5 or greater.

How does Moodle use password peppering?

Vorlage:New featuresMoodle 4.3 introduces password peppers that are configured and managed via the config.php file. A pepper needs to have at least 112 bits of entropy, so the pepper itself cannot be easily brute forced if you have a known password + hash combo.

Once a pepper is set, existing passwords will be updated on next user login. To set peppers for your site, the following setting must be set in config.php:

      $CFG->passwordpeppers = [
          1 => '#GV]NLie|x$H9[$rW%94bXZvJHa%z'
     ];

The 'passwordpeppers' array must be numerically indexed with a positive number. New peppers can be added by adding a new element to the array with a higher numerical index. Upon next login a users password will be rehashed with the new pepper:

      $CFG->passwordpeppers = [
          1 => '#GV]NLie|x$H9[$rW%94bXZvJHa%z',
          2 => '#GV]NLie|x$H9[$rW%94bXZvJHa%$'
      ];
Peppers can not be removed in bulk without resetting all user passwords. However, peppers can be progressively removed by setting the latest pepper to an empty string:
      $CFG->passwordpeppers = [
          1 => '#GV]NLie|x$H9[$rW%94bXZvJHa%z',
          2 => '#GV]NLie|x$H9[$rW%94bXZvJHa%$',
          3 => ''
      ];

Backwards compatibility for site upgrades

Important! If you are upgrading a site from 2.4 or below and you are already using a site-wide salt in your configuration file, you need to keep using it to ensure your existing users can still log in.

Each time a user logs in their password hash will be converted to the new scheme, but it may take a long time before all your users have logged in. Alternatively, if you would like to force all your users to use the new scheme you could force reset all passwords using Bulk user actions.

For more details about the old site-wide salt configuration, see the Moodle 2.4 Password Salt documentation.

Sites running PHP version below 5.3.7

The new password hashing mechanism relies on bcrypt support from PHP which is only normally available in PHP version is 5.3.7 or greater (see note below). If you are using a version of PHP which doesn't properly support bcrypt, Moodle will fall back to the old password hashing scheme, so we recommend that you continue to use a site-wide salt until you are able to upgrade PHP.

Note: While an important fix to PHP's hashing algorithm was added in 5.3.7, some distributions of Linux have backported the fix to bcrypt to earlier versions of PHP. This means that some earlier versions of PHP may still work. To confirm if your PHP supports the new hashing scheme you can use this test.