2018年5月30日

網路安全技術與比特幣

賴昭正/前清大化學系教授、系主任、所長;合創《科學月刊》。

去(2017)年的世界一大新聞是:比特幣(bitcoin)從年初的不到美金1000元,在12月初暴跳到幾乎美金20000元,最後以16500元左右收盤!這一沒有任何政府做後盾的貨幣,如雲霄飛車的升降,實在很難令人相信人類的經濟活動是理性的(《科學月刊》2014年5月號)。雖曾看過些比特幣文章,但除了一些名詞外,可以說什麼都沒學到;難道真有什麼特別的技術讓它值這麼多錢嗎?此一新聞突然讓筆者再次對比特幣感到興趣。作為一位喜好科普的科學家,當然心裡癢癢的,也想寫一篇比較深入點的技術性比特幣文章。底下便是筆者猛K相關文獻後的心得報導,希望在這裡與讀者分享。

密碼學
資訊在網路上的傳送,最重要的當然是需要能保密。所以我們在這裡先談一談網路上的保密是如何達成的。保密當然並不是網路出現後才有的——早在公元前2000年就有保密的記載;二次世界大戰之聯軍所以能夠打敗德國,事實上可能還得歸功於解碼的成功:使得聯軍對德軍的一切行動瞭若指掌。

保密是透過一定的規則將原來的資料改成無法理解的文字組合,在密碼學裡我們稱此一過程為「加密(碼)(encryption)」。例如:

  I Love Science    透過「加密函數」變成    J3Mpwd5Tdjdodf  

要想得回原來的信息,我們當然需要知道加碼規則才能「解(密)碼(decryption)」。全世界有上億人口使用網路,因此每個團體都使用自己的密碼規則是不實際的。通用的「密碼函數」只有數種,因此除了加密外,還需加鎖。雖然你知道我所使用的加密規則,但沒有我特別製造的鑰匙,你還是無法打開我加密後的資料。

如果用來開鎖的鑰匙與加鎖的鑰匙相同,我們稱之為「對稱加密(symmetric encryption)」,其鑰匙稱為「(對稱)鑰匙」;如果不一樣,則稱之為「不對稱加密(asymmetric encryption)」:自己保有的鑰匙稱為「私鑰(private key)」,發給大家的鑰匙則稱為「公鑰(public key)」。「私鑰」與「公鑰」是成對的:用「私鑰」鎖住的東西只能用其相對之「公鑰」來開。反之亦然:用「公鑰」鎖住的東西只能用其相對之「私鑰」來開。

從上面的闡釋看來,加密及加鎖好像是先後使用的兩碼事;但事實上它們大部分都是同時使用上的:

(資料 + 鑰匙)→ 加密軟體 → diwlae;ajp2$  

(diwlae;ajp2$ +鑰匙)→ 解密碼軟體 →資料  

網路保密傳送
我們現在就用一個實際的例子來說明它們的使用方法:你在臺灣銀行有戶頭,想到臺灣銀行網頁轉一些錢到另外一個銀行的戶頭。當你上臺灣銀行網頁時,第一個注意到的應是網頁前的「https:」:與一般網頁前之「http:」比,多的 s是告訴你這是安全網站,一切資訊來往均需加密碼及加鎖保護。

在經過一番「握手」談如何交換資訊後,臺灣銀行網頁就將它的「公鑰」寄給你,要你用同意後之加碼規則及它的公鑰、將你的電腦軟體製造之「對稱鑰匙」及其它資料加密及加鎖寄給它:此後你們的資訊來往就全使用這把「對稱鑰匙」來加密及加鎖(圖一)。讀者可以自己分析一下:在上述的資訊交換中,萬一有人偷偷攔劫了,他會因為缺少正確的鑰匙,沒法得到任何保密過的資訊!

圖一:文件透過保密網路傳送。

