區塊鏈入門系列 | ECDSA科普:大雄和靜香的情人節
本節講的是橢圓曲線數字簽名演算法ECDSA (Elliptic Curve Digital Signature Algorithm)。
一、大雄給靜香郵寄比特幣
2月14號,情人節。
你是大雄。你有哆啦A夢送你的10個比特幣。你想把這10個比特幣送給靜香。
比特幣只能通過信件郵寄。
你準備一個信封,寫上靜香家地址,把10個比特幣裝到信封裡,貼上郵票,然後把信投遞到郵筒裡。
小鎮的郵筒是完全開放式的,並沒有一箇中心郵局給它上鎖和管理。
胖虎對你的10個比特幣垂涎三尺,他尋機從郵筒下手,把比特幣換到一個寫著自己家地址的信封裡。
哆啦A夢是郵遞員。而且,是一個住在小鎮中的本來就很聰明的郵遞員。
它能在這種情況下確保比特幣的寄達絕對安全可靠嗎?
這一天,哆啦A夢在學校的教室外苦苦思索這個問題。
教室裡,數學老師在給小學生們上數學課。
他忽然靈感出現,設計了一種特別的郵票。
二、哆啦A夢的郵票
哆啦A夢發現了小鎮學校的一個驚天祕密。
這個祕密就是,數學老師只教加法、減法和乘法。
所有人也都只會做加法、減法和乘法。
哆啦A夢設計了一種特別的郵票。這種郵票需要寄信人寫幾個數字。而多拉A夢在送信的時候會先檢查郵票,驗算數字,如果不正確,它就退回這封郵件。
郵票是這麼設計的:
首先,全國的小鎮都有自己唯一的數字編號,大雄他們這個小鎮數字是9。這個數字整個小鎮都公開知道。
然後,每個人都選一個自己喜歡的祕密數字。每人各不相同,而且大家都互相猜不到對方的祕密數字。你是大雄,你選的祕密數字是3。
另外,小鎮的每戶人家都有一個門牌號作為地址。門牌號是用祕密數字乘以幸運數字計算出來的。你是大雄,你家門牌號是你的祕密數字3乘以幸運數字9等於27。靜香家門牌號是45。
當你準備寄信給靜香的時候,先隨機另選一個祕密的幸運數字,別人絕對猜不到,比如你選了10。
然後你計算兩個數字:
(1)用幸運數字10乘以小鎮數字9得到前一個數字90。 (2)用前一個數字90乘以你的祕密數字3得到270,然後再加上靜香家的門牌號45,得到後一個數字315。
最後,你把90和315前後兩個數字寫到郵票上,就可以了。
三、哆啦A夢的驗算
當哆啦A夢送信的時候,就可以用算數來驗算這個郵票是不是大雄貼的,而且寄送物件就是靜香。
它同樣算兩個數字:
(1)用郵票上的後一個數字315乘以小鎮數字9,得到第一個結果2835。 (2)用郵票上的前一個數字90乘以大雄家門牌號27得到2430,再用靜香家門牌號45乘以小鎮數字9得到405,最後把兩個數字加起來,也就是2430加上405,得到第二個結果2835。
Bingo!兩個結果一樣。驗證通過!恭喜大雄,郵件將被準確送達靜香家。
四、胖虎的作弊
有了這個郵票的設計,胖虎就沒有辦法把郵件發往自己家的地址了。因為他不知道大雄的祕密數字,也就沒有辦法在郵票上寫下正確的結果。
如果胖虎強行用自己的祕密數字來計算,會怎樣呢?
胖虎自己的祕密數字是4,他家門牌號是36。
前一個數字,他直接抄襲了大雄的結果90。 然後他用前一個數字90乘以他自己的祕密數字4得到360,然後再加上自己家的門牌號36,得到後一個數字396。
他把這兩個數字寫到郵票上。
那麼他的郵票能夠通過哆啦A夢的驗算嗎?
哆啦A夢拿到郵件,先計算郵票的後一個數字396乘以小鎮數字9,得到3564。 然後哆啦A夢用郵票的前一個數字90乘以大雄家門牌號27得到2430,再用靜香家門牌號45乘以小鎮數字9得到405,最後把兩個數字加起來,也就是2430加上405,得到第二個結果2835。
兩個結果不相等!郵票無效!
嘿~嘿~嘿~ 哆啦A夢得意地笑了。
等等!聰明的讀者,你可能已經發現了一個致命漏洞:如果胖虎把寄件人也改成自己會怎麼樣呢?
那麼哆啦A夢驗算的時候,就會計算郵票的前一個數字90乘以胖虎家門牌號36,加上胖虎家門牌號36乘以小鎮數字9,結果是同樣的3564!
雖說胖虎把郵件傳送給胖虎自己這件事看起來有點奇怪,可是既然數字驗算通過,哆啦A夢也不得不遵照送達。
這一次,哆啦A夢也束手無策了。它不得不求助於一個人,這個人的名字叫中本聰。
五、中本聰的區塊鏈
中本聰很快回復了哆啦A夢的問題,並給出了答案:區塊鏈。
郵件很長,就不在這篇小文裡展開了。
多年以後,哆啦A夢迴憶起當年和中本聰的交流,不無感慨的說:
滿世界的人都以為區塊鏈是密碼學。其實區塊鏈恰恰是比特幣減去密碼學之後所剩下的部分。而這一部分,才是比特幣最具有突破性的所在。密碼學的部分,幾十年前密碼學專家就搞出來了。剩下的那部分,以前都只能用中心化技術來解決。直到中本聰發明了區塊鏈技術。比特幣不是數學,而是經濟學;區塊鏈不是密碼學,而是開放性的網際網路分散式系統。
那麼中本聰為何在密碼學圈子裡兜售比特幣和區塊鏈這一發明呢?關於這一點,哆啦A夢這麼比喻:
就像現在所有女人都夢想容顏永駐。而顯然,當今所有化妝品工廠的產品都不能滿足這一需求。現在好比中本聰發明了一種新的配方,具備劃時代的神奇功效。你說他是應該去化妝品工廠兜售配方好呢,還是直接做成產品去目標使用者那裡兜售他的化妝品好呢?
六、為什麼我們都不會做除法
為什麼我們都不會做除法呢?為了向親愛的讀者朋友說明這個問題,筆者特別準備了這道“小學奧數題”:
下圖中,蘋果、香蕉、菠蘿是三個正整數,請問它們分別是什麼數字?
試試看?體驗一下“除法”的難度。
是的,如你所料,這貨就是一個如假包換的橢圓曲線方程。也就是說,它可以變換成這種形式的方程:
加法是這麼算的(紅色就是橢圓曲線的樣子——換了一條容易作圖的):
乘法是連加:k乘以P就等於k個P相加。
至於除法嘛。假設k乘以P等於T,告訴你P和T,請計算k。雖然你明知道k就等於T除以P,但就是算不出來。
七、橢圓曲線數字簽名演算法
比特幣用了一條在中本聰之前鮮有人用的橢圓曲線secp256k1:
它在實數域長這個樣子:
但是,其實它是定義在所謂的模素數上的,一下子就毀容成大概這個鬼樣子了:
而大家常用的則是由美國國家標準和技術研究院NIST和美國國家安全域性NSA聯袂推薦的、1994年12月納入標準的secp256r1。
2007年11月15日,美國知名IT雜誌《連線》發表了對於NSA標準的質疑文章。
2013年6月,前美國中央情報局(CIA)職員、美國國家安全域性(NSA)外包技術員愛德華·約瑟夫·斯諾登(Edward Joseph Snowden, 1983-)出逃。
(全文完)
來源:劉教鏈(微信公眾號)