Cryptography

將加密的私鑰儲存在鏈上

  • May 3, 2016

在鏈上儲存加密的私鑰有多安全?下面範例中的資產是否比加密它們的主密鑰更容易暴力破解?

contract MyPrivateKeys {

 struct encryptedKey {
     string assetName;
     address publicKey;
     string encryptedPrivateKey;
 }

 encryptedKey[] CryptoAssets;


        function newAsset(string assetName, address publicKey, string encryptedPrivateKey) {

               CryptoAssets.push(encryptedKey({
                  assetName: assetName,
                  publicKey: publicKey,
                  encryptedPrivateKey: encryptedPrivateKey
               }));
        }

        function editAsset(){}

        function deleteAsset(){}
}

例子:

資產使用主密鑰加密:6b2785d6361628b6356153f4835ae27234f558f32cb3374d32d9c907884f6c46

  assetName: "BirthCertificate",
  publicKey: 0xc23af37f5d65c5b305aff444a7f3f1908069a0a6,
  encryptedPrivateKey: "U2FsdGVkX18x0qU589OhvSRHhAJGROtnu0inGJ2kgLX6tAE8XSTLTrhp09qCCYPR8RNAsm7ZZ+6mKqZ5tiLqPd3m1lDWF17pWg+kJZhzF77ijjZcpkOSu/3T+FZ5xMPN"

  contract.call.newAsset(assetName, publicKey, encryptedPrivateKey)

  assetName: "MarriageCertificate",
  publicKey: 0x4035f990da18bb02f79782bcdfdecd02b0e91ad6,
  encryptedPrivateKey: "U2FsdGVkX1+tpDCLlhWSfw7SJ8HaBYC9AjSmpl2ost9Rao3yYSiiAbmtr9hweM9bKSOsJGDKWrdl4iMSX8FpJ/pOBhv7WHOQXy9CGfuCev9lwqWg+/Ofk6VaXchrEQon"

  contract.call.newAsset(assetName, publicKey, encryptedPrivateKey)

它比將密鑰儲存在區塊鏈上要安全得多,比將未加密的密鑰儲存在區塊鏈上要安全得多。這不是我會考慮做的事情。

讓我們分解一下。

假設,假設我有一個 ETH 賬戶,裡面有你想要的 1000ETH。你如何得到它?你不能暴力破解我的密碼,因為你沒有我的私鑰。你不能暴力破解我的私鑰。你唯一的選擇是破解我的電腦(因為它確實在那台電腦上)。所以,基本上,你不可能/真的很難得到我的帳戶。

現在,假設你不想要我的1000ETH。你只是想竊取 ETH。你會怎麼做?你可能會編寫一些針對 ETH 社區中的人的惡意軟體或鍵盤記錄器。或者您可以針對正在創建/生成錢包的客戶。這發生在有腦錢包的比特幣社區。人們看到了創建方法的一個弱點,並利用它來竊取 BTC。

如果您不熟悉,腦錢包讓最終使用者創建創建私鑰的種子,然後創建地址和帳戶。如果您通過 geth 創建錢包,您將擁有獨立的私鑰和密碼。那是某人必須獲得的兩條資訊,其中一條資訊是隨機生成的。

有了腦錢包,你只需要一個種子。更危險的是,他們讓使用者生成種子,而不是真正隨機地生成種子,而使用者在這方面很糟糕。於是人們編寫了腳本,根據常用的密碼列表等生成私鑰,從而獲得了私鑰,從而竊取了資金。

這與您的問題有什麼關係?好吧,您實際上是在使用私鑰/密碼對並製作它,因此您只需要密碼。就訪問帳戶所需發生的事情而言,這幾乎與腦錢包相同,即使方法不同。一個詞可以訪問錢包,因為你已經給了他們加密的私鑰。

顯然有一些緩解方法,例如確保密碼是真正隨機生成的並且具有足夠的加密,因此不值得暴力破解這些帳戶。您還可以查看BIP 39以獲取密碼/助記符。

此外,還有一定程度的風險/回報。即使您添加了弱加密,例如 8 個字元的密碼或使用者選擇的密碼*,*如果只有一個帶有 10ETH 的密鑰,人們不太可能嘗試破解加密。如果像這樣儲存數千個密鑰,那麼獎勵會變得更大,更多的人會花費更多的時間和資源來打開它們。然而,由於人們多年來一直在使用加密貨幣,因此許多人都有模組化程序,可以輕鬆適應您用來保護帳戶的任何機制。只需要一個無聊的傢伙、一個程序和一個 s3 伺服器就可以強行打開一個帳戶。設置和執行所需的時間是該等式中最有價值的東西。伺服器和程序很便宜,還不如免費。

所以,總而言之,這是一個非常糟糕的主意,可能會導致一些非常糟糕的事情,特別是如果你試圖建立一個多人這樣做的服務。這是一個巨大的風險,我什至不會考慮承擔。最後一點,如果我的大腦真的消失了,我決定將我的私鑰儲存在區塊鏈上,我當然不會將其標記為“encryptedPrivateKey”。

這實際上與詢問相同 - 如果我將加密的私鑰放在公共網站上,它的安全性如何?

儲存在乙太坊區塊鏈上的資訊可供公眾閱讀。這種方法的安全性實際上取決於您對加密本身強度的信心。

引用自:https://ethereum.stackexchange.com/questions/3492