Zephyrnet-Logo

Wie Kraken Wallet Herausforderungen in der mobilen Kryptosicherheit angeht

Datum:

Wir glauben, dass die sicherste mobile Krypto-Wallet diejenige ist, die die inhärenten Einschränkungen ihres mobilen Betriebssystems überwindet. Unter iOS unterstützt Apples CryptoKit beispielsweise das nicht secp256k1 elliptische Kurve, ein Standard für Bitcoin, Ethereum und viele andere Blockchains.

Diese Einschränkung hindert Entwickler daran, das sichere Element von Geräten zur Schlüsselspeicherung und Transaktionssignierung zu nutzen. Daher werden mobile Krypto-Wallets als Hot Wallets klassifiziert, da sie sowohl mit dem Internet verbunden sind als auch Transaktionen außerhalb eines sicheren Elements mithilfe einer Softwareimplementierung der kryptografischen Algorithmen signieren.

Das bedeutet, dass die privaten Schlüssel – zumindest beim Signieren – im Speicher der Sandbox-App-Umgebung offengelegt werden müssen. Dadurch sind sie potenziellen Bedrohungen stärker ausgesetzt als eine Wallet, die ein sicheres Element zum Signieren von Transaktionen verwendet.

Obwohl es nicht möglich ist, die Signatur direkt auf den sicheren Elementen durchzuführen, was einen erhöhten Schutz bieten würde, haben wir uns dazu verpflichtet, eine bereitzustellen Open-Source mobiles Krypto-Wallet, bei dem Sicherheit, Transparenz und Benutzerkontrolle im Vordergrund stehen.

Unsere Sicherheitsarchitektur ist speziell darauf ausgelegt:

  • Unterstützt mehrere Blockchains
  • Generieren Sie private Schlüssel mit hoher Entropie, einem Maß an Unvorhersehbarkeit, das die Sicherheit erhöht
  • Nutzen Sie kampferprobte Kryptografie, um die privaten Schlüssel der Benutzer sicher zu verschlüsseln und nutzen Sie dabei die Sicherheitshardware und die Sicherheitsfunktionen des Betriebssystems von Mobiltelefonen
  • Bieten Sie erweiterte Sicherheit mit einem benutzergenerierten Passwort für fortgeschrittene Benutzer, die eine zusätzliche Verschlüsselungsstufe wünschen (zusätzlich zum OS-Schlüsselbundschutz für den Entschlüsselungsschlüssel).
  • Schaffen Sie eine solide Grundlage für die zukünftige Integration neuer Schlüsselverwaltungstypen, wie Hardware-Wallets und MPC-Quorum-basierte Systeme

Der Open-Source-Vorteil

Als eines seiner grundlegenden Sicherheitsprinzipien gilt: Kraken-Geldbörse ist kostenlose und Open-Source-Software, verteilt unter die MIT-Lizenz. Beim Aufbau einer neuen Wallet von Grund auf war es uns wichtig, zur Förderung des Open-Source- und verteilten Ökosystems beizutragen.

Ohne Open-Source-Code würde Kraken Wallet ein hohes Maß an Vertrauen ohne Transparenz erfordern. Dies würde den Kunden weniger Schutz bieten; Sie könnten den Client nicht selbst überprüfen, ändern oder ausführen, wenn Sie wollten. „Vertraue nicht, überprüfe!“ ist nicht nur eine Branchenmaxime, sondern eines unserer Leitprinzipien.

Durch das Open-Sourcing unserer Software werden zwei grundlegende Ziele erreicht, die wir uns ursprünglich für dieses Produkt gesetzt haben: nachweisbare, überprüfbare Vertrauensminimierung:

  • Überprüfbarkeit: Die Möglichkeit zu überprüfen, ob die in diesem Blogbeitrag dargestellten Sicherheitsannahmen wahr sind. Jeder kann Schauen Sie sich den Quellcode an um konkret zu verstehen, was in dieser Brieftasche getan wird und was nicht. 
  • Überprüfbarkeit: Die Möglichkeit, zu überprüfen, ob die Ausgabe unserer Sicherheitsimplementierung korrekt ist, und eine Rückmeldung zu geben, wenn dies nicht der Fall ist. Wir haben interne und externe Teams damit beauftragt, vor der Veröffentlichung mehrfach Sicherheitsüberprüfungen durchzuführen. Künftig kann jeder den Code prüfen und einen Bericht über seine Ergebnisse erstellen.