「對稱鑰匙」在交易完後就丟掉,但該「公鑰」是永遠屬於臺灣銀行的。這就產生了兩個問題:(1)我怎麼知道它確是屬於臺灣銀行的,而沒有被調包過?(2)我怎麼知道「臺灣銀行」確是真正的臺灣銀行?這就涉及到網路公證機關(certificate authority,簡稱CA):它們負責頒發證書(certificate)及(公、私)鑰匙。網路上的鑰匙只是一連串的數字而已;越長的數字當然越難破解:一般的「對稱鑰匙」大概只有128位元(bit),「不對稱加密」的「鑰匙」長度則常高達2048位元!

電子證書
當你跟臺灣銀行正式交易前,臺灣銀行將傳給你一張某個網路公證機關「簽名」過的證書,來證明(1)它確是臺灣銀行;(2)它給你的「公鑰」也是該網路公證機關發給臺灣銀行的。公證機關如何「簽名」呢?就是用它獨特的「私鑰」加碼(圖二),而你也只能用它的獨特「公鑰」來解碼!因為該網路公證機關的「公鑰」,並不是臺灣銀行給的,因此後者實在是很難作弊。這些網路公證機關的資料及「公鑰」事實上均早就存在於你的網路瀏覽器內!因此如果你的電腦或網路瀏覽器被綁架了,其後果將不堪想像!

圖二:電子證書。 

電子簽名
只要你有獨特的「私鑰」,便能用它來加碼,就像在文件上用你獨特的筆跡簽名一樣,稱為電子簽章(digital signature)。這種電子簽章一般是具有法律效力的!因此除了上述之用於頒發網路之證書外,它也適用於民間之合約等的簽定。合約須保存,因此在實際的操作上可能與上網有點不同(圖三):需要簽名之正式合約或文件,一般先經過雜湊函數改成固定長度之「雜湊(hash)」數,以雜湊之長短決定安全的程度。理想的雜湊函數(hash function)必須具有:(1)不同的輸入——即使只差一個符號或空間——一定產生不同的雜湊(值);及(2)不可能由雜湊值反推出原來之輸入資料。

圖三:電子簽章操作方式。

將合約或文件改成「雜湊」後,簽名者就用自己獨有的「私鑰」加碼,然後將該加碼、合約、背書後之證書及其他資料透過網路傳給對方。在此筆者得聲明一下:因不是專攻電子簽章,故細節上可能跟實際操作有點出入(例如傳了哪些資料)。但筆者認為這些細節是不重要的,因此不擬深究。舉個例子,假設某某總統雖然只有年薪百萬(臺幣)的固定收入,但當了4年總統後,卻是家財億貫(美金);因此結論除了是「貪污」外,筆者實在想不出其他答案。至於如何貪污等細節,則因人而異,除了寫某某總統的傳記外,在討論整個國家的政治環境時,實在沒有深究之必要!

收到合約者可以(1)用「背書後之證書」確定簽名者之身份;(2)用簽名者之公鑰解碼,得到合約之雜湊值;(3)將收到的合約透過同一雜湊函數取得另一雜湊值。如果兩個雜湊值完全符合,則因雜湊值的獨特性,可以毫無懷疑地相信合約的真實性——從未被有意或無意地偷偷修改過!

比特幣交易
比特幣至少有5點非常不同於一般貨幣之處:(1)它沒有任何國家、團體或實物當後盾,而是建基於彼此間之互相信任及遊戲規則(protocol),如有爭議則以多數(51%以上)來決定;(2)它沒有任何一個特定的機構和團體在管理任何人的賬戶和買賣;(3)它沒有任何實體貨幣,因此只能在網路上交易;(4)它的所有交易記錄都是不記名且公開的;(5)它不能像政府一樣隨便發行鈔票(比特幣),而是需要靠「礦工」開採出來。因為全在網路上交易,上面所談到的一些網路保安問題,在這裡全部用上了!......【更多內容請閱讀科學月刊第582期】






沒有留言: