作者:何巖,禁止轉載。
0.前言
Bitcoin的第一個版本已經上線,它的意義在于,展現了系統(tǒng)的使用場景。
1.舍棄賬戶模型
自從Bitcoin第一個版本(v0.0.1)上線,咖啡店的生意越來越好,老板Bob顯然做了一個明智的決策。
中本聰卻越來越煩惱:“這么多人來找我注冊賬號和兌換Bitcoin,都沒時間編程了,我得想想辦法。把兌換工作交給老板Bob吧?!?/p>
中本聰說:“我說,老板,現在越來越多的人來找我兌換Bitcoin,我都成了人肉交易所啦,沒時間升級系統(tǒng)了,要不兌換的工作你來做吧?!?/p>
Bob說:“好啊,正合我意,不過我可以調整匯率嗎?”
中本聰說:“當然可以,這符合自由市場經濟學理論?!?/p>
Bob高興的答應了,中本聰將自己的賬號密碼告訴了Bob,咖啡館就正式成為了Bitcoin的線下交易所。
中本聰感到輕松了很多:“那么,就還剩下用戶注冊的功能。”
中本聰一邊思考著,一遍拿出筆記本準備開始編碼。
忽然,有個大膽的想法在中本聰的腦子里閃過:“能不能徹底的去掉用戶注冊呢?”
之所以要有用戶注冊功能,是因為每個用戶都要在user.txt中創(chuàng)建一條賬號記錄。
每個用戶的賬號信息只包括三個字段:用戶名、密碼、余額。
如果能用其他的方式來替代這三個字段,那么就可以舍棄“賬戶模型”了。
首先是用戶名,可以用賬本替代。因為每筆交易記錄都包含著付款方和收款方的用戶名,所以賬本(transaction.txt)可以代替賬戶(user.txt)定位出用戶名。
其次是余額,賬本也可以替代。因為賬本就是交易流水,累計交易流水可以得出用戶的余額。所以賬本(transaction.txt)可以替代賬戶(user.txt)實現余額。(具體獲取余額的邏輯見下圖)

解決了用戶名和余額之后,最難的部分是如何去掉密碼。
密碼的作用是向服務端證明Alice是真正的Alice,而不是一個叫Calor的家伙的冒充,除非Calor知道了Alice的賬號密碼。
所以密碼的本質是一把鑰匙。
那么除了密碼,有沒有其他方式呢?
“用對稱加密的方式可以嗎?”中本聰思考著。
2.對稱加密
對稱加密是一種很常見的加密方式。
舉個例子:趙四在網上發(fā)送了一段消息給謝大腳:“今天晚上11點小河邊見”。但是這個消息在網上是明文,一旦被別人截獲,他倆不可告人的秘密就暴露了。
對稱加密就可以解決他們的擔憂:趙四將消息用一種通用的加密算法加密后,明文會變成密文,密文長成這個樣子:“U2FsdGVkX18tGXt20Jb/muCW7ipyKF5fTbNV9gUkJZxRIVNGk6ziokkrOXyZ8qkh”。即便被人截獲,也看不懂是啥意思。
將明文和密鑰作為參數,傳入加密算法,計算后得到密文。
用偽公式表達為:Function加密算法(明文,密鑰) = 密文
加密算法是公開的,但是密鑰是保密的。趙四和謝大腳擁有內容相同的密鑰,別人由于不知道密鑰,就無法解密。(見下圖)

如果將趙四換成Alice,將謝大腳換成Bitcoin的服務端,Bitcoin的就擁有了通信加密的能力。
密鑰最初在服務端生成,在Alice第一次登陸時,將其分配給Alice,Alice收到密鑰后將其存儲在瀏覽器里。
服務端還需要存儲Alice和此密鑰的對映關系。
之后,Alice每次發(fā)送的消息,都是經過加密后的密文。
服務端接受到Alice發(fā)送的密文消息,就可以用相同的密鑰進行解密。(見下圖)

但是選擇加密來替代密碼,能解決我們的根本問題嗎?
我們的最初的目的還記得是什么嗎?
我們的根本目的不是舍棄密碼字段,而是要舍棄賬戶模型,如果舍棄了密碼,確引入了密鑰,等于換湯不換藥,賬戶模型還是必須存在,沒有本質變化。只不過用戶的“鑰匙”由密碼換成了密鑰。
用戶注冊則可以看作是服務端預先給用戶分配“鑰匙”。(見下圖)

