圖說「數字簽名」
- 2019 年 12 月 30 日
- 筆記
前言
雖然很久以前就了解了數字簽名,但之前突然被一個非程序員朋友問起什麼是數字簽名時,依然解釋得很費力。近日找圖片素材看到Peggy_Marco大神的眾多人物形象圖時,有了用圖解說數字簽名的想法,於是決定借用大神的人物形象圖,嘗試用圖解釋一下說什麼是數字簽名。
1、圖說數字簽名
關於數字簽名這事,還得從當年小明向王老闆借錢說起……


1.1、照搬傳統

小明覺得這很簡單,不就是把紙質借條轉換成電子文檔么;於是,小明立即打開電腦,書寫借條。
小明發送出去的第1版借條如下:


很顯然,第1版的借條沒有借款人簽名,是一個無效的借條。數字世界裏,則必須加上「數字簽名」,用於證明簽名者的身份;於是,小明加上簽名後的第2版借條如下:


1.2、嘗試對稱加密,解決防偽造問題
確實,數字世界中,一個名字沒有筆法字跡可以區分,千篇一律,誰都可以偽造,必須,另想他法用於證明簽名信息確實是簽名人所為。
小明苦思冥想了半天,終於想起曾經跟陳教授學過的對稱加密,剛好可以用上。

於是,小明加上了加密了簽名信息後,把下面的第3版借條發給了王老闆,並解析了其中的原理。

但是,很快新問題又來了。


對稱加密確實不適合做數字簽名,小明不得不尋找新的解決方案,並陷入苦思中……

1.3、用非對稱加密解決內容可驗證
是的,陳教授給出了新的解決方案:


很快,小明按照陳教授的方案,使用一種非對稱加密算法RSA進行了加密,並輸出了第4版借條。


1.4、用消息摘要解決內容防篡改
關係到錢的問題,王老闆不敢大意,仔仔細細的確認了一番,又發現了新的問題。

全文內容加密後的第5版電子借條如下:

但是,簽名信息比簽名內容還長,怎麼看都太長了;這個成本王老闆直覺告訴他,應該還可以再優化優化。

一直在旁的陳教授,覺得是時候普及一下密碼學的基礎概念了……



於是,小明加上了一種消息摘要算法(SHA256),並使用一種非對稱加密算法(RSA)進行加密後的第6版借條如下:

1.5、用CA頒發的數字證書解決公鑰歸屬問題
按照陳教授的提議修改後,一切似乎已經搞定,但在成交的最後關頭,王老闆提出了一個致命的問題:


在一旁的陳教授見此場景,又給支了一招:

於是,小明就和王老闆去找了業界威望極高的CA大佬,希望他能做「擔保人」。

給完保護費後,小明很快拿到了CA大佬給的證書,終於可以證明小明的公鑰確實屬於小明了。

備註:其實CA大佬簽發證書的方法和上面小明用於證明自己簽名的方法是一樣的,只是簽名內容換成了小明的公鑰,簽名密鑰換成了CA大佬的公鑰;但因為CA大佬有信用背書,且其公鑰屬於全網公開且知名度極高,所以,其簽法證書大家都認。
1.6、完成數字簽名
小明拿到CA大佬簽名的證書後,加上之前的借條,終於解決了王老闆的所有顧慮,和達成了最終的借貸協議。

而小明拿到錢的那一刻,只能用「感覺人生已經到達了巔峰來形容」。

2、數字簽名小結
2.1、法律意義上的數字簽名
《 中華人民共和國電子簽名法 》第二條本法所稱電子簽名,是指數據電文中以電子形式所含、所附用於識別簽名人身份並表明簽名人認可其中內容的數據。
電子簽名同時符合下列條件的,視為可靠的電子簽名:
(一)電子簽名製作數據用於電子簽名時,屬於電子簽名人專有;
(二)簽署時電子簽名製作數據僅由電子簽名人控制;
(三)簽署後對電子簽名的任何改動能夠被發現;
(四)簽署後對數據電文內容和形式的任何改動能夠被發現。
2.2、數字簽名要解決的問題
從電子簽名法所描述的可靠電子簽名來看,數字簽名要解決的問題可歸納為兩個:
(1)對簽名人身份的確認,且簽名人身份不可抵賴
(2)簽名人對簽名內容的認可,且簽名內容不可篡改
2.3、如何解決數字簽名面臨的問題
通過上面的圖說例子,這裡的答案應該比較清晰了,那就是運用密碼學的知識,使用:

用消息摘要算法解決內容防篡改的問題,再使用非對稱加密(私鑰加密)算法加密消息摘要內容解決簽名人身份問題的防偽造和防抵賴問題。
2.4、密鑰管理問題
正確使用數字簽名的前提是:保證密鑰的可靠性。
私鑰的可靠性,依賴於簽名者自己的保密工作。
而公鑰的可信度,則依賴於公鑰基礎設施。在數字世界裏,證明小明的公鑰確實屬於小明的東西,有個專業名詞,叫做「數字證書」,而簽發數字證書的機構叫做證書頒發機構(即CA, Certificate Authority),一般由信用高的權威機構頒發。