Wie funktioniert die Passwortgenerierung?

Die Passwortgenerierung basiert auf mehreren kryptographischen Primitiven, die miteinander kombiniert die eigentliche Ausgabe erzeugen. Bitte beachten Sie die Reihenfolge der Parameter. Im Anschluss wird in Form von Pseudocode der Ablauf der Passwortgenerierung dargestellt.

Primitiven:

arc4(input, password) - Verschlüsselung mit Arc4-drop1024
alphanum(input) - Sonderzeichen entfernen
base64(input) - Base64-Encodierung
check(input) - Prüfen auf Zahlen und Buchstaben
concat(left, right) - Strings aneinanderfügen
hash(input) - Hashing mit SHA-1
hmac(input, password) - HMAC auf Basis von SHA-1
strip(input, length) - Länge des Inputs kürzen

Bei der Generierung werden folgende Annahmen getroffen: Die eingegebene Information wurde in ihre Einzelteile getrennt. checkAlphaNum enthält die Information, ob auf Alphanumerik geprüft werden soll. info[] enthält die dienstabhängige Information, pass[] enthält das Masterpasswort, outLength enthält die geforderte Passwortlänge und specials[] enthält die Liste der geforderten Sonderzeichen. Die Sonderzeichen in specials[] sind anhand ihrer Position nach ISO-8859-1 sortiert und nicht von Dubletten bereinigt.

Ablauf:

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
function generatePass(info[], pass[], checkAlphaNum, outLength, specials[]) {
  if (checkAlphaNum) {
    index = 0;
    do {
      temp = concat(index, info);

      result = singlePass(temp, pass, outLength, specials);
      if (check(result)) {
        break;
      } else {
        result = "";
        index++;
      }
    } while (index < 255);
  } else {
    result = singlePass(info, pass, outLength, specials);
  }

  return result;
}

function singlePass(information[], password[], len, specialChars[]) {
  hmacPassword = hmac(information, password);
  hmacInformation = "";

  tempInput = hash(hmacPassword);
  tempOutput = hmac(tempInput, information);
  hmacInformation = concat(hmacInformation, tempOutput);

  tempInput = tempOutput;
  tempOutput = hmac(tempInput, information);
  hmacInformation = concat(hmacInformation, tempOutput);

  tempInput = tempOutput;
  tempOutput = hmac(tempInput, information);
  hmacInformation = concat(hmacInformation, tempOutput);

  result = arc4(hmacInformation, hmacPassword);
  result = base64(result);
  result = alphanum(result);
  result = strip(result, len);

  specialCharIndex = 0;
  specialCharPos = 0;
  for (index = 0; index < length(hmacPassword); index++) {
    if (index < length(hmacPassword) / 2) {
      specialCharIndex ^= hmacPassword[index];
    } else {
      specialCharPos ^= hmacPassword[index];
    }
  }
  specialCharIndex = (specialCharIndex % length(specialChars));
  specialCharPos = (specialCharPos % (len - 2)) + 1;

  result[specialCharPos] = specialChars[specialCharIndex];

  return result;
}

Inhalt:

  1. Weshalb calc.pw?
  2. Wie funktioniert calc.pw?
  3. Wie muss ich die Information eingeben?
  4. Wie funktioniert die Passwortgenerierung?
  5. Wie wurde calc.pw aufgebaut?
  6. Wie wurde calc.pw programmiert?
  7. Was hat es mit den Tastaturlayouts auf sich?
  8. Wer steckt hinter calc.pw?
  9. Downloads
© 2013-2017 Kenneth Newwood (@weizenspreu)
no-www.org extra-www.org IPv6 ready
Datenbank: 25 Abfragen | Generierung: 0,22750 Sekunden Top