Zum Inhalt springen

bcrypt

aus Wikipedia, der freien Enzyklopädie

bcrypt ist eine kryptologische Hashfunktion, die speziell für das Hashen und Speichern von Passwörtern entwickelt wurde. Die auf dem Blowfish-Algorithmus basierende Funktion wurde von Niels Provos und David Mazières konzipiert und auf der USENIX-Konferenz im Jahre 1999 der Öffentlichkeit präsentiert.

Hintergrund

Um Benutzer einer Anwendung oder Website zu authentifizieren, wird in der Regel eine Kombination von Benutzername oder E-Mail-Adresse und einem Passwort eingesetzt. Die Website muss das Passwort hierzu speichern, allerdings ist das Speichern des Passworts in unverschlüsselter Form ein beachtliches Sicherheitsrisiko. Falls Passwort und Benutzername einem Dritten bekannt werden (etwa, falls die Website gehackt wird), kann dieser sich gegenüber der Website authentifizieren. Da viele Anwender für viele Dienste die gleiche Kombination von Benutzername und Passwort verwenden, kann dies auch weitere Dienste betreffen.

Dieses Problem wird in der Regel mittels kryptographischer Hashfunktionen umgangen. Dabei wird mit einer solchen Funktion ein Hashwert des Passwortes ermittelt und gespeichert. Solche Funktionen zeichnet aus, dass das Original-Passwort nicht wiederhergestellt werden kann. Um den Benutzer zu authentifizieren, wird die Eingabe des Benutzers mit der gleichen Funktion gehasht und die beiden Hashwerte verglichen – wenn die Original-Passwörter gleich sind, sind auch die Hashwerte gleich.

Die Hashfunktionen MD5 und die Secure Hash Algorithm (SHA1 usw.) sind mit dem Ziel entwickelt worden, die Daten möglichst effizient zu hashen, da sie etwa auch zur Verifizierung von großen Dateien verwendet werden. Diese Effizienz erleichtert es aber auf der anderen Seite, die Passwörter mittels Brute-Force-Attacken zu erraten oder sog. Rainbow-Tables zu erstellen, weswegen diese nicht mehr zum Hashen von Passwörtern verwendet werden sollten.

Design

Passwort-Hashing-Verfahren wie PBKDF2, scrypt und auch bcrypt wurden im Gegensatz zu regulären Hashing-Verfahren mit dem Ziel entwickelt, das Hashing möglichst aufwändig zu gestalten. Für normale Anwendungszwecke fällt dieser Aufwand gegenüber anderen Faktoren nicht ins Gewicht, erst wenn die Berechnung häufig hintereinander durchgeführt werden soll (wie z. B. bei einem Brute-Force-Angriff) tritt eine erhebliche Verlangsamung ein.

Die Präsentation von bcrypt führte zu diesem Zweck einige Design-Kriterien für Passwort-basierte Schlüsselableitungsfunktionen ein:

  • Bcrypt verfügt über einen je nach Anwendungszweck einstellbaren Kostenfaktor, der den Arbeitsaufwand der Hashwert-Berechnung definiert. Mit diesem Faktor kann auch der Aufwand erhöht werden, wenn sich in der Zukunft die Leistungsfähigkeit der Computer weiterentwickelt.
  • Die Funktion soll für den Kontext, für den sie konstruiert wurde, optimiert sein. Performance-Vorteile für Hardware-Implementierungen und andere Programmiersprachen sollen gering ausfallen, da solche Vorteile einem Angriff zugutekommen.
    • Eine (moderate) Speicheranforderung begrenzt den Vorteil von Hardware-Optimierungen. Bcrypt fordert 4 KB Arbeitsspeicher an.
    • Software-Implementierungen sollen auf Operationen beruhen, die für CPUs optimiert sind, wie exklusiv-Oder, Addition oder Shift-Operationen.