“可不可以讓用戶獨立創(chuàng)建出‘鑰匙’呢?”
中本聰再次陷入了思考之中......
“可以用非對稱加密。”對面座位的‘大胡子’一字一頓的說道。
中本聰看著大胡子,他面前也放著一臺筆記本:“你也是程序員嗎?”
“是的”那人依舊面無表情。
中本聰熱情的伸手過去:“哈,能在中途鎮(zhèn)遇到開發(fā)者太不容易啦,你好,我叫Satoshi,你叫?"。
“Gilfoyle",這次他眨了一下眼睛,還微微的點了一下頭,估計那就是在示好吧。(見下圖)

這一歷史性的時刻真應該被拍成照片,中途鎮(zhèn)的兩位天才程序員終于相遇了,Bitcoin在他倆的長期合作中,遠遠超出了同時代程序員的認知水平,最終達到了無法想象的完美高度。
3.非對稱加密
中本聰:“你剛才說非對稱加密可以解決我的問題?”
“是的”,Gifoyle微微點頭,然后向中本聰解釋起來:“你需要的并不是明文的加密,明文不怕見光,你需要的只是創(chuàng)建一個獨特的標識來證明‘我是我’,非對稱加密可以搞定。”
Gifoyle繼續(xù)解釋細節(jié),中本聰聽完興奮的叫到:“就是它!”
非對稱加密很神奇,它源自一個神奇的數學原理(橢圓曲線加密算法),它不像之前的對稱加密,Alice和服務端需要使用同一把密鑰。
這次,Alice可以靠自己,獨自生成一對鑰匙,一把是公開的,稱為公鑰(誰都可以知道)。另一把是私密的,稱為私鑰(只有自己知道,不能告訴別人)。(見下圖)

非對稱加密就好比一個神奇的箱子,手里拿著一把鑰匙(私鑰),可以上鎖,但是卻無法解鎖。如果想要解鎖,只能用另一把鑰匙(公鑰)。很反直覺吧,所以才叫“非對稱”。(見下圖)

對稱加密VS非對稱加密
正是由于這種“非對稱”的特性,Alice可以用私鑰將交易數據(“Alice to Bob 30")加密,得到密文("e2edeae7a01d226367ccb0220447d8f1dfcf14f6defb9bf"),然后將密文和公鑰(明文)作為參數放入消息中,通過網絡,發(fā)送給Bitcoin服務端。(消息=密文+公鑰)
Bitcoin服務端收到消息,解析后得到兩個部分數據:一部分為密文,另一部分為公鑰(明文)。用公鑰解密密文,得到明文“Alice to Bob 30”。
根據非對稱加密的特性,公鑰如果可以解開的密文,此密文一定是用對應的私鑰加密,所以可以確定這段密文的生成者,一定就是擁有唯一私鑰的Alice。
服務端將交易數據的明文寫入到交易賬本中,交易即刻生效!
另外,不只是Bitcoin服務端,任何人都可以用Alice發(fā)出的公鑰來進行密文的解密,都可以得到相同的明文。
所以說,在Bitcoin的使用場景中,選擇使用非對稱加密技術,并不是為了保護明文不見光,而是為了證明“只有我可以生成這樣的密文”,即,“證明我是我”。(見下圖)

參考:
碼農翻身
BSV打賞地址:1BudFu186jzdP9CBJTTPGsdbSJinbzzCyB
相關文章:
重新創(chuàng)造比特幣1:從一個簡單的web交易系統(tǒng)開始
重新創(chuàng)造比特幣3:舍棄賬戶模型,讓交易更自由
重新創(chuàng)造比特幣8:基于UTXO的系統(tǒng)重構
重新創(chuàng)造比特幣11:群系統(tǒng)(上)
重新創(chuàng)造比特幣12:群系統(tǒng)(下)
比特幣SV(Bitcoin satoshi vision,BSV)是目前唯一一個遵循中本聰原始白皮書,遵循中本聰原始協(xié)議和設計的比特幣。BSV是唯一的公共區(qū)塊鏈,維持比特幣的原始愿景,并將大規(guī)模擴容成為企業(yè)級區(qū)塊鏈和世界新貨幣。
對稱加密