Jeden Monat berichtet MetaMask Security Director Luker über die neuesten Krypto-Angriffe und aufkommenden Risiken, die Sie kennen sollten.
Die Ausgabe vom Mai 2022 behandelte den Start von MetaMasks HackerOne-Bug-Bounty-Programm, Endos Implementierung von import.meta und __dirname zur Verbesserung der MetaMask-Abhängigkeitskompatibilität sowie einen Distributed-Key-Generation-Prototyp-Snap, der Multi-Party-Computation-Signing in MetaMask Flask demonstriert. Tauchen Sie unten in die Details ein, aber zuerst...
MINT-Pionier im Fokus: Adi Shamir, Miterfinder von RSA und Schöpfer des Secret Sharing
Adi Shamir ist ein israelischer Kryptograf, der 1977 gemeinsam mit Ron Rivest und Leonard Adleman den RSA-Algorithmus mitentwickelte – das erste praktische Public-Key-Kryptosystem, das dem Trio 2002 den Turing Award einbrachte. Im Jahr 1979 veröffentlichte er „How to Share a Secret" und stellte damit Shamir's Secret Sharing vor: ein Verfahren, das ein Geheimnis in Anteile aufteilt, von denen nur eine Mindestanzahl benötigt wird, um das Original zu rekonstruieren. Diese Eigenschaft ist grundlegend für die in diesem Bericht behandelte Distributed-Key-Generation-Arbeit.
MetaMask startet HackerOne-Bug-Bounty-Programm
MetaMask hat sein Bug-Bounty-Programm im Juni 2022 auf HackerOne gestartet und damit einen formellen Kanal für Sicherheitsforscher eröffnet, um Schwachstellen in MetaMask-Produkten zu melden.
Endo implementiert import.meta und __dirname und verbessert die MetaMask-Abhängigkeitskompatibilität
Mit den Fortschritten bei Endos CommonJS-Unterstützung im April 2022 zeigten End-to-End-Testergebnisse, dass die größten verbleibenden Hindernisse für die Ausführung populärer Module die Unterstützung von import.meta.url und __dirname waren.
Ein Treffen zwischen Agoric, MetaMask und Moddable am 3. Mai 2022 führte zu einer Einigung darüber, zu welchem Zeitpunkt im Modulimportprozess import.meta verarbeitet werden soll. Das Konzept importMetaHook wurde in die Compartment-Spezifikation eingeführt. Der Hook wird nur aufgerufen, wenn die statische Analyse ergibt, dass das Modul auf import.meta zugreift – da Node.js dort eine resolve-Funktion anhängt und deren Erstellung aufwändig ist, empfiehlt es sich, den Hook nur dann aufzurufen, wenn seine Ergebnisse tatsächlich verwendet werden könnten.
Die Implementierung von import.meta ist abgeschlossen (Spec Issue, Implementierungs-PR). Was noch aussteht, ist die standardmäßige Übergabe von import.meta.url an Module in Endo. Die Implementierung von __dirname ist ebenfalls abgeschlossen (PR), nach mehreren Iterationen zur Sicherstellung der Korrektheit und der Windows-Pfadunterstützung.
Darüber hinaus wurde Unterstützung für verschachtelte package.json-Dateien hinzugefügt, die die standardmäßige Modultypannahme für .js-Dateien ändern, sodass der Compartment-Mapper Pakete mit komplexen Strukturen verarbeiten kann, die sowohl CommonJS- als auch ES-Modul-Spezifikationen unterstützen sollen (Quelle).
Die Unterstützung für das __esModule-Verhalten ist auf Eis gelegt. Zwei Implementierungsversuche führten beide zu schlechteren Ergebnissen in End-to-End-Tests. Ein dritter Ansatz – die Platzierung der Unterstützungslogik in ThirdPartyModuleInstance innerhalb von SES – gilt als umstritten. Das Feature wird in Issue #927 verfolgt.
Distributed-Key-Generation-Prototyp-Snap demonstriert MPC-Signing in MetaMask Flask
Bei den Multi-Party-Computation-Fähigkeiten (MPC) wurden Fortschritte erzielt. Unser Team hat frühere Proof-of-Concept-WebAssembly-Bindings (WASM) aufgegriffen und einen Prototyp-Snap entwickelt, der in MetaMask Flask verwendet werden kann und Distributed Key Generation (DKG) sowie Message Signing demonstriert. Der Snap unterstützt den Export und Import von Key Shares zusätzlich zur Schlüsselgenerierung und dem Speichern von Proofs für das Message Signing.
Im Hintergrund nutzt das Paket eine Implementierung von GG2020 (Gennaro und Goldfeder 2020, Paper), einem Protokoll, das eine nicht-interaktive Online-Phase unterstützt, bei der Teilnehmer asynchron partizipieren können, ohne gleichzeitig online sein zu müssen, und das eine effiziente Erkennung abbrechender Parteien ermöglicht.
Die nächsten Schritte umfassen das Hinzufügen von Verschlüsselungsunterstützung für snap_manageState, um die manuelle Verschlüsselung von Key Shares im Snap-Code zu eliminieren, gefolgt von der Unterstützung für das Signieren von Transaktionen. Der Prototyp wird im tss-snap-Repository verfolgt (ursprünglich als ecdsa-wasm veröffentlicht).
MetaMasks Krypto-Sicherheitsbericht vom Mai 2022 behandelte Endos Implementierung von import.meta und __dirname für MetaMasks Modulkompatibilitätskette sowie den Distributed-Key-Generation-Prototyp-Snap, der Multi-Party-Computation-Signing in MetaMask Flask demonstriert. Stöbern Sie in früheren Ausgaben des MetaMask-Krypto-Sicherheitsberichts für weitere Bedrohungen, Trends und Tipps, um im gesamten Ökosystem sicher zu bleiben.