Coins auf Nuri/Bitwala können gesperrt werden

Nuri (ehem. Bitwala) wirbt bekanntlich damit, dass man ein vollkommen selbstverwaltetes Wallet erstellen, und über dessen Guthaben man jederzeit verfügen könne. Nach meinem Kenntnisstand stimmt das nicht. Obwohl man 2 von 3 Schlüsseln des Multisignatur Wallets hält, ist man auf die Kooperation von Nuri bzw. deren Dienstleister BitGo angewiesen.

Daraus folgt für mich, dass ein Wallet bei Nuri nicht non-custodial ist, wie von Nuri behauptet.

Nuri schreibt:

Doch wir wollen unseren Kunden auch die volle finanzielle Freiheit ermöglichen. Deshalb bieten wir allen, die mit Nuri investieren, jetzt auch selbstverwaltete Wallets an. Wir helfen dir, die Wallet einzurichten, doch ab dann trägst du die Verantwortung. Mit selbstverwalteten Wallets hast du die volle Kontrolle über deine Finanzen und nur du kennst deine Zugangsschlüssel. Deine Kryptos können weder konfisziert, noch eingefroren werden und du kannst dein Geld nicht verlieren, selbst wenn Nuri einmal insolvent gehen sollte.

(Hervorhebungen im Original)

Für die Wiederherstellung heißt es bei Nuri, man solle sich ein Programm runterladen, welches dann zwar lokal auf dem eigenen Rechner läuft, aber in welches man dennoch seine beiden Seeds im Klartext eingeben solle. Das Programm muss mit dem Internet verbunden sein, weil es mit dem Dienstleister BitGo kommuniziert, um schließlich eine Transaktion auf eine angegebene Zieladresse zu erstellen.

Es ist weder mir noch anderen bisher gelungen, das Wallet ohne das Recovery Tool von BitGo herzustellen. Das fehlende Puzzleteil ist der derivation path. Das heißt, dass BitGo den derivation path vorenthalten kann. Wenn das stimmt, kann zwar BitGo die Coins nicht ausgeben, aber effektiv blockieren. Ich habe den Pfad auch per brute-force noch nicht gefunden, weil das Ableiten nicht ganz billig ist. Fehler meinerseits kann ich natürlich nicht ausschließen.

Das Problem ist also, dass BitGo dem Kunden das Signieren der Transaktion vorenthalten kann, weil man die derivation paths der eigenen Schlüssel nicht kennt, mit denen das multisig Wallet erstellt wurde. Würde Nuri/BitGo die derivation paths zu den private keys rausrücken, könnte man das Wallet mit einer anderen Software wie z.B. electrum wiederherstellen, oder man könnte die beiden Seeds auf separate Hardware Wallets einspielen, und damit dann wie mit anderen Multisignatur Setups verfahren, bei denen man zwei von drei Schlüsseln hält.

Meine Anfrage bei (damals noch) Bitwala nach dem derivation path von vor zwei Monaten blieb unbeantwortet.

Auf meine Anfrage, ob es stimme, dass die Wiederherstellung die Kooperation von Nuri bzw. BitGo erfordere erhielt ich dagegen eine Antwort.

Meine Frage:

BitGo’s enterprise API seems to allow for the freezing of funds. Is that correct? If so, under which circumstances would Bitwala call for freezing a customer’s coins?

My understanding is, that a) user funds cannot be spent without 2/3 of the keys, and b) funds can be recovered using BitGo’s recovery procedure. Is there an alternative route for recovery, or does recovery require BitGo’s implicit consent?

Antwort von Nuri:

Indeed, user fund can only be spend with 2/3 keys and funds can be recovered using BitGo’s recovery procedure.

Furthermore recovery require BitGo’s implicit consent.

Das widerspricht Nuris oben zitierte Aussage: „Deine Kryptos können weder konfisziert, noch eingefroren werden …“. Ich denke, genau das kann passieren!

Vielleicht hat ja jemand von Euch Lust, mal die AGB zu studieren. Ich vermute, die wälzen darin die Verantwortung auf BitGo ab.

Siehe auch:

Meine Bitte an den @Blocktrainer, mal mit etwas Nachdruck qua influential reach anzuklopfen.

19 „Gefällt mir“

Finde ich super, dass du da mal nachhakst! Das ist sicher für viele interessant! :+1:

Die ganzen Diskussionen zu diesem Thema hier im Forum kennst du, einen Teil hast du ja verlinkt (non-custodial/semi-custodial, Vertrauen ggü. BitGo, Wallet Wiederherstelung in Electrum).

Gerade die Wallet Wiederherstellung in Electrum finde ich eigentlich am interessantesten. Ich habe das selbst ziemlich lange versucht (Schlüsselformate, Derivation Paths …), im Netz gesucht und auch auf Bitcoin Talk nachgefragt. Aber obwohl BitGo ein sehr großer Dienstleister ist, findest du im Internet niemanden, der die Wiederherstellung in Electrum jemals geschafft hat.

