Pegasus - Browser Wallet

17. Mai'20

 

Pegasus ist eine von dem Entwickler Alessandro Manfredi vollständig in Javascript geschriebene Browser-Wallet, die derzeit als Mozilla Firefox und Google Chrome-Erweiterung implementiert wird. Dadurch ist es möglich ohne einen IOTA-Node auszuführen zu müssen über den Browser mit dem Tangle zu interagieren. Die Wallet ist vergleichbar mit der Metamask-Wallet von Ethereum.

Die Wallet basiert hauptsächlich auf den Bibliotheken iota.js und mam.client.js, die nicht nur von der Wallet verwendet werden, sondern auch in das Inhaltsskript jeder Webseite eingefügt werden, die der Benutzer besucht (ohne Verwendung des Seeds). Mit diesem Mechanismus können Entwickler Dapps entwickeln, ohne sich mit dem Problem der Seed-Sicherheit beschäftigen zu müssen. Eine weitere kürzlich hinzugefügte Funktion besteht darin, dass der Benutzer Stream-Kanäle erstellen kann, dies wird zukünftig den Anwendungsbereich enorm erweitern.

 

Hinweis: Bitte diese Art von Wallet nicht zur Sicherung von großen Guthaben nutzen, diese Wallet sollte genauso genutzt werden wie ihre echte Geldbörse, mit der sie tägliche Einkäufe tätigen, also nur mit kleineren Beträgen. Große Guthaben bitte mit einer geeigneten Hardware Wallet absichern.

 

 

Wie wird das Anmeldekennwort und der Seed gehandhabt?

 

Um das Herausfinden des Login-Passworts zu erschweren, muss das Passwort die folgenden Anforderungen erfüllen:

  • mindestens 8 Zeichen enthalten.
  • mindestens 1 Großbuchstabe enthalten
  • mindestens 1 Kleinbuchstabe enthalten.
  • mindestens 1 Symbol enthalten
  • mindestens 1 Ziffer enthalten

Von diesem erstellten Passwort wird nur sein Hash im lokalen Speicher gespeichert.

 

Das Wichtigste für eine Wallet ist die sichere Aufbewahrung der privaten Schlüssel (Seed), im Folgenden wird erklärt wie dies bei Pegasus gehandhabt wird. Mit dem vom Benutzer generierten Anmeldekennwort werden alle innerhalb von Pegasus erzeugten Seeds verschlüsselt, um eine Authentifizierung bei gleichzeitiger Wahrung der Sicherheit zu ermöglichen, wird nur der Hash dieses Passworts im Speicher des Browsers gespeichert (ein Speicher für Browser-Erweiterungen, der für normale Webseiten nicht zugänglich ist). Der verwendete Hash-Algorithmus ist argon2id.

Argon2 ist eine Passwort-Hashing-Funktion, die den Stand der Technik bei der Entwicklung von Memory Hard Function (MHF) zusammenfasst und zum Hashing von Passwörtern für die Speicherung von Berechtigungsnachweisen, die Schlüsselableitung oder andere Anwendungen verwendet werden kann. In der Kryptographie ist MHF eine Funktion, deren Auswertung eine erhebliche Menge an Speicher kostet. Es unterscheidet sich von speichergebundenen Funktionen, wobei letztere Kosten verursachen, indem die Berechnung durch Speicherlatenz verlangsamt wird. MHFs finden ihre Verwendung als Arbeitsnachweis. Der Hauptvorteil von Argon2 besteht darin, dass es eine bessere Resistenz gegen GPU/ASIC-Angriffe bietet (da es eine MHF ist).

Sobald ein Benutzer einen Seed generiert (oder importiert), wird dieser in base64 codiert im Browserspeicher gespeichert, welcher über den AES-GCM-Algorithmus verschlüsselt ist. Der Schlüssel wird von Ihrem Anmeldekennwort über argon2id abgeleitet (hier ist der Code einsebahr).

Das Anmeldekennwort (im Klartext) wird nirgendwo gespeichert, außer im RAM-Speicher, während die Wallet benutzt wird, um die Seeds nach einem erfolgreichen Login freizuschalten (denken Sie daran, dass die Authentifizierung durch den Vergleich der Passwort-Hashes erfolgt). Nach einer Inaktivitätsperiode von einer Stunde (konfigurierbar) sperrt sich die Wallet selbst und speichert die (wie oben beschrieben verschlüsselten) Seeds im Speicher des Browsers und löscht das Anmeldekennwort aus dem RAM-Speicher.

 

Der Benutzer hat zudem die Möglichkeit, den Seed zu exportieren und diesen extern (verschlüsselt oder offline) zu sichern. Mit dem exportierten Seed kann der Benutzer seine Wallet wiederherstellen, falls er sein Zugangspasswort vergessen hat.

 

 

Hinweis: Auf den veröffentlichten Architektur Blogartikel möchte ich in diesem Guide nicht eingehen, dieser ist nur für Entwickler interessant.