In den letzten Jahren gab es mehrere erfolgreiche Hacks verschiedener Trezor-Modelle; allerdings immer mit notwendigem physischen Zugriff auf das Gerät. Deshalb ja auch die regelmäßige Empfehlung, eine Hardware Wallet mit Secure Element zu verwenden.
Soweit ich weiß wird auf dem Trezor der Seed verschlüsselt auf dem Microcontroller (MCU) gespeichert, wie auch bei der Bitbox.
Der entscheidende Unterschied ist allerdings, dass die Seed-Verschlüsselung ausschließlich anhand des Gerätepassworts (PIN) durchgeführt wird und der Trezor kein Secure Element hat. Alle weiteren Schlüssel würden wenig Sinn machen, wenn diese ebenfalls auf der angreifbaren MCU gespeichert wären.
Bei den Hacks wurde also zuerst mit speziellen Techniken der Flash-Speicher der Trezor MCU ausgelesen, was sicher nicht trivial ist. Anschließend konnte man den PIN relativ einfach brute-forcen, da die meisten Nutzer keine langen PINs verwenden.
Ein sicherer Schutz dagegen ist also entweder eine sehr lange PIN, da man nur Ziffern verwenden kann. Oder eine optionale Passphrase (BIP39).
Lustigerweise empfiehlt Trezor selbst für die PIN nur eine geringe Mindestlänge von 6 Ziffern, was in dieser Hinsicht nutzlos ist. Ohne Passphrase würde ich bei der PIN mindestens 30 Ziffern verwenden.
Bei der Bitbox sieht das ganze anders aus, wie auf der Shiftcryto Website oder hier von Stadicus beschrieben (ich wiederhole mich ).
Der Seed ist ebenfalls verschlüsselt im Flash-Speicher der MCU gesichert, der potentiell ausgelesen werden kann. Um den Seed zu entschlüsseln, sind aber drei verschiedene Schlüssel notwendig.
- Gerätepasswort → könnte gebrute-forced werden, falls zu kurz
- Salt auf der MCU → könnte mit ähnlichen Techniken extrahiert werden wie beim Trezor
- Zufälliger Schlüssel → ist auf dem Secure Element gespeicht
Da bei jedem Seed-Entschlüsselungs-Versuch auch der Schlüssel des Secure Elements benötigt wird, kann man das Gerätepasswort also nicht einfach brute-forcen.
Erstens werden die Entsperrversuche verlangsamt. Zweitens blockiert sich die Bitbox spätestens nach ca. 730.000 Versuchen automatisch, wobei sich dieser Zähler ebenfalls auf dem Secure Element befindet.
Das Secure Element ist außerdem besser als eine MCU gegen physischen Zugriff gesichert. Das ist ja gerade der Sinn der Sache. Man kann den Schlüssel also sehr wahrscheinlich nicht mit den gleichen Techniken auslesen.
Beim Ledger wiederum ist der Seed gleich selbst auf dem Secure Element gespeichert.
In beiden Fällen also, bei Ledger und Bitbox, muss ich ein gewisses Vertrauen in die physische Sicherheit des Secure Elements haben. Sollte man das bei direktem Zugriff irgendwann doch knacken können, hätte man den Seed entweder direkt, oder man müsste „nur“ noch das Gerätepasswort brute-forcen.
Ein langes Gerätepasswort oder eine (nicht gespeicherte) optionale Passphrase würden allerdings auch bei Ledger und Bitbox dagegen schützen.