橢圓曲線數字簽名的應用

買賣虛擬貨幣

Comunion 是一個基於區塊鏈的組織形式 (DAO) 與創業互助網路,為超級個體提供面向數字時代的全新商業基礎設施和價值轉化機制,致力於讓勞動價值 像 資本一樣自由流通、交易和積累。

本系列內容包含:基本概念及原理、密碼學、共識演算法、錢包及節點原理、挖礦原理及實現。

區塊鏈中哪些地方使用了ECDSA?

透過前面系列的區塊鏈原理和技術,大家應該都熟悉交易是如何在區塊鏈系統或者在比特幣、以太坊系統裡面開展的。

在進行交易的環節當中,有一個很重要的訊息,那就是需要進行簽名。

也就是說一筆交易至少涉及到三項內容:付款人、收款人、付款金額

例如,張三給李四付款的時候,張三付款人,李四是收款人,付款金額假設是5個 Token。

當張三準備好這筆交易之後,需要發給全網,當其他人看到這筆交易的時候,他們需要去認證這筆交易是否由張三發起的,這個環節中就使用到了數字簽名技術。

交易簽名如何運用ECDSA?

以特幣為例,具體流程如下圖所示。

交易的模組分為:交易輸入交易輸出,一筆交易由多個輸入或者多個輸出組成。

交易輸入代表付款資訊,交易輸出代表收款資訊。當然裡面還會有付款金額,付款金額的欄位是在交易輸出裡面顯示的。

這種交易型別和我們正常理解的交易是非常類似的,其資金的流向是從交易輸入流向交易輸出,即從付款人流向收款人。

圖的右邊有一個虛線的框,裡面的 ScriptSig 是一個指令碼簽名,這個欄位屬於交易輸入。同理,ScriptPubKey屬於交易輸出。指令碼里麵包含一些資料和操作碼來支援這個指令碼語言的執行。

ScriptSig  和 ScriptPubKey  可以直觀的用中文解釋為:解鎖指令碼鎖定指令碼

為什麼 ScriptSig 又叫解鎖指令碼呢?是因為 ScriptSig 在之前相關連線的交易輸出裡面 鎖定了一些資金。

如果張三要花費之前已有的 Token,也就是要花費一個未花費的交易輸出,那麼其需要在另一筆交易裡面 構造一筆交易輸入,在這個交易輸入裡面 會設定簽名欄位和公鑰,以此證明張三有資格花費 未花費的交易輸出。

這種情況叫做解鎖指令碼,即把之前已有的資金開啟進行使用。

這個過程中,解鎖指令碼里面有兩個欄位資料,<sig> 和 <PubK>(PubKey的簡寫)。這兩個欄位分別代表:簽名和公鑰。兩者由使用者提供,用以解決阻礙。

鎖定指令碼里面也有一些欄位和操作碼:DUP 是複製操作碼;HASh260 是雜湊操作碼;<PubkHash> 是欄位;EQUALVRTIFY 是驗證操作碼;CHECKSIG 也是驗證操作碼。

其整體意思是:執行復制——進行雜湊——執行欄位——驗證是否相等——校驗簽名是否正確。

在驗證簽名的環節,就會呼叫ECDSA裡面的驗籤演算法。

如何使用ECDSA

我們知道了簽名在交易裡面的具體使用位置,那麼 ScriptSig 和 ScriptPubKey 這兩個指令碼語言,是如何執行,以及在執行的過程當中如何使用 ECDSA 呢?

如上圖所示,這裡會將兩個指令碼語言進行堆疊處理,即所有欄位和操作碼全部羅列在右邊,解鎖指令碼里面有2個,鎖定指令碼里面有5個。

第一步,將第一個欄位 <sig>  解鎖,置於堆疊的底部;

第二步,向右移動一格,將 <PubK>  解鎖推送至堆疊頂部,置於 <sig>  的上面;

第三步,DUP 是複製操作碼,它會將剛剛解鎖指令碼里面的 <PubK> (公鑰)進行復制,此時會有兩個 <PubK>,結果被推送至堆疊頂部;

第四步,HASh260 將複製的公鑰進行雜湊,使之變成 <PubKHash>, 公鑰雜湊;

第五步,EQUALVRTIFY 操作碼將 PubKHash 和使用者的 PubKHash 對比,如果一致,則都被移除,然後繼續執行(這裡是為了對公鑰進行認證,來表明公鑰或者地址是否相同);

如果第五步匹配的話,繼續執行第六步——驗證簽名,這裡就用到了 ECDSA,也是交易中很關鍵的一步。

在圖中會看到,在執行最後一個操作碼的時候,堆疊裡面有兩個欄位。

此時 CHECKSIG 操作碼會核查簽名 <sig>  是否與公鑰的 <sig> 匹配,如果匹配,則會在頂部顯示 TRUE,如果不匹配會顯示 FLOSE。

如果返回值是TRUE 的話,此時傳送者也表明了其對傳送 Token 的所有權和使用權。

以上就是橢圓曲線數字簽名(ECDSA)在區塊鏈中的主要應用位置和場景。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;