Ich unterstelle auf keinen Fall, dass sie betrügen wollen. Aber ich nehme stark an, dass die Wallet-Ableitung absichtlich nicht ganz standardkonform ist, damit nicht plötzlich jeder Kunde seine Coins selbst bewegt.

Abgesehen davon sind wir in Krypto, damit wir niemandem vertrauen müssen.

Fairerweise muss man erwähnen, dass der BitGo Code open source ist (BitGo API Reference). Wenn man sich gut genug auskennt, sollte man alles notwendige herauslesen können, um mit den zwei Seeds und dem xpub, die man hat, an seine Coins zu kommen.

Wenn das wirklich eine 2v3 Multisig ist, kann Nuri bzw. BitGo nichts sperren.

Man sollte deshalb mit solchen Aussagen wie im Titel nicht vorschnell sein.

1 „Gefällt mir“

Wenn du den derivation path nicht findest, kommst du nicht an die coins.

Nuri oder BitGo können die zwar auch nicht ausgeben, aber sie wären effektiv eingefroren.

Abgesehen davon ist es etwas anderes, ob die API öffentlich dokumentiert ist, oder ob ein Quellcode open source ist.

EDIT: Ich hätte diesen Post nicht geschrieben, wenn mir Nuri nicht in der Email geantwortet hätte, dass die Kooperation von BitGo für das Wiederherstellen notwendig sei. Das war für mich ausschlaggebend.

2 „Gefällt mir“

Du hast natürlich recht; ich habe nur die API verlinkt. Die Methoden zur Erzeugung der Wallets und Ableitung der Adressen sind da offenbar nicht enthalten.
In dem Text, der sich neben dem API Code befindet, ist relativ viel beschrieben. Aber den interessanten Code finde ich auch nicht.

Allerdings ist der Code des BitGo Wallet Recovery Wizards open-source:

Daraus müsste das abzulesen sein. Vielleicht täusche ich mich aber!

Wenn sich also jemand mal die Zeit nehmen würde und sich gut genug auskennt (-> nicht ich), könnte er den github Code mal durchforsten.

1 „Gefällt mir“

oha… das ist interessant… ich wäre für eine Auflösung dankbar! Ich gehe mal davon aus, dass es dafür einen Grund gibt… aber es sieht schon nach Täuschung aus, muss ich sagen. Schade

1 „Gefällt mir“

Hier wurde in die bitgojs geschaut: private key - Is it possible to use BitGo's wallet with other software (Electrum or else), what is the used derivation path? - Bitcoin Stack Exchange

Looking at the BitGoJS code it would appear that the derivation path is m/0/0/derivationChain/*.
Looking further, the derivationChain seems to be a code depending on the address type:

    [0, UnspentType.p2sh, Purpose.external],
    [10, UnspentType.p2shP2wsh, Purpose.external],
    [20, UnspentType.p2wsh, Purpose.external],

    [1, UnspentType.p2sh, Purpose.internal],
    [11, UnspentType.p2shP2wsh, Purpose.internal],
    [21, UnspentType.p2wsh, Purpose.internal],
3 „Gefällt mir“

Vielleicht bemühe ich Electrum dann später mal wieder…

3 „Gefällt mir“

Mach das bitte und breichte

neugierig warte :slight_smile:

1 „Gefällt mir“

Schau auch mal hier:

/**
   * The cold wallet tool uses this function to derive an extended key that is based on the passed key and seed
   * @param key
   * @param seed
   * @returns {{key: string, derivationPath: string}}
   */
  deriveKeyWithSeed({ key, seed }: { key: string; seed: string }): { key: string; derivationPath: string } {
    const derivationPathInput = bitcoin.crypto.hash256(`${seed}`).toString('hex');
    const derivationPathParts = [
      parseInt(derivationPathInput.slice(0, 7), 16),
      parseInt(derivationPathInput.slice(7, 14), 16),
    ];
    const derivationPath = 'm/999999/' + derivationPathParts.join('/');
    const keyNode = bitcoin.HDNode.fromBase58(key);
    const derivedKeyNode = hdPath(keyNode).derive(derivationPath);
    return {
      key: derivedKeyNode.toBase58(),
      derivationPath: derivationPath,
    };
  }

Das sieht doch verdächtig aus.

1 „Gefällt mir“

Ich habe vorhin nochmal ein bisschen rumprobiert, aber komme nicht weiter.

Erstens gibt es einfach viel zu viele Parameter, die man unterschiedlich kombinieren könnte. Zweitens verstehe ich vom Thema immer noch viel zu wenig und mache wahrscheinlich mehrere Fehler.
Gerade bzgl. Ableitungspfaden und xpubs gibt es bei Multisig soweit ich weiß Besonderheiten, weshalb ich nebenbei gesagt auch kein Fan von Multisig bin, obwohl es in manchen Aspekten das sicherste Verfahren ist.

Ich kenne mich jetzt gerade mal mehr schlecht als recht mit den normalen Pfadableitungen aus. Aber zu Multisig habe ich bisher weder was gelesen noch ausprobiert.

Electrum habe ich vorher noch mal das neueste runtergeladen.