Schlüsselgenerierung und Schlüsselimport

React Native ist zwar ein leistungsstarkes Tool, verfügt jedoch nicht über ein integriertes Kryptomodul. Um dies zu umgehen, haben wir eine reine JS-Implementierung (crypto-browserify) des Kryptomoduls von NodeJS verwendet. Die Methode crypto.randomBytes() – die die tatsächlichen Zufallsbytes generiert, die wir während der Schlüsselgenerierung benötigen – wird von der verwaltet React-native-get-random-values Polyfill.

React-native-get-random-values ​​nutzt nativen Code, um den auf dem Gerät verfügbaren Cryptographically Secure Pseudorandom Number Generator (CSPRNG) zur Generierung von Zufallszahlen zu nutzen. Auf praktisch allen modernen Geräten wird dieser Zufallszahlengenerator durch einen sicheren Hardware-Zufallszahlengenerator unterstützt.

Während der Wallet-Initialisierung ziehen wir Entropie aus dem CSPRNG und wandeln sie mithilfe gut etablierter npm-Pakete in einen mnemonischen Seed um (BIP32, BIP39).

Schlüssel werden gemäß dem BIP39-Standard konvertiert, gespeichert und dem Benutzer präsentiert, der eine einfach zu sichernde mnemonische Methode mit Interoperabilität für die meisten Wallets im Ökosystem bietet. Die Importfunktion unterstützt die Wiederherstellung von BIP39-kompatiblem Saatgut, das die beste Interoperabilität im Ökosystem bietet. 

Schlüsselverwaltung 

Kraken Wallet enthält zwei geheime Werte – den Seed und die Mnemonik – und mehrere nicht geheime (aber dennoch private) Werte wie Wallet-Adressen, Wallet-Namen und Beschreibungen von Transaktionen.

Privates Schlüsselmaterial (Seed/Mnemonik) wird im Schlüsselbund (auf iOS) und im Keystore (auf Android) gespeichert. Öffentliches Schlüsselmaterial und nicht sensible Daten (erweiterte öffentliche Schlüssel, Adressen und Beschreibungen) werden in der verschlüsselten Datenbank der Anwendung gespeichert (unter Verwendung von Reich).

Es gibt mehrere Sicherheitskontrollen zum Schutz der Daten:

  • App sperren: Eine zufällig generierte 64-Byte-Zeichenfolge, die im Schlüsselbund oder Keystore gespeichert ist. Der Zugriff auf das Geheimnis wird durch Anwesenheitsanforderungen des Benutzers geschützt – biometrische Authentifizierung oder Passcode-Authentifizierung.
  • Passwort: Vom Benutzer bereitgestellt und nicht auf einem Gerät gespeichert. Stattdessen muss der Benutzer das Passwort manuell eingeben, wenn er von der Anwendung dazu aufgefordert wird. Das Wallet bestimmt, ob das Passwort benötigt wird, indem es zwei Flags (is_storage_encrypted und is_seed_encrypted) konsultiert, die im Schlüsselbund oder Keystore gespeichert sind. Als Schlüsselableitungsfunktion wird der Argon2-Algorithmus verwendet.
  • Datenbankverschlüsselung: Die Datenbank (Realm) wird zum Speichern nicht geheimer Daten verwendet. Die Daten werden mit einem zufälligen 64-Byte-Schlüssel verschlüsselt.
  • Sperrmechanismus: Die Eingabe eines falschen Passworts führt zu Verzögerungen, bevor weitere Passwortversuche unternommen werden können. Dieser Mechanismus verhindert wirksam Brute-Force-Passwortangriffe. Informationen zu Sperrparametern, wie z. B. die Anzahl der Versuche und die Dauer der Verzögerungen, werden sicher im Schlüsselbund oder Keystore gespeichert.