Die NIST-Empfehlung von 2010 zur PBKDF2<ref>Meltem Sonmez Turan; Elaine B. Barker; William E. Burr; Lidong Chen: Recommendation for Password-Based Key Derivation Part I: Storage Applications. NIST SP – 800-132, 2010. </ref> berücksichtigt nur das erste Kriterium. Aufgenommen und erweitert wurden diese Kriterien jedoch in der Schlüsselableitungsfunktion scrypt und von der Password Hashing Competition.<ref>Password Hashing Competition: <templatestyles src="Webarchiv/styles.css" />{{#if:20130902044128

      | {{#ifeq: 20130902044128 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Call for submissions | {{#invoke:WLink|getEscapedTitle|Call for submissions}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/call.html}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20130902044128}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Call for submissions | {{#invoke:WLink|getEscapedTitle|Call for submissions}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/call.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20130902044128}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Call for submissions | {{#invoke:WLink|getEscapedTitle|Call for submissions}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/call.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Call for submissions | {{#invoke:WLink|getEscapedTitle|Call for submissions}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/call.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Call for submissions | {{#invoke:WLink|getEscapedTitle|Call for submissions}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/call.html}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Call for submissions | {{#invoke:WLink|getEscapedTitle|Call for submissions}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/call.html}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20130902044128|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|https://password-hashing.net/call.html}}
    || {{#if:  || }}
  }}{{#if: Call for submissions
    | {{#if: {{#invoke:WLink|isBracketedLink|Call for submissions}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|https://password-hashing.net/call.html%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|https://password-hashing.net/call.html%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|https://password-hashing.net/call.html }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}. Kriterien für Passwort-basierte Schlüsselableitungsfunktionen.</ref>

Funktionsweise

Bcrypt unterscheidet sich nur in einigen Punkten von der Blockverschlüsselung Blowfish. Die Verlangsamung findet hauptsächlich innerhalb der Passwort-abhängigen Berechnung der Runden-Schlüssel und der S-Boxen statt. Diese werden in mehreren Runden abhängig vom Salt und dem Passwort durch die Funktion EksBlowfishSetup modifiziert. Die Anzahl dieser Runden ist 2 hoch der cost-Parameter. Im Anschluss daran wird mit den so erzeugten Runden-Schlüsseln und S-Boxen der 192-Bit-Wert „OrpheanBeholderScryDoubt“ 64-mal im ECB-Modus verschlüsselt.

Das Resultat der bcrypt-Referenz-Implementierung ist eine 60 Zeichen lange Zeichenabfolge, die an die Erfordernisse des ursprünglichen Anwendungszwecks, der Benutzer-Authentifizierung von OpenBSD, angepasst ist. Mit dem Zeichen „$“ wird die Zeichenfolge eingeleitet und jeweils Versionsnummer, Kostenfaktor und eine Zeichenfolge bestehend aus Salt und Hashwert getrennt. Salt und Hashwert werden mit einer speziellen Base64-Kodierung abgebildet; der eigentliche Hashwert ist in den letzten 31 Zeichen enthalten. Dieses Format wird auch von anderen Implementierungen übernommen.

Sicherheit

Die Länge des Passworts ist bei bcrypt auf 56 Bytes beschränkt, auch wenn die meisten Passwörter diese Grenze nicht überschreiten.

Die Speicheranforderung von 4 KB wird der Anforderung, Hardware-Implementierungen beispielsweise in FPGAs und ASICs zu limitieren, nicht gerecht. Unter Einbeziehung der Energieeffizienz und der Kosten für die Hardware ist bcrypt vor allem durch parallel rechnende FPGAs angreifbar (Wörterbuchangriff oder Brute-Force-Methode). Ein Angriffsszenario mit speziellen ASICs wäre noch aussichtsreicher.<ref>Katja Malvoni, Solar Designer, Josip Knezovic: Are Your Passwords Safe: Energy-Efficient Bcrypt Cracking with Low-Cost Parallel Hardware. Untersuchung über die Performance von Hardware zum Brechen von bcrypt-Hashwerten (pdf). (englisch)</ref><ref>Energy-efficient bcrypt cracking: Takeaways. Präsentation bei openwall. (englisch)</ref><ref>Wiemer, F., Zimmermann, R.: {{#switch:

   |0|=Vorlage:Toter Link/Core{{#if: https://www.emsec.rub.de/media/crypto/veroeffentlichungen/2014/10/22/reconfig14_bcrypt.pdf
       | {{#if: High-speed implementation of bcrypt password search using special-purpose hardware | High-speed implementation of bcrypt password search using special-purpose hardware }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: 2024-07 | , festgestellt im {{#invoke:DateTime|format|2024-07|F Y}} }}. Suche im Internet Archive ){{#if: 2024-07-22 17:46:12 InternetArchiveBot
           | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: 2024-07 | , festgestellt im {{#invoke:DateTime|format|2024-07|F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://www.emsec.rub.de/media/crypto/veroeffentlichungen/2014/10/22/reconfig14_bcrypt.pdf
      | {{#if:{{#invoke:URLutil|isWebURL|https://www.emsec.rub.de/media/crypto/veroeffentlichungen/2014/10/22/reconfig14_bcrypt.pdf}}
          || {{#if:  ||  }} 
        }}
      | {{#if: High-speed implementation of bcrypt password search using special-purpose hardware
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 2024-07
       | {{#if:{{#invoke:DateTime|format|2024-07|F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.emsec.rub.de/media/crypto/veroeffentlichungen/2014/10/22/reconfig14_bcrypt.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: 2024-07 | , festgestellt im {{#invoke:DateTime|format|2024-07|F Y}} }}. (Suche im Internet Archive. )  {{#if: 2024-07-22 17:46:12 InternetArchiveBot
            | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://www.emsec.rub.de/media/crypto/veroeffentlichungen/2014/10/22/reconfig14_bcrypt.pdf
       | {{#if:{{#invoke:URLutil|isWebURL|https://www.emsec.rub.de/media/crypto/veroeffentlichungen/2014/10/22/reconfig14_bcrypt.pdf}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 2024-07
         | {{#if:{{#invoke:DateTime|format|2024-07|F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://www.emsec.rub.de/media/crypto/veroeffentlichungen/2014/10/22/reconfig14_bcrypt.pdf }}. In 2014 International Conference on Reconfigurable Computing and FPGAs (ReCoFig), 2014.</ref>

Dennoch schneidet bcrypt bei Vergleichen in Bezug auf Angriffe mit spezialisierter Hardware oft besser ab als die meisten anderen Passwort-basierten Schlüsselableitungsfunktionen, abgesehen von scrypt.<ref>Colin Percival: Stronger Key Derivation via Sequential Memory-Hard Functions. Präsentation auf dem BSDCan'09. Auf S. 14 werden die Kosten zum Brechen verschiedene Funktionen miteinander verglichen. </ref><ref>European Union Agency for Network and Information Security: <templatestyles src="Webarchiv/styles.css" />{{#if:20151017094652

      | {{#ifeq: 20151017094652 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Algorithms, key size and parameters report – 2014. | {{#invoke:WLink|getEscapedTitle|Algorithms, key size and parameters report – 2014.}} | {{#invoke:Webarchiv|getdomain|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20151017094652}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Algorithms, key size and parameters report – 2014. | {{#invoke:WLink|getEscapedTitle|Algorithms, key size and parameters report – 2014.}} | {{#invoke:Webarchiv|getdomain|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20151017094652}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Algorithms, key size and parameters report – 2014. | {{#invoke:WLink|getEscapedTitle|Algorithms, key size and parameters report – 2014.}} | {{#invoke:Webarchiv|getdomain|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Algorithms, key size and parameters report – 2014. | {{#invoke:WLink|getEscapedTitle|Algorithms, key size and parameters report – 2014.}} | {{#invoke:Webarchiv|getdomain|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Algorithms, key size and parameters report – 2014. | {{#invoke:WLink|getEscapedTitle|Algorithms, key size and parameters report – 2014.}} | {{#invoke:Webarchiv|getdomain|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Algorithms, key size and parameters report – 2014. | {{#invoke:WLink|getEscapedTitle|Algorithms, key size and parameters report – 2014.}} | {{#invoke:Webarchiv|getdomain|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20151017094652|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport}}
    || {{#if:  || }}
  }}{{#if: Algorithms, key size and parameters report – 2014.
    | {{#if: {{#invoke:WLink|isBracketedLink|Algorithms, key size and parameters report – 2014.}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|https://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-size-and-parameters-report-2014/at_download/fullReport }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }} S. 53. (pdf)</ref><ref>https://www.openwall.com/presentations/Passwords12-The-Future-Of-Hashing/ Enthält auf S. 45 und 46 einen Vergleich bezüglich FPGAs/ASICs und GPUs.</ref><ref>Markus Dürmuth and Thorsten Kranz: <templatestyles src="Webarchiv/styles.css" />{{#if:20150626141501
      | {{#ifeq: 20150626141501 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: On Password Guessing with GPUs and FPGAs | {{#invoke:WLink|getEscapedTitle|On Password Guessing with GPUs and FPGAs}} | {{#invoke:Webarchiv|getdomain|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20150626141501}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: On Password Guessing with GPUs and FPGAs | {{#invoke:WLink|getEscapedTitle|On Password Guessing with GPUs and FPGAs}} | {{#invoke:Webarchiv|getdomain|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20150626141501}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: On Password Guessing with GPUs and FPGAs | {{#invoke:WLink|getEscapedTitle|On Password Guessing with GPUs and FPGAs}} | {{#invoke:Webarchiv|getdomain|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: On Password Guessing with GPUs and FPGAs | {{#invoke:WLink|getEscapedTitle|On Password Guessing with GPUs and FPGAs}} | {{#invoke:Webarchiv|getdomain|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: On Password Guessing with GPUs and FPGAs | {{#invoke:WLink|getEscapedTitle|On Password Guessing with GPUs and FPGAs}} | {{#invoke:Webarchiv|getdomain|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: On Password Guessing with GPUs and FPGAs | {{#invoke:WLink|getEscapedTitle|On Password Guessing with GPUs and FPGAs}} | {{#invoke:Webarchiv|getdomain|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20150626141501|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf}}
    || {{#if:  || }}
  }}{{#if: On Password Guessing with GPUs and FPGAs
    | {{#if: {{#invoke:WLink|isBracketedLink|On Password Guessing with GPUs and FPGAs}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|https://www.mobsec.rub.de/media/mobsec/veroeffentlichungen/2015/04/02/duermuth-2014-password-guessing.pdf }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}. 2014 (PDF; 391 kB).</ref>

Weiterentwicklung

Mit Pufferfish von Jeremi Gosney nimmt ein Algorithmus an der Password Hashing Competition teil, der stark an bcrypt angelehnt ist.<ref>Wiki der Password Hashing Competition: <templatestyles src="Webarchiv/styles.css" />{{#if:20140819083228

      | {{#ifeq: 20140819083228 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Pufferfish. | {{#invoke:WLink|getEscapedTitle|Pufferfish.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/pufferfish}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20140819083228}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Pufferfish. | {{#invoke:WLink|getEscapedTitle|Pufferfish.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/pufferfish}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20140819083228}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Pufferfish. | {{#invoke:WLink|getEscapedTitle|Pufferfish.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/pufferfish}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Pufferfish. | {{#invoke:WLink|getEscapedTitle|Pufferfish.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/pufferfish}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Pufferfish. | {{#invoke:WLink|getEscapedTitle|Pufferfish.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/pufferfish}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Pufferfish. | {{#invoke:WLink|getEscapedTitle|Pufferfish.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/pufferfish}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20140819083228|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|https://password-hashing.net/wiki/doku.php/pufferfish}}
    || {{#if:  || }}
  }}{{#if: Pufferfish.
    | {{#if: {{#invoke:WLink|isBracketedLink|Pufferfish.}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|https://password-hashing.net/wiki/doku.php/pufferfish%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|https://password-hashing.net/wiki/doku.php/pufferfish%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/pufferfish }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }} (englisch)</ref> Auch der an scrypt angelehnte Algorithmus yescrypt nimmt den Mechanismus des schnellen, zufälligen Zugriffs, der den Algorithmus GPU-resistent macht, auf.<ref>Wiki der Password Hashing Competition: <templatestyles src="Webarchiv/styles.css" />{{#if:20140819082820
      | {{#ifeq: 20140819082820 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: yescrypt. | {{#invoke:WLink|getEscapedTitle|yescrypt.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/yescrypt}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20140819082820}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: yescrypt. | {{#invoke:WLink|getEscapedTitle|yescrypt.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/yescrypt}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20140819082820}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: yescrypt. | {{#invoke:WLink|getEscapedTitle|yescrypt.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/yescrypt}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: yescrypt. | {{#invoke:WLink|getEscapedTitle|yescrypt.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/yescrypt}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: yescrypt. | {{#invoke:WLink|getEscapedTitle|yescrypt.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/yescrypt}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: yescrypt. | {{#invoke:WLink|getEscapedTitle|yescrypt.}} | {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/yescrypt}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20140819082820|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|https://password-hashing.net/wiki/doku.php/yescrypt}}
    || {{#if:  || }}
  }}{{#if: yescrypt.
    | {{#if: {{#invoke:WLink|isBracketedLink|yescrypt.}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|https://password-hashing.net/wiki/doku.php/yescrypt%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|https://password-hashing.net/wiki/doku.php/yescrypt%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|https://password-hashing.net/wiki/doku.php/yescrypt }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }} (englisch)</ref>

Weblinks

Einzelnachweise

<references />