簽名以及身份的管理
1.簽名
1.1 特性
- 僅自己可以自己特定的簽名,但是別人一看就知道就可以進行驗證;
- 與特定文件關聯,不能拿着我這個簽名去與其他文件關聯。
1.2 簽名算法過程
1.2.1 總的流程
1.2.2 各個詳細的分流程
1.3 簽名的不可僞造性以及相關試驗
1.3.1 簽名的特性以及相關約束
由於需要簽名做到不可僞造性那麼就需要對相關參數以及函數算法進行一些相關約束,約束如下:
- 我們注意到和都可以採用隨機算法;
- 並且最好是隨機的,因爲它需要爲不同的人生成不同的密鑰;
- 而則需要是確定的。
1.3.2 試驗
對於不可僞造性我們可以做一個實驗:
-
實驗內容:
- 不可僞造性遊戲是對手(黑客)和挑戰者一起玩這樣一個遊戲:如果黑客可以在一個之前沒有見過的消息上進行簽名,那麼黑客就贏得這個遊戲;反之,如果黑客做不到,挑戰者就贏得遊戲,從而可以證明這個數字簽名方案是不可僞造的。
-
實驗圖示:
- 大致過程就是黑客向挑戰者不斷髮送信息讓其進行簽名,黑客不斷收集簽名信息得到其規律,最終目的做出一個不在剛剛的簽名信息範圍之內的信息以及簽名使得挑戰者那裏依舊能夠確認成功。
- 將允許黑客選擇一些文件的簽名,不限時長,只要猜測的數量合情
- 合情猜測數量的意思是,我們允許攻擊者嘗試猜測的次數高達百萬,但數量高達 就不行了。
1.4 對實踐的考慮以及最終的實現
1.4.1 對實踐的考慮
-
對算法的隨機性有一定的要求,好的隨機性才能保證算法的安全,不然別人很容易就通過統計分析去進行破解,尤其在比特幣這樣一個公開的系統中;
-
信息大小不斷變更,而簽名算法由於計算壓力對長度是有限的,因爲需要是整個信息進行簽名,而不像hash可以進行分割,所以一個可行的辦法就是:
- 首先對信息進行hash摘要提取;
- 對信息的摘要進行簽名,摘要完成了簽名也間接地對信息完成了簽名,並且hash函數具有碰撞阻力;
-
在區塊鏈中可以對hash指針進行簽署,簽署了hash指針表示簽名了該結點,由於關聯性同時也就簽署了前面的節點,後面的是之後簽署的自然就與當前的無關
- 簽名覆蓋(或者說保護)整個結構——這不僅僅是哈希指針本身,還包括哈希指針指向的整個區塊鏈。比如,如果簽署了區塊鏈末尾的哈希指針,其結果就是你有效地數字簽署了整條區塊鏈
1.4.2 簽名算法
比特幣使用ECDSA算法,而不是標準橢圓曲線“secp256k1”[預計提供128位安全保障,即打破這個算法的難度與執行對稱性密鑰運算(如破解哈希函數)一樣困難]。雖然這個曲線是公開標準,但除比特幣以外鮮有使用,其他使用ECDSA的應用(如安全網絡瀏覽時的TLS [2] 密鑰交換)通常都使用更常見的“secp256k1”曲線。這就是比特幣的一個古怪之處,因爲在比特幣系統早期實施中被中本聰選定(參見原版前言),現在已很難改變。
注意:
- 使用ECDSA時,確保隨機性良好來源至關重要,因爲不良來源將可能導致密鑰信息的泄露;
- 僅僅只是在生成簽名時使用了不良隨機,而你使用的密鑰完美無缺,你的個人密鑰還是有可能泄露。
1.4.3 簽名的參數
個人密鑰:256位
公鑰(未壓縮):512位
公鑰(壓縮):257位
待簽名信息:256位
簽名:512位
注意,嚴格來講,雖然ECDSA只能簽署256位的信息,但這存在問題,因爲信息在簽署之前總是已經經過哈希壓縮,因此,任何大小的信息都能被有效簽署。
參考文章
- 解讀區塊鏈全套六冊.第四章.第四節——簽名算法部分