Der Seed, die Mnemonik und der Datenbankverschlüsselungsschlüssel werden immer in verschlüsselter Form gespeichert

  • Wenn keine Schutzmaßnahmen aktiviert sind: Der Startwert, die Mnemonik und der Realm-Verschlüsselungsschlüssel werden direkt im Schlüsselbund oder Keystore gespeichert, ohne dass eine Zugriffskontrolle durch die Anwesenheit des Benutzers erfolgt.
  • Wenn die App-Sperre aktiviert ist: Die Mnemonik und der Seed werden zunächst mit dem App-Sperrgeheimnis verschlüsselt und dann sicher im Schlüsselbund oder Keystore gespeichert. Der Realm-Verschlüsselungsschlüssel wird auch direkt im Schlüsselbund oder Keystore gespeichert.
  • Wenn der Passwortschutz aktiviert ist: Die Mnemonik und der Seed werden mit dem Passwort verschlüsselt, wohingegen der Realm-Verschlüsselungsschlüssel nur dann mit dem Passwort verschlüsselt wird, wenn is_storage_encrypted auf true gesetzt wurde.
  • Wenn sowohl die App-Sperre als auch der Passwortschutz aktiviert sind: Die Mnemonik und der Seed werden sowohl mit einem Passwort (zuerst) als auch mit einer App-Sperre (zweite) verschlüsselt. Der Realm-Verschlüsselungsschlüssel wird nur mit dem Passwort verschlüsselt und nur, wenn is_storage_encrypted auf true gesetzt wurde.

Schlüsselverwendung

Der Seed/Mnemonik wird im Schlüsselbund oder Keystore gespeichert und spielt eine entscheidende Rolle bei kryptografischen Vorgängen. Wenn eine neue Wallet-Adresse generiert oder eine Transaktion signiert werden muss, leiten wir aus diesem Seed die notwendigen Informationen, wie zum Beispiel den privaten Schlüssel, ab.

Es ist jedoch wichtig zu beachten, dass der private Schlüssel während dieser Vorgänge in den Speicher geladen werden muss. Diese Notwendigkeit ergibt sich aus den zuvor erwähnten Einschränkungen bei mobilen Geldbörsen und dem fehlenden direkten Zugriff auf das sichere Element für die Transaktionssignierung.

  • Transaktionssignierung (Token senden)
  • WalletConnect-Datensignierung (Verarbeitung von Sitzungsanfragen)
  • Hinzufügen einer neuen Wallet
  • Testnet-Ketten aktivieren (Testnet-Wallets hinzufügen)
  • Anzeige der Mnemonik
  • Überprüfung der Mnemonik
  • App-Sperre aktivieren und deaktivieren
  • Aktivieren und Deaktivieren des Passworts

Für folgende Funktionalitäten wird eine zusätzliche biometrische Authentifizierung durchgeführt:

  • App-Sperre aktivieren
  • Alle Daten löschen
  • Eine Wallet (Konto) löschen
  • Aktivieren oder Deaktivieren eines Passworts (zusätzlich zum Abrufen der App-Sperre)
  • Öffnen der Anwendung
  • Verschieben der Anwendung in den Vordergrund
  • Erweiterte öffentliche Schlüssel anzeigen
  • Verbindung zu einer dezentralen Anwendung (dApp) herstellen

Darüber hinaus kann zum Öffnen der Anwendung das Passwort erforderlich sein. Schlüsselbund und Keystore werden immer über das verwendet React-Native-Keychain Verpackung:

  • Der Wrapper generiert für jedes Element einen neuen Schlüssel im Schlüsselbund oder Keystore
  • Der Wrapper ist für die Übergabe der korrekten Konfigurationsflags für Schlüsselbund und Keystore verantwortlich
  • Das Wallet fordert den Wrapper immer auf, die Flags so zu konfigurieren, dass das Gerät entsperrt werden muss, um auf den Schlüssel zuzugreifen
  • Eine (biometrische) Prüfung der Benutzeranwesenheit ist zeitbasiert konfiguriert und die Prüfung ist 5 Sekunden lang gültig. Die Überprüfung der Benutzeranwesenheit wird nicht pro Zugriff durchgeführt

