Rohtransaktion offline mit C++ auf Arduino signieren

Ich untersuche die IoT-Seite des EVM. Ich habe Arduinos und ESP8266s so programmiert, dass sie mit einem Geth JSON RPC interagieren. Ich versuche, minimalistisch zu sein und NodeJS auf der Seite des Geth JSON-Servers zu vermeiden. Derzeit entsperrt der ESP8266 die Konten nur über die Funktion Personal.sendTransaction. Ich weiß, dass dies eine schlechte Sicherheit ist, wenn jemand mein WLAN-LAN infiltriert (mein Geth-Knoten läuft auf meinem WLAN-Router OpenWrt). Ich habe Beispiele von ethereumjs-utils gesehen, die zum Offline-Signieren von Transaktionen verwendet werden. Gibt es eine LEICHTE (unter 500k) C++-Version davon, zumindest die ECDSA-Algorithmen secp256k1 keccak256?? Idealerweise würde der Mikrocontroller die Transaktion signieren und dann die Rohtransaktion senden. Die einzige Möglichkeit, wie ein Dieb Zugriff auf die IoT-Brieftasche erhalten könnte, wäre der physische Zugriff auf das Gerät, das Flash-ROM ausgeben, Reverse Engineering der Binärdatei, um den privaten Schlüssel zu extrahieren. Irgendwelche Vorschläge?? Hier ist ein funktionierendes Beispiel für ESP8266 ESP-01, das Temperaturdaten in die Rinkeby-Blockchain drückt und zieht, wobei der Großteil des Codes das JSON-Parsing isthttps://github.com/gusgorman402/ESP8266_Geth

Ich schaue in Esspruino, Javascript für Mikrocontroller. Aber ich würde einen C++-Weg bevorzugen
Sie haben libsecp256k1 für die elliptische Kurve, tiny-keccak für keccak (es gibt eine Pull-Anfrage, um die keccak256-Version von Ethereum hinzuzufügen), das fehlende Stück ist eine Bibliothek zum Serialisieren von Transaktionen mit Ethereums RLP.
Ich schaue mir das auch an. Ich habe angefangen, meine eigene RLP-Codierungsklasse zu schreiben, habe die Hälfte geschafft, das oben verlinkte Beispiel ist sehr hilfreich. Ich habe auch angefangen, die relevanten Dateien aus dem cpp-ethereum-Projekt einzulesen, aber es ist ein großes Projekt und ich muss nur lokale Transaktionen unterzeichnen und Vertragsmethoden aufrufen.
Ich habe ein YouTube-Video über die Verwendung von ESP8266 erstellt, aber die Signierung erfolgt auf dem Knoten hackaday.com/2017/11/09/iot-with-the-ethereum-blockchain
Ich habe den gesamten Code implementiert, der auf einem ESP8266 verwendet werden soll. Es codiert die Transaktion in das RLP-Format, signiert es und es funktioniert großartig :) Wenn jemand interessiert ist, kann ich den Code veröffentlichen.
@Souza poste bitte den Code

Antworten (1)

Sie können unser Firefly Hardware Wallet ( https://firefly.city ) für den ATmega328 verwenden, um Folgendes zu tun:

  • secp256k1 signieren
  • RLP-Decodierungstransaktionen
  • keccak256
  • Generieren von Prüfsummenadressen (oder Rohadressen)

Das Signieren erfordert meines Erachtens etwa 700 Byte freien Speichers, aber alles andere erfordert einen ziemlich geringen Speicherbedarf.

Wenn Sie ein OLED-Display benötigen, enthält der Firefly-Quellcode auch unseren Zero-Memory-Videotreiber.

Hier ist ein Link zur Bibliothek: https://github.com/firefly/wallet/tree/master/source/libs/ethers

Außerdem ist der gesamte Code BSD/MIT-lizenziert und sollte daher für jedes Projekt ziemlich einfach zu integrieren sein.