當前位置:
首頁 > 最新 > 主流區塊鏈安全屬性分析——以太幣

主流區塊鏈安全屬性分析——以太幣

區塊鏈安全是信息安全的一個應用領域。

信息安全是指:保證信息系統中的數據在存取、處理、傳輸和服務的保密性、完整性和可用性,以及信息系統本身能連續、可靠、正常的運行,並且在遭到破壞後還能迅速恢復正常使用的安全過程。

本節就三個典型的區塊鏈應用:比特幣、以太幣、Zcash中的以太幣進行分析。

以太幣

以太幣(ETH)是以太坊(Ethereum)的一種數字代幣,和其他數字貨幣一樣,以太幣可以在交易平台上進行買賣。2013年年末,以太坊創始人VitalikButerin發布了以太坊初版白皮書,啟動了項目。以太坊客戶端的源代碼地址在:https://github.com/ethereum,目前有C++,go等多個版本,本文針對go版本進行介紹。

下載go-ethereum源代碼:gitclone https://github.com/ethereum/go-ethereum.git。然後用makeall命令進行編譯,完成後將在build/bin文件夾中生成可執行文件:

以太坊命令

通常情況下,人們只想與以太坊網路進行交互:創建賬戶、轉移資金、部署並與合約進行交互,很多用戶並不關心歷史數據,所以我們可以用以下命令快速地同步到網路的當前狀態:

$./geth --fast --cache=512 console

對於以太坊的開發者,在開發過程中往往希望創建以太坊智能合約時,並不需要支付真實的費用。在這種情況下,開發者不需要連接到主網路,而是通過節點連接到測試網路,測試網路的功能幾乎與主網路完全相同,只是使用以太測試幣:

$./geth --testnet --fast --cache=512 console

其中,-testnet表明連接到測試網路,並創建文件夾~/.ethereum/testnet,測試網路的數據都會存放在這個文件夾中。對於新用戶,需要先創建一個賬號:

>personal.newAccount(「password」)

賬號創建完成後,可以使用>eth.accounts來查看。創建賬號的同時,會生成一個密鑰用於以太坊交易,存放在~/.ethereum/testnet/keystore。這裡的密鑰是加密後進行存儲,使用的加密演算法是AES-128,而AES-128加密所用的密鑰就是創建賬號時用戶輸入的口令。備份密鑰時,只需把keystore中的文件複製到目標文件夾,同時還要備份創建賬號時的口令,為了達到更高的安全性,建議把密鑰備份到多個不同的地方,以便防範火災、洪水、地震等風險。

冷存儲可以提高密鑰的安全性,在一台離線的電腦上生成以太幣地址和私鑰,由這台電腦生成的私鑰永遠不在其他電腦或者網路上出現。以太幣可以發到這個離線生成的地址上面進行保存,使用這些以太幣時,需要在離線電腦上簽名。目前,以太坊官方go-ethereum錢包1.6版本還未實現離線簽名功能,所以還不支持冷存儲。可以使用其他工具進行冷存儲,比如icebox工具:https://github.com/ConsenSys/icebox。

多重簽名也有助於提高以太幣的安全性,可惜我們在以太坊官方go-ethereum錢包1.6版本中沒有發現生成多重簽名的命令,但可在官方發布的web瀏覽器Mist生成多重簽名的錢包合約。

對以太坊交易進行簽名的也是ECDSA演算法,事實上,以太坊和比特幣調用了相同的secp256k1代碼庫。簽名時生成的密鑰也是256比特,密鑰的長度決定了橢圓曲線密碼的安全強度,密鑰越長,安全性就越強。橢圓曲線密碼的數學安全基礎是橢圓曲線離散對數問題(ECDLP),它決定著橢圓曲線密碼的存在和使用。對於規模不是非常大的ECDLP,在現實中可以使用Pollardrho演算法求解出來。

以太坊中生成密鑰時調用了Golang語言中的rand包中的Reader,它是一個密碼應用的偽隨機生成器。在linux系統中,當getrandom(2)可獲取時,Reader就會調用這個函數,否則會調用/dev/urandom;在Windows系統中,Reader將使用CryptGenRandom介面。為了測試rand.Reader生成的隨機數是否足夠隨機,我們用它生成了1200個長度為106的比特流。使用NISTSTS的隨機數測試套件對這些比特流進行了測試,NISTSTS的隨機數測試套件一共有15項測試:單比特頻數檢測、塊內頻數檢測、累加和檢測、遊程檢測、塊內最大「1」遊程檢測、矩陣秩檢測、離散傅里葉檢測、非周期模塊匹配檢測、重疊模塊匹配檢測、通用統計檢測、近似熵檢測、隨機遊動檢測、隨機遊動變體檢測、序列檢測、線性複雜性檢測,測試結果如圖

rand.Reader隨機性測試

由於分析結果很長,我們只截取了前後兩部分內容。從圖中可以看出,絕大部分比特流都通過了測試,僅有很少的比特流沒通過,比如Serial測試中,在1200個樣本中通過了1197個,而只要大於1177就說明這項測試通過。只有randomexcursion(variant)測試例外,只要在749個樣本中,大於733個通過就行了。從整個分析報告可以得知:rand.Reader生成的隨機數通過了NISTSTS的所有15項測試。所以,以太坊中的密鑰是一個足夠隨機的數。需要指出的是:在golang語言中還有一個math/rand包,雖然它也可以生成隨機數,但是當生成密碼學應用領域的隨機數時,最好還是使用crypto/rand包,特別是密鑰的生成。

下一章我們將介紹剩下的一個典型應用——Zcash。

比特幣介紹:區塊鏈安全|主流區塊鏈安全屬性分析——比特幣

感謝機械工業出版社華章分社的投稿,本文來自於華章出版的著作《區塊鏈安全技術指南》。

作者簡介:

黃連金

矽谷Dynamic Fintech Group管理合伙人

吳思進

33複雜美創始人及CEO

曹鋒

PCHAIN發起人,中物聯區塊鏈協會首席科學家

季宙棟

Onchain分布科技首席戰略官,本體聯合創始人,

馬臣雲

北京信任度科技CEO、信息安全專家、產品管理專家

李恩典

美國分散式商業應用公司董事與中國區總裁

徐浩銘

CyberVein數脈鏈項目技術負責人

翁俊傑

IBM 10餘年開發及解決方案經驗,批Fabric應用開發者,NEO核心開發者之一。

矩陣財經出品

轉載請註明:矩陣財經矩陣數字經濟智庫


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 矩陣數字經濟智庫 的精彩文章:

FCoin的模式能持續嗎?

TAG:矩陣數字經濟智庫 |