Der Verschlüsselungsalgorithmus ist für alle Elemente gleich:

  • Der Schlüssel wird mit Argon2id aus einem NFC-normalisierten Geheimnis abgeleitet
  • Das Salt für Argon2id ist die eindeutige ID des Geräts
  • Der Verschlüsselungsmodus ist AES-GCM
  • Der Initialisierungsvektor (IV) für AES besteht aus 16 Zufallsbytes
  • Das Authentifizierungs-Tag für AES muss 16 Byte lang sein

Unterzeichnung der Transaktion

Zusätzlich zu den zuvor erwähnten Maßnahmen zur Schlüsselspeicherung, Biometrie und zum Passwortschutz bleibt die Transaktionssignierung ein wichtiger Schwerpunkt für kontinuierliche Verbesserungen. Als ersten Schritt haben wir in diesem Bereich mehrere bemerkenswerte Maßnahmen umgesetzt, darunter:

Transaktionssimulation

Wir nutzen externe API-Dienste (z. B Kugelfisch und andere), um den möglichen „Schweregrad“ zu überprüfen, den eine Transaktion für den Benutzer mit sich bringen kann (eine Risikobewertung). Dies reicht vom vollständigen Blockierungsbildschirm für mögliche böswillige Transaktionen (oder das Signieren von Nachrichten) bis hin zu Warnungen zu den verschiedenen Vorsichtsstufen, die der Benutzer vor dem Signieren oder Bestätigen einer Transaktion haben sollte. 

Weitere Maßnahmen sind:

  • Adressvalidierung, um sicherzustellen, dass Sie nicht an eine falsche Adresse senden
  • Adressen, die immer vollständig sichtbar sind, um sicherzustellen, dass der Benutzer nicht auf bestimmte Angriffe rund um die Adresskomposition abzielt
  • Netzwerkvalidierung und Warnungen, um sicherzustellen, dass der Benutzer nicht an das falsche Netzwerk sendet
  • Überprüfung der Gebührenverträglichkeit, um sicherzustellen, dass der Benutzer für eine Transaktion nicht zu viel bezahlt

Privatsphäre im Netzwerk

Um die Privatsphäre und persönlichen Daten der Benutzer so zu schützen, dass diese Daten bei Netzwerkanfragen – insbesondere an Dienste Dritter – nicht verloren gehen, haben wir ein API-Gateway für Proxy-Anfragen entwickelt. Dieser Proxy ermöglicht es uns, Benutzeranfragen nicht an Dienste Dritter weiterzuleiten und die IP eines Kunden nicht an externe oder öffentliche Anbieter weiterzugeben. 

Bei diesem Backend-Dienst handelt es sich im Grunde um eine API zum Abfragen öffentlicher Blockchain-Daten. Innerhalb der Wallet-Sicherheitsarchitektur besteht ihr Zweck darin, diese Funktionalität hinter einer gemeinsamen API über alle Blockchains hinweg zu kapseln, sodass Kraken Wallet keine Blockchain-spezifischen Verhaltensweisen für die Datenabfrage implementieren muss.

Dieser Backend-Dienst definiert diese gemeinsame API. Letztendlich leitet es Anfragen an andere Parteien weiter, von denen es die eigentlichen Daten abruft. Es indiziert weder Blockchains selbst noch behält es den Status bei.

Sicherheitsannahmen

Unsere Sicherheitsarchitektur basiert auf einigen Grundannahmen für optimalen Schutz. Wir gehen davon aus:

  • Das Gerät des Benutzers ist weder gerootet, noch ist das Betriebssystem veraltet und anfällig für kritische Schwachstellen, die einem Angreifer Zugriff auf den Gerätespeicher gewähren könnten
  • Das Schlüsselbund- oder Keystore-Paket bietet ausreichend starken Schutz
  • Das mobile Betriebssystem bietet solides Sandboxing zwischen den Prozessen der Apps und stellt so sicher, dass der Speicher, der sensible Daten wie Seeds enthält, ordnungsgemäß verwaltet wird

