管理大量接收比特幣地址的最安全方法是什麼?
假設我想執行一個大項目,使用者可以不斷請求新地址以將比特幣存入他們的線上賬戶。我想我將不得不預先生成數以千計的比特幣密鑰對並將它們導入到我伺服器上正在執行的 bitcoind 實例中。每次使用者請求一個新地址以將比特幣存入他的帳戶時,我都會為他分配一個新地址。然後,當任何導入的地址收到交易時,bitcoind 會通知我。
第一個問題:**bitcoind 是否能夠實時監控數千個地址?**我應該為此計劃一台專用機器嗎?
第二個問題:由於我需要將收到的比特幣轉移到冷藏庫並每天多次自動支付,我還需要將私鑰儲存在線上伺服器上。我可以使用 wallet.dat 密碼保護,但**在不洩露密碼的情況下自動解鎖錢包、轉移資金然後再次鎖定錢包的最安全方法是什麼?**如果密碼出現在程式碼、配置或數據庫中的任何位置,我認為它不安全。而且我不想每天手動輸入幾次密碼。
第三個問題:每次我將資金從收款地址轉移到支付和冷庫時,bitcoind 會生成一個新的“更改地址”嗎?我問是因為如果 bitcoind 使用導入的地址之一進行更改,它看起來好像客戶收到了比特幣。
您不想在伺服器端儲存任何已資助的密鑰,幾乎不斷有主機被入侵以竊取資金。大多數比特幣系統使用一種稱為“熱錢包”的東西,並將其餘部分轉移到伺服器控制之外的單個紙質錢包中。然後是管理員角色來回移動資金以保持熱錢包的資金。這顯著降低了風險,並且意味著攻擊者最多可以獲得熱錢包中的資金量。
bitcoind 是否能夠實時監控數千個地址?
是的,但你真的不想在伺服器上儲存一個小熱錢包以外的任何東西。如果您的安全性不完美,那麼它就會被盜。如果習慣了
什麼是自動解鎖錢包、轉移資金然後再次鎖定而不會洩露密碼的最安全方法?
你不能確定。即使錢包是“加密的”,攻擊者也可以坐在伺服器上等待你解鎖。這也是為什麼您需要使用離線儲存和熱錢包來減輕伺服器受損的原因。
每次我將資金從收款地址轉移到付款和冷藏庫時,bitcoind 會生成一個新的“更改地址”嗎?
是的。這就是為什麼提供給客戶的所有地址都是一次性的。您每次為熱錢包創建一個新的接收地址
bitcoind
,並且不再向客戶顯示它。他們不需要,他們的資金不限於任何特定的比特幣輸出。他們的餘額只是你的數據庫中的一個外部值,你碰巧持有它的資金。理想情況下,設置如下所示:
伺服器:
- 一個
bitcoind
熱錢包,創建新的接收地址並將其呈現給客戶。使用walletnotify
或blocknotify
將每個使用者收到的餘額更新到外部數據庫,如 Postgres 或 Redis。- 檢查腳本確保
bitcoind
永遠不會在其錢包中儲存超過 50 BTC,如果餘額超過 50BTC,則會執行腳本生成具有確定性公鑰的新密鑰(伺服器永遠不必知道私鑰來執行此操作)或使用預先生成的列表。它將多餘的部分發送到該地址以確保其安全。- 如果在使用者提出提款請求時錢包沒有資金支付給使用者,請表現出軟實力並通知管理員熱錢包需要重新充值。說明這是為了保護使用者。
離線:
- 持有冷錢包私鑰的軍械庫錢包。理想情況下,這將是完全離線的,在保險箱中有紙質備份。
- 控制權只交給管理員,管理員知道伺服器上的熱錢包充值地址。在需要時,他們會根據通知將資金轉移回伺服器
非常複雜,但這大致是其他系統的工作方式,除非你想像<http://inputs.io/>那樣因為疏忽而失去了整個 4000 BTC 的熱錢包。在這種情況下,你永遠不會太偏執。在這種情況下,你最大的損失將是 50BTC 熱錢包,這比失去一切要好。
玩安全。
什麼是自動解鎖錢包、轉移資金然後再次鎖定而不會洩露密碼的最安全方法?
你在這裡想要兩個根本相反的東西,一方面你希望你的錢包可以訪問自動化流程。另一方面,您不希望黑客可以使用它來破壞執行所述自動化流程的系統。從根本上說,你不能兩者兼得。
這就是為什麼你有一個“熱錢包”和一個“冷錢包”。熱錢包包含大量您可以承受損失的比特幣。冷錢包長期儲存比特幣。
在正常的日常基礎上,資金投入通常會超過資金流出。如果熱錢包中積聚過多,您的自動化系統應設計為將資金轉移到冷錢包。
有時您可能會發現資金流出超過資金流入。在這種情況下,您的系統將需要提醒您熱錢包即將用盡。然後,您需要仔細審核情況,然後再手動將資金從冷錢包中轉出。