Vorgehen wie in meinem Beitrag auf bitcointalk beschrieben: BitGo-Wallet in Electrum?

Ich habe die Pfade auch nochmal ohne Härtung probiert (ohne ’ nach den Zahlen). Zusätzlich auch m/0/0/20 und m/0/0/21. Aber kein Erfolg.

Offene Fragen, die ich vorher definiert klären bzw. überhaupt erst einmal verstehen müsste:

  • Ist die Reihenfolge der 3 Keys relevant? (meine war: 1. Haupt, 2. Backup, 3. Referenz)

  • Von Bitwala bekomme ich einen xpub. Wenn ich aber in Electrum bc1 Adressen haben möchte (in meiner Bitwala Wallet habe ich bc1), muss ich einen Zpub eingeben. Deshalb habe ich mit einem Tool den xpub umgewandelt.
    Es gibt aber die Optionen zpub oder Zpub und ich habe keine Ahnung was der Unterschied ist? bob123 auf bitcointalk hat auch geschrieben, dass die Konvertierung nicht so leicht ist.

  • Müssen die drei Derivation Paths unterschiedlich sein? Gibt es einen „cosigner index“, den ich hochzählen muss? Wenn ich in Electrum z.B. m/0/0/20 eingebe, fehlen nach der 20 noch weitere Pfadangaben?

Zu Multisig gibt es eigene BIPs, von denen ich leider keine Ahnung habe.

Wenn man nichts anderes zu tun hätte, würde es sicher Spaß machen den Code des Recovery Tools zu durchforsten und zu verstehen.

Das m/999999/ sieht in der Tat seltsam aus.

Das ganze ist aber auch einfach Quatsch. Wenn das so eine tolle non-custodial Wallet sein soll, sollte Bitwala/Nuri auch kein Problem damit haben die Infos rauszugeben. Offenbar wollen oder können sie das nicht, weil sie es vielleicht selbst nicht wissen.

P.S.: Was mir inzwischen übrigens immer klarer wird ist die Tatsache, dass die BIPs im Endeffekt auch nur grobe Vorgaben machen. Die genaue Implementierung bleibt jedem überlassen.

Nein.

Jeder xpub kann seinen eigenen derivation path haben, der wiederum zu einem neuen xpub führt. Einem abgeleiteten xpub ist sein Ableitungspfad nicht mehr anzusehen. Das gilt auch für den xpub, der in einem Multisig Setup erzeugt wird.

In der Regel kennst du die xpubs in einem Multisig Setup. Wie diese entstanden sind, ist für das Multisig Setup nicht mehr wichtig, wohl aber für das Signieren mit den einzelnen Teilnehmern.

Soweit mein Verständnis der Materie.

Ok, d.h. der Ableitungspfad, um von den beiden Bitwala Seedphrases zu den Keys zu kommen, könnte auch noch unterschiedlich sein.

Allerdings keine Ahnung, ob das wahrscheinlich ist und warum man das machen sollte.

Es sind einfach sehr viele Unbekannte bei der Geschichte.

Meinst du von den Seedphrases zu den jeweiligen xpubs? Ja.
Der Codeschnippsel, den ich oben verlinkt habe legt genau das nahe.

Für das Multisig Setup brauchst du alle drei xpubs. Den dritten liefert Bitwala dir. Aus den drei xpubs wird dann ein Wallet mit wiederum einem eigenen xpub erstellt. Aus diesem werden dann schließlich die public keys und Adressen erzeugt.

Da is was dran.

An die anderen Danke für die Denkanstöße

Die Bitwala App hatte kleine Macken aber immerhin konnte man problemlos coins kaufen, senden und verkaufen. Bei Nuri funktioniert ja garnichts.

Kann ich nur bestätigen, dass die das Konto bei Nuri sperren können. Wegen Konflikt mit Behörden wegen 15 € Strafzettel nicht gezahlt, wurde mein Bitwala-Account gesperrt.
Der Versuch mit Exodus auf meine Sats zuzugreifen misslang. Es wurde zwar angezeigt: Wiederherstellung erfolgreich, doch auf meinem Account befanden sich danach 0,0 Bitoins, so dass sich schon befürchtete, dass Exodus die Sats abgeräumt hat. Nun hab ich zumindest noch Hoffnung.

2 „Gefällt mir“

Hallo @propcoin,

Danke für die Info.

Hattest du versucht, deine Coins über das Recovery Procedere wiederherzustellen?

Ich warte erst einmal, was der Blocktrainer dazu sagt…

Ist schon eine Weile her, doch ich denke, das war die Recovery Prozedure. Du hast ja bei der Erstellung einer Wallet die Auswahl eine neue zu erstellen oder auf eine alte zuzugreifen, wo du dann die 12 seeds eingibst. Es wurde aber nicht nach den Recovery-Seeds gefragt und auch nicht nach dem Password.

Vermutlich das selbe wie letztes mal. Abwarten und eine Chance geben.

Er wird im Leben nichts gegen diese Firma sagen :wink:

1 „Gefällt mir“