Zusätzliche Funktionalität

  • Die App basiert auf dem Prinzip, nur die Mindestdaten zu speichern, die zum Betrieb des Wallets erforderlich sind
  • Auf dem Client werden keine Analyse- oder Crash-Reporting-Software Development Kits (SDKs) von Drittanbietern verwendet
    • Da wir uns bemühen, keine Daten an Dritte weiterzugeben, wäre es nicht sinnvoll, eine zusätzliche Datenverfolgung einzubinden – was bedeutet, dass Sie im Client keine Analyse- oder Absturzberichtssoftware finden
  • In der Codebasis sind keine Over-the-Air-Updates (außerhalb des regulären AppStore/Play Store-Aktualisierungsablaufs) zulässig oder implementiert
    • Der Benutzer kann eine kompilierte Software erwarten, die ohne seine Einwilligung nicht aktualisiert werden kann
  • Token-Liste und Reputationssystem
    • Um Benutzern die Verwaltung ihrer Token zu erleichtern, haben wir ein Listen- und Reputationssystem implementiert, das auf den von Kraken und anderen Dritten bereitgestellten Vermögenswerten basiert
  • NFTs-Spam
    • Eine erste Maßnahme, die wir weiter verbessern möchten, ist die Erkennung von Spam und Spam-bezogenen Angriffen, bei der Spam automatisch im Ordner des Benutzers archiviert wird

Externes Sicherheitsaudit

Die Sicherheit unseres selbstverwahrenden Wallets wurde im Rahmen einer Prüfung durch Trail of Bits, einem in der Branche angesehenen Sicherheitsprüfungsunternehmen, streng bewertet. Diese Prüfung umfasste eine detaillierte Untersuchung unserer Codebasis und Client-Architektur mit dem Ziel, potenzielle Sicherheitslücken zu identifizieren und zu beheben.

Um Transparenz zu gewährleisten und Einblick in die Sicherheit unserer Plattform zu geben, sind die Ergebnisse dieser Prüfung öffentlich zugänglich. Dieser offene Zugang ermöglicht es Nutzern und Interessierten, die Ergebnisse der Sicherheitsanalyse von Trail of Bits einzusehen. Der Bericht dient als wichtige Ressource zum Verständnis unserer Sicherheitsmaßnahmen und unseres Engagements für die Aufrechterhaltung einer sicheren Umgebung für unsere Benutzer.

Priorisierung von Sicherheit, Transparenz und Benutzerkontrolle

Kraken Wallet schafft angesichts der inhärenten Plattformbeschränkungen ein empfindliches Gleichgewicht zwischen Komfort und robustem Schutz. Unser Ansatz bestand immer darin, mit einer interoperablen Wallet-Struktur zu beginnen, die weithin anerkannt ist. Diese solide Grundlage schafft die Voraussetzungen für Innovationen und das Hinzufügen neuer Funktionen mit dem Ziel, unseren Benutzern eine sich ständig weiterentwickelnde, erstklassige Sicherheitslösung für die Selbstverwahrung ihrer Krypto-Assets anzubieten.

Diese Materialien dienen nur allgemeinen Informationszwecken und stellen weder eine Anlageberatung noch eine Empfehlung oder Aufforderung zum Kauf, Verkauf, Einsatz oder Halten von Krypto-Assets oder zur Umsetzung einer bestimmten Handelsstrategie dar. Kraken wird und wird nicht daran arbeiten, den Preis eines bestimmten von ihm bereitgestellten Krypto-Assets zu erhöhen oder zu senken. Einige Kryptoprodukte und -märkte unterliegen keiner Regulierung und Sie sind möglicherweise nicht durch staatliche Entschädigungs- und/oder behördliche Schutzsysteme geschützt. Die Unvorhersehbarkeit der Krypto-Asset-Märkte kann zu Geldverlusten führen. Auf jede Rendite und/oder jede Wertsteigerung Ihrer Krypto-Assets können Steuern anfallen, und Sie sollten sich zu Ihrer Steuersituation unabhängig beraten lassen. Es können geografische Einschränkungen gelten.

spot_img

Neueste Intelligenz

spot_img