摘要:首先,和擁有一對密鑰,接著,和互換公鑰,與互換公鑰互換公鑰后便可使用一種稱為橢圓曲線密鑰交換體制見維基百科的常見技術(shù)創(chuàng)建雙方的共享密鑰。上文僅是的基本介紹,下文將講解怎樣使用為區(qū)塊鏈上的信息加密。
你或許已經(jīng)知道,區(qū)塊鏈上的交易大多都是透明公開的,用戶既可以直接通過RPC查詢NEO節(jié)點,也可以使用NEOTracker或NEOScan等方便好用的區(qū)塊鏈瀏覽器瀏覽交易記錄、余額、智能合約或區(qū)塊鏈上的其他數(shù)據(jù)。但是,開發(fā)某些應(yīng)用時必須考慮到隱私性,通訊應(yīng)用就是個典型的例子。如果你想給某人發(fā)送一條信息,你想必不希望其他人看到這條信息,因為其中可能包含一些敏感內(nèi)容。本文筆者將分享一些NEO區(qū)塊鏈信息加密的基本知識。
首先讓我們再來研究一下NEO區(qū)塊鏈交易的剖析圖。
NEO交易
上圖顯示的是交易的基本內(nèi)存結(jié)構(gòu)。當(dāng)用戶在鏈上發(fā)送GAS或NEO時,錢包客戶端就會創(chuàng)建這個數(shù)據(jù)包并向全網(wǎng)廣播。如果你還想了解輕客戶端創(chuàng)建或交易基本結(jié)構(gòu)的詳情,請參閱Andrei在Steemit上發(fā)布的《如何創(chuàng)建NEO輕客戶端——區(qū)塊鏈開發(fā)者的入門“毒品”》。
關(guān)于信息通訊,我們關(guān)注的只是緊隨輸入數(shù)據(jù)之后的元數(shù)據(jù),但NEO交易還有一個鮮為人知的功能,即用戶可以給任何交易附加交易屬性。交易屬性是一個廣義的概念,基本上指額外的數(shù)據(jù)信息。所以用戶在發(fā)送任意數(shù)量的NEO或GAS時都可以在交易屬性域中附加信息。注:上述機制不適用于NEP-5代幣資產(chǎn)。
例如我可以給我的朋友發(fā)送0.0000001個GAS并附上信息“你好”。盡管我舉例說明的這則信息看似無關(guān)緊要,但它卻能永久地存儲在區(qū)塊鏈上,且無法刪除。但正如我之前所說的,如果每個人都能看到這則信息,那這則信息也失去了意義。所以我們應(yīng)該怎樣防止信息泄漏呢?
回顧總結(jié)一下,我們希望實現(xiàn)以下目標(biāo):
上述操作理論上來說非常簡單,我可以創(chuàng)建一個密鑰來加密信息,然后把密鑰告訴朋友,接著他(她)就能使用密鑰來解密信息了。
但如果我想給10個甚至100個朋友發(fā)送信息呢?如果用創(chuàng)建密鑰的方法,我就需要為每個朋友創(chuàng)建一個密鑰,并追蹤所有密鑰,因為如果他們共用一個密鑰,那么他們就能互相解密信息了。此外,怎樣才能把我創(chuàng)建的密鑰安全地發(fā)送給朋友呢?
回顧總結(jié)一下,在區(qū)塊鏈上發(fā)送加密信息需要完成以下步驟:
生成密鑰
將密鑰告知朋友
使用密鑰加密信息
將加密信息附加在NEO交易的交易屬性域中并發(fā)送
創(chuàng)建新錢包涉及四個關(guān)鍵要素:公鑰、私鑰、NEO地址和WIF。
通過WIF或私鑰可以推斷公鑰和NEO地址,但反之卻不可行。下面我們就來看下怎樣使用這些要素來生成密碼。
我繼續(xù)沿用密碼學(xué)的經(jīng)典案例Alice和Bob的故事。Alice想給Bob發(fā)送一條僅限他倆閱讀的信息,想要實現(xiàn)這點,Alice和Bob之間就得有一個共享密鑰。相當(dāng)于步驟1-2的操作。
首先,Alice和Bob擁有一對密鑰,
接著,Alice和Bob互換公鑰,
Alice與Bob互換公鑰
互換公鑰后便可使用一種稱為橢圓曲線密鑰交換體制(ECDH)(見維基百科)的常見技術(shù)創(chuàng)建雙方的“共享密鑰”。(https://en.wikipedia.org/wiki...)
ECDH是一種匿名密鑰協(xié)商協(xié)議,密鑰對可基于此協(xié)議利用橢圓加密技術(shù)生成共享密鑰。
那么現(xiàn)在加密所需的所有要素都交代完畢。
使用公鑰和私鑰生成共享密鑰
我不會演示共享密鑰生成過程涉及的所有算法,請參考上方鏈接深入了解ECDH。
下方是我編寫的Go程序,演算結(jié)果如下(私鑰已移除)
Alice’sNEO adress = AQpkhLEdcvmBbBb1TAb7BeVyLTweHSfTe5
Bob’s NEO address = AH6Wd2j3d6BQhSDSSyGPjDKTgii2gxHLPW
Alice’s public key =03c8cbdc902fc302329132c56a8c9535f9c86952ddf539679fc1ba29091aaaf2da
Bob’s public key = 03c075742edf955c47700586a849b453b21ee5a50129546576b673579600aef557
Alice’s shared secret (Bob’s public key + Alice’s private key) =2e29b2afffecec017e3dd11e2061cae2a77957d9cc364cf7c837c8efc95f94d5
Bob’s shared secret (Alice’s public key + Bob’s private key) =2e29b2afffecec017e3dd11e2061cae2a77957d9cc364cf7c837c8efc95f94d5
結(jié)果顯示Alice和Bob的共享密鑰是完全一致的,故稱之為“共享密鑰”。
現(xiàn)在Alice和Bob可以使用衍生的共享密鑰和對稱密鑰算法(見維基百科:https://en.wikipedia.org/wiki...)(如高級加密標(biāo)準(zhǔn),見維基百科:https://en.wikipedia.org/wiki...)來加密信息了。
使用共享密鑰加密信息
信息已安全加密亟待發(fā)送,這時我們將加密信息插入到NEO交易的交易屬性域中,得到的結(jié)果如下。
Alicesent QcwFUOqIaUY1heZi3eutnTMQUMy4EwrLyA== to Bob
Bob sent pZWXtZeg6-pTHlk2deInSDcL9NaVzZm-xUEUA8d__g== to Alice
在不解密的情況下,我們就無從得知Alice與Bob的對話內(nèi)容,但如果沒有共享密鑰也就無法完成解密。
所幸Alice與Bob先前互換過公鑰,因此兩人對共享密鑰都有訪問權(quán)限,因此他們可以使用共享密鑰來解密對方發(fā)送的信息。
使用共享密鑰解密信息
這就是使用ECDH加/解密信息的方法。
回顧總結(jié)一下,Alice與Bob互換了公鑰,因此可生成完全一致的共享密鑰。共享密鑰可用來加解密各自的信息。上文僅是ECDH的基本介紹,下文將講解怎樣使用ECDH為NEO區(qū)塊鏈上的信息加密。
Bob可以給Alice發(fā)送0.00000001個GAS,并在交易屬性域0x02或0x03中附上他的公鑰。
鑒于Alice知道Bob的地址并且知道Bob給自己發(fā)送了一筆交易,因此應(yīng)用程序應(yīng)該可以從交易屬性數(shù)據(jù)中獲取Bob的公鑰。
她的應(yīng)用可以使用Bob的公鑰和Alice的私鑰生成一個共享密鑰,使用共享密鑰加密信息,再將此加密信息放入交易屬性域oxfo中,同時將Alice的公鑰放入oxo2中。
收到交易信息后,Bob的應(yīng)用可以抓取Alice附在交易屬性中的公鑰與加密信息,接著開始解密。
閱讀NEO網(wǎng)絡(luò)協(xié)議文檔了解交易屬性域的用法。(http://docs.neo.org/en-us/nod...)
上述流程的示意圖如下。
當(dāng)然,這篇文章并不能手把手教大家開發(fā)一個NEO區(qū)塊鏈實時通訊應(yīng)用,但有助于大家了解安全通訊的概念。
信息加密還有一個伴隨效應(yīng)就是GAS的經(jīng)濟效益,GAS的最小單位就是區(qū)塊鏈上發(fā)送加密信息所產(chǎn)生的費用。
希望通讀本文后你能對加密貨幣的加密技術(shù)有更深入的了解,如果你有任何問題,請隨時聯(lián)系我,我的twitter賬號是@imapisit,郵箱是apisit@o3.network。
感謝Andrei對本文的審校與編輯。
原文出處:https://medium.com/proof-of-w...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42862.html
摘要:編譯器介紹編譯器可將文件編譯為格式,在虛擬機中運行。編譯器支持語言子集語言子集與的關(guān)系類似于蟒蛇與蟒屬的關(guān)系。 showImg(https://segmentfault.com/img/bVbkVe2?w=800&h=480); neo-boa編譯器介紹 neo-boa編譯器可將Python文件編譯為.avm格式,在Neo虛擬機中運行。NEO虛擬機可在Neo區(qū)塊鏈上執(zhí)行合約。 編譯器支...
摘要:在社區(qū)開發(fā)的一些最新工具集的幫助下,出現(xiàn)了四步流程法,從而進一步加快了開發(fā)效率。兩步流程法傳統(tǒng)上來說,智能合約開發(fā)有兩步開發(fā)流程編碼和測試。四步工作流程法開發(fā)智能合約對于編輯和調(diào)試階段,我建議使用兩種方法和。 摘要:開發(fā)NEO智能合約的典型開發(fā)流程有兩個實際階段:編碼(在IDE中編碼并將源碼編譯為.avm文件)以及測試(在測試網(wǎng)上部署、調(diào)用、檢查結(jié)果)。這個工作流需要編譯和部署來調(diào)試任...
摘要:在社區(qū)開發(fā)的一些最新工具集的幫助下,出現(xiàn)了四步流程法,從而進一步加快了開發(fā)效率。兩步流程法傳統(tǒng)上來說,智能合約開發(fā)有兩步開發(fā)流程編碼和測試。四步工作流程法開發(fā)智能合約對于編輯和調(diào)試階段,我建議使用兩種方法和。 摘要:開發(fā)NEO智能合約的典型開發(fā)流程有兩個實際階段:編碼(在IDE中編碼并將源碼編譯為.avm文件)以及測試(在測試網(wǎng)上部署、調(diào)用、檢查結(jié)果)。這個工作流需要編譯和部署來調(diào)試任...
摘要:區(qū)塊鏈旨在通過引入點對點連接這一概念來解決這個問題。最后,區(qū)塊鏈與不變性同義,這意味著數(shù)據(jù)是可追蹤和可審查的。區(qū)塊鏈?zhǔn)沟眠@一過程變得相對容易了一些。為了解釋在區(qū)塊鏈網(wǎng)絡(luò)中查看或使用數(shù)據(jù)的權(quán)限被視為一項資產(chǎn)。 摘要: 區(qū)塊鏈和人工智能,這兩種常常被誤解的技術(shù),它們怎樣增強數(shù)據(jù)處理能力?本文將對其進行詳細介紹。 點此查看原文: http://click.aliyun.com/m/42759...
摘要:區(qū)塊鏈旨在通過引入點對點連接這一概念來解決這個問題。最后,區(qū)塊鏈與不變性同義,這意味著數(shù)據(jù)是可追蹤和可審查的。區(qū)塊鏈?zhǔn)沟眠@一過程變得相對容易了一些。為了解釋在區(qū)塊鏈網(wǎng)絡(luò)中查看或使用數(shù)據(jù)的權(quán)限被視為一項資產(chǎn)。 摘要: 區(qū)塊鏈和人工智能,這兩種常常被誤解的技術(shù),它們怎樣增強數(shù)據(jù)處理能力?本文將對其進行詳細介紹。 點此查看原文: http://click.aliyun.com/m/42759...
閱讀 1329·2021-09-04 16:40
閱讀 3455·2021-07-28 00:13
閱讀 2878·2019-08-30 11:19
閱讀 2611·2019-08-29 12:29
閱讀 3167·2019-08-29 12:24
閱讀 1122·2019-08-26 13:28
閱讀 2386·2019-08-26 12:01
閱讀 3445·2019-08-26 11:35