從大量離線私鑰中觀察和消費
我們計劃在我們的 eshop 網站上接受比特幣。我們想要計劃做的是:
1)保持所有私鑰始終離線(冷儲存)。
- 生成至少 100,000 個密鑰對,其中只有一個將儲存在我們的 Web 伺服器上。
3)經常在我們的網路伺服器上更改我們的比特幣地址,以防止第三方知道我們總共收到了多少比特幣。Web 伺服器將只包含我們的公鑰(比特幣地址),而不包含任何私鑰。
現在我的問題是:
I) 有沒有辦法監控發送到我們所有地址的所有比特幣的總和?
像錢包這樣的東西,它支持導入大量“只看”地址而不需要導入私鑰?如果錢包是應用程序,它必須支持 SOCKS 代理連接。(Armory 允許僅手錶鍵,但我不知道它是否支持批量導入和 SOCKS 代理?此外,據其開發人員稱,截至目前,它似乎正遭受嚴重的 RAM 過度使用錯誤……)。
II) 有沒有辦法一次性出售曾經發送到我們所有地址的所有比特幣的總和?
III) 攻擊者是否能夠找出我們總共賺取了多少比特幣?
謝謝!
直接回答您的問題:
I) 從技術上講,這並不太難。在每個收到的新塊上循環每個新交易不會佔用太多資源,並且根據 100,000 個公鑰檢查每筆交易完全沒有問題。但是,我不知道有什麼工具可以做到這一點。(例如blockparser可以在一分鐘內輸出整個區塊鏈中所有地址的所有餘額。)
II) 不可以。您不能在一筆交易中轉移所有收到的比特幣,因為一筆交易的最大大小為 1 兆字節。這將能夠一次將錢花在 4000 個不同的地址上,但不能再多了。當然,您可以“一次性”將所有私鑰交給其他人,這使他們能夠花費硬幣 - 但在將所有硬幣轉移到新地址之前,這樣的一方不太可能接受銷售成功,以防萬一您也保留了私鑰。
III)不,如果你阻止攻擊者學習所有公鑰。例如,如果目前 Web 伺服器上的公鑰很容易查看,則攻擊者只需輪詢您的網站,記下所有看到的公鑰,然後檢查所有交易中的密鑰。但是,如果您僅向合法購買者(或其他人)透露公鑰或從不重複使用密鑰,則攻擊者無法知道屬於您的全套密鑰。這也需要在硬幣的支出方面有所注意 - 如果您進行交易以某種方式將硬幣連結到您的網站,則可以觀察到這一點。
但是,有一些更高級的使用比特幣公鑰的方法可以實現比您在此處要求的更多的效果。例如,您可以看到Hierarchical Deterministic Wallets。選擇很多,實現目標的最佳方式可能不是最明顯的方式。
為了讓您的伺服器監控所有地址,您需要將所有地址都放在伺服器上,這違反了您的要求,即黑客無法看到您的組合餘額。
考慮到這一點,據我所知,您有兩種選擇:
- 使用桌面應用程序。軍械庫、QT 等——雖然我不確定它們如何處理超過 100 萬個地址或密鑰,但我有 75% 的把握他們沒有批量導入。
2)使用另一台伺服器 - 託管或什至在您的家庭網路中(Raspberry Pi 有人嗎?),它知道您的所有公鑰,但與您的前端伺服器完全分離。然後,它可以使用比特幣 API(Blockchain、BTCBalance.net、blockexplorer)並定期通過所有 1M 密鑰檢查其餘額。從你的網路內部(這是理想的,因為在沒有現場的情況下進行外部訪問的機會非常低),你可以呼叫伺服器,它會告訴你在最後一次計數時總共有多少比特幣。我目前有一個 Raspberry Pi 設置來執行類似的重複操作(儘管備份不是比特幣),它做得非常好。
您也可能能夠通過代理路由選項 2)。