Was ist die sicherste Methode zur Verwaltung einer großen Anzahl von empfangenden Bitcoin-Adressen?

Angenommen, ich möchte ein großes Projekt durchführen, bei dem Benutzer ständig neue Adressen anfordern können, um Bitcoins auf ihr Online-Konto einzuzahlen. Ich nehme an, ich muss Tausende von Bitcoin-Schlüsselpaaren vorab generieren und sie in eine laufende Instanz von Bitcoin auf meinem Server importieren. Jedes Mal, wenn ein Benutzer eine neue Adresse anfordert, um Bitcoins auf sein Konto einzuzahlen, werde ich ihm eine neue Adresse zuweisen. Dann benachrichtigt mich Bitcoin, wenn eine der importierten Adressen eine Transaktion erhält.

Erste Frage: Ist Bitcoin in der Lage, Tausende von Adressen in Echtzeit zu überwachen? Soll ich dafür eine eigene Maschine einplanen?

Zweite Frage: Da ich erhaltene Bitcoins in einen Cold Storage verschieben und auch mehrmals am Tag automatisch Auszahlungen vornehmen muss, muss ich die privaten Schlüssel auch auf dem Online-Server speichern. Ich kann wallet.dat passwortgeschützt haben, aber was ist die sicherste Methode, um die Brieftasche automatisch zu entsperren, Geld zu verschieben und sie dann wieder zu sperren, ohne dass das Passwort möglicherweise kompromittiert wird? Ich halte es nicht für sicher, wenn das Passwort irgendwo im Code, in der Konfiguration oder in der Datenbank erscheint. Und ich möchte das Passwort nicht mehrmals am Tag manuell eingeben.

Dritte Frage: Wird Bitcoin jedes Mal eine neue „Änderungsadresse“ generieren, wenn ich Gelder von der Empfangsadresse zu Auszahlungen und Cold Storage bewege? Ich frage, weil es so aussehen würde, als ob der Client Bitcoins erhalten hätte, wenn Bitcoin eine der importierten Adressen zum Wechseln verwendet hätte.

Ihre Frage ähnelt meiner bitcoin.stackexchange.com/questions/21496/… . Ich habe gelesen, dass Cryptsy Cold Wallets verwendet. Bedeutet das also, dass sie mit virtuellen Guthaben arbeiten und bei der Auszahlung Geld von der Cold Wallet in die How Wallet verschieben?

Antworten (2)

Sie möchten keine finanzierten Schlüssel serverseitig speichern, es gibt einen fast konstanten Strom von Hosts, die kompromittiert werden, um Gelder zu stehlen. Die meisten Bitcoin-Systeme verwenden etwas, das als „Hot Wallet“ bezeichnet wird, und verschieben den Rest auf einzelne Papier-Wallets, die außerhalb der Kontrolle des Servers liegen. Es ist dann die Rolle des Administrators, Gelder hin und her zu bewegen, um die Hot Wallet finanziert zu halten. Dies reduziert das Risiko erheblich und bedeutet, dass ein Angreifer höchstens den Geldbetrag in der Hot Wallet erlangen kann.

Ist Bitcoin in der Lage, Tausende von Adressen in Echtzeit zu überwachen?

Ja, aber Sie möchten wirklich nicht mehr als eine kleine Hot Wallet auf einem Server speichern. Wenn Ihre Sicherheit nicht perfekt ist, wird sie einfach gestohlen. Wenn es gewöhnt war

Was ist die sicherste Methode, um die Brieftasche automatisch zu entsperren, Geld zu verschieben und sie dann wieder zu sperren, ohne dass das Passwort möglicherweise kompromittiert wird?

Sie können sich nicht sicher sein. Selbst wenn die Brieftasche „verschlüsselt“ ist, kann ein Angreifer einfach auf dem Server sitzen und darauf warten, dass Sie ihn entsperren. Auch aus diesem Grund müssen Sie Offline-Speicher und Hot Wallets verwenden, um den Schaden des kompromittierten Servers zu mindern.

Wird Bitcoin jedes Mal eine neue „Adresse ändern“ generieren, wenn ich Gelder von der Empfangsadresse zu Auszahlungen und Kühllagern bewege?

Ja. Aus diesem Grund sind alle Adressen, die dem Kunden präsentiert werden, einmalig verwendbar. Sie legen jedes Mal eine neue Empfangsadresse für die Hot Wallet fest bitcoindund zeigen sie dem Kunden nie wieder an. Das müssen sie nicht, ihre Gelder sind nicht auf bestimmte Bitcoin-Ausgaben beschränkt. Ihr Guthaben ist nur ein externer Wert in Ihrer Datenbank, für den Sie zufällig die Gelder halten.

Idealerweise sieht das Setup so aus:

Server:

  • Eine bitcoindheiße Brieftasche, erstellt neue Empfangsadressen und präsentiert sie einem Kunden. Mit walletnotifyoder blocknotifywerden die empfangenen Salden für jeden Benutzer in einer externen Datenbank wie Postgres oder Redis aktualisiert.
  • Ein Prüfskript stellt sicher, dass bitcoindnie mehr als 50 BTC in seiner Wallet gespeichert werden, wenn das Guthaben 50 BTC übersteigt, wird ein Skript ausgeführt, das einen neuen Schlüssel mit einem deterministischen öffentlichen Schlüssel generiert (der Server muss dazu niemals den privaten Schlüssel kennen) oder verwendet eine vorab erstellte Liste. Es sendet den Überschuss an diese Adresse, um ihn sicher aufzubewahren.
  • Wenn das Wallet nicht über das Geld verfügt, um einen Benutzer zu bezahlen, wenn er eine Auszahlungsanfrage stellt, zeigen Sie eine sanfte Anstrengung und benachrichtigen Sie den Administrator, dass das Hot Wallet wieder aufgefüllt werden muss. Erklären Sie, dass dies zum Schutz des Benutzers dient.

Offline:

  • Eine Armory-Wallet, die die privaten Schlüssel der Cold Wallet enthält. Idealerweise komplett offline, mit einer Papiersicherung in einem Schließfach.

  • Die Kontrolle liegt nur beim Administrator, der die Adresse der Hot-Wallet-Nachfüllung auf dem Server kennt. Bei Bedarf verschieben sie Gelder gemäß den Benachrichtigungen zurück auf den Server

Sehr umständlich, aber ungefähr so ​​funktionieren andere Systeme, und es muss so sein, es sei denn, Sie wollen wie http://inputs.io/ enden, der aufgrund von Fahrlässigkeit eine ganze Hot Wallet von 4000 BTC verloren hat. In solchen Situationen kann man nie zu paranoid sein. Ihr maximaler Verlust wäre in diesem Fall die 50BTC Hot Wallet, was besser ist, als alles zu verlieren.

Spiele sicher.

Ich mag diese Lösung. Nehmen wir jedoch an, ein Hacker wartet leise auf dem Server, bis ein Client einen sehr großen Betrag einzahlt, sagen wir 1000 BTC. Wenn der private Schlüssel zu dieser Empfangsadresse auch auf dem Server wäre, könnte der Hacker die Bitcoins schnell an sich selbst schicken, bevor das Prüfskript sie ins Cold Storage übertragen konnte?
Das ist ein Risiko, das ebenfalls gemildert werden kann, und eine gute Überlegung, um zu erkennen, dass es existiert. Wenn Sie den Benutzern nur von Armory generierte Adressen präsentieren (Sie können ihr Guthaben immer noch ohne den privaten Schlüssel sehen), werden große Guthaben nie in der Hot Wallet sein, aber Sie können sie trotzdem mit Ihrer externen Datenbank abgleichen. Das soll nicht heißen, dass Sie bei der Sicherheit heißer Server nachlässig sein sollten, eine Kompromittierung ist immer noch ein massives Problem für alle Beteiligten, nur die Verwendung eines Heiß-Kalt-Systems macht es finanziell etwas billiger, wenn Sie es sind.
@ user10507 Ich sollte erwähnen, dass ich sehr froh bin, dass Sie darüber sehr sorgfältig nachdenken. Das ist mehr Designarbeit, als viele Dienste in ihre Systeme gesteckt zu haben scheinen. Denken Sie böswillig und arbeiten Sie daran, zu mildern.

Was ist die sicherste Methode, um die Brieftasche automatisch zu entsperren, Geld zu verschieben und sie dann wieder zu sperren, ohne dass das Passwort möglicherweise kompromittiert wird?

Sie möchten hier zwei grundsätzlich gegensätzliche Dinge, einerseits möchten Sie, dass Ihr Wallet für automatisierte Prozesse zugänglich ist. Andererseits möchten Sie nicht, dass es Hackern zur Verfügung steht, die das System kompromittieren, auf dem die automatisierten Prozesse ausgeführt werden. Beides geht im Grunde nicht.

Deshalb gibt es eine „Hot Wallet“ und eine „Cold Wallet“. Die Hot Wallet enthält eine Menge Bitcoins, die Sie sich leisten können, zu verlieren. Die Cold Wallet hält Bitcoins im Langzeitspeicher.

Auf einer normalen täglichen Basis übersteigen die Einzahlungen in der Regel die Auszahlungen. Ihr automatisiertes System sollte so konzipiert sein, dass es Geld in die Cold Wallet verschiebt, wenn sich zu viel in der Hot Wallet ansammelt.

Gelegentlich können Sie feststellen, dass das ausgegebene Geld das eingezahlte Geld übersteigt. In diesem Fall muss Ihr System Sie warnen, dass die Hot Wallet zur Neige geht. Sie müssen die Situation dann sorgfältig prüfen, bevor Sie Geld manuell aus der Cold Wallet verschieben.