標籤:

聊聊數字簽名

聊聊數字簽名

來自專欄 區塊鏈學院

聊聊數字簽名

作者:張韡武 (AlphaWallet CTO)

數字簽名——我指的不是用ApplePen在PDF上的塗鴉,而是具有防偽功能,基於密碼學的數學簽名——在其發明40年之後,終於在各國都基本獲得了認可。

數字簽名技術是信息安全機制中的一種重要技術。已經廣泛應用於電子商務和通信系統中,包括身份認證,數據完整性,不可否認性等方面,甚至在日常的電子郵件中也有應用。數字簽名提出的目的就是在網路環境下模擬日常的手工簽名或印章,它可以抵禦冒充、篡改、偽造、抵賴問題。數字簽名的安全特性是:不可否認性,不可偽造性。

數字簽名演算法一般採用非對稱密鑰密碼體制來實現。常見的數字簽名演算法有:RSA,其安全性是基於求解離散對數的困難性;DSA,其安全性是基於對有限域的離散對數問題的不可實現性;ECDSA(橢圓曲線數字簽名演算法,Elliptic CurveDigital Signature Algorithm),其安全性給予橢圓曲線離散對數問題的不可實現性)等。

法律上認可的數學簽名是需要證書的,用以證明簽名者在真實世界裡的身份。

有些國家對發證機構有偏好,比如中國要求發證機構從工信部獲得牌照。比如德國、丹麥等國政府直接發證。在我們這裡新加坡,Netrust似乎是唯一一家按2010年新加坡電子交易法案認可的發證機構。

為了做一個聽黨的話的好公民,我從指定的發證機構為我們的創業公司申請了證書,以便完全合法地在在新加坡使用數字簽名簽合同。我覺得可以借這個機會做一下數字簽名的科普,順帶點評一下各國數學簽名技術的優劣。

我從Netrust獲得的證書是2048位RSA,裝在一個Alladin牌的U盾里。

2048位RSA如今算是比較標準的。不是因為它絕對安全仿偽,而是因為它是效率和安全性都不錯。效率這裡是指每秒鐘一個U盾能簽的次數。顯然對於簽合同這種事,每秒能簽1000個和10秒能簽1個實際差別不大。加上合同常常有十年有效期,所以這個2048位RSA比起10秒才能簽一次的愛沙尼亞電子居民證書算是比較湊合的。實際上,用暴力偽造愛沙尼亞電子居民證書的難度是偽造新加坡這個的1億億億倍(1後面24個零)。

為什麼新加坡不使用這樣高強度的簽名系統?其實效率不是重點。有些公司要求每一封電子郵件都有數字簽名,所以能簽得快一點確實有好處(國內的區塊鏈大牛謝晗劍每封電子郵件都用2048位RSA簽名,儘管沒有公司老闆逼他),但是即使提高偽造難度1000倍,也沒有人會感覺出區別。那麼我們為什麼還在用這套技術?

原因之一是軟體支持落後。現在的合同文件大多是PDF 1.5版的,最多只能支持

2048位RSA證書。在支持安全技術方面,Adobe公司可以算是屢教不改的反動分子,每次技術更新都是必不得己而後行。很多電子郵件軟體不能驗更安全的簽名。

實際上,愛沙尼亞,作為全球數學簽名技術領先的國家,使用了一種新的文件格式ASICE,應用歐盟標準(而非PDF),一部分的原因就是PDF還不支持它使用的安全簽名技術384位ECDSA。還有其它原因是愛沙尼亞有更多安全要求,比如對數字簽名的日期作證,還有管理方便的原因,比如一份合同和其多份附件可以一起簽,不用做到同一個PDF文件里。不過,大家都覺得電腦文件格式已經太多了。

話既然講到這裡,就得解釋一下為什麼ECDSA是更為安全的技術。ECDSA發明幾十年以來,雖然性能更好,卻無人問津,直到比特幣出現,使用了256位ECDSA,大家才重視。比特幣的發明人中本聰知道數學簽名的安全性是按十年計算的。我們現在流行的2048位RSA,20年前是美國禁止出口的軍方技術,而當時的民間技術偽造難度只有約百萬分之一。現在我們覺得2048位RSA算是安全,二十年後就是不夠安全了。比特幣完全可以活二十年,中本聰想,所以要使用最新密碼學技術。

這裡我要特別說明一下,密碼學技術從發明到實用一般有30年周期。比如ECC是80年代發明的,到了中本聰發明比特幣時候才剛剛開始有人用。最近這幾年,密碼學技術從發明到實用只有半年到一年的周期,這都是因為區塊鏈,以前密碼學家常常不指望著有生之年他們發明的新技術被廣泛使用。

儘管密碼學的應用非常緩慢,直到中本聰之後才進入大躍進模式,但是在新加坡這邊看也不算差。政府要求建築合同備案需要數字簽名,要不然假簽名不等到起官司是不知道有做假的。個人也常有申請數字簽名的,雖然大多只用它報車輛管理資料這一件事(相關部門只收數學簽名的文件)。

講到這了我得說一個新聞。去年下半年(2017年),PDF2.0新標準,即ISO

32000-2:2017,終於,終於,在ECDSA發明30年之後,宣布PDF文件兼容ECDSA了!

這樣看來,不出十年,就會有人可以用ECDSA簽PDF合同了,不過,到時候數學簽名的PDF合同也就不流行了,因為都用智能合約簽名了。

密碼學關注更多的並不是加密解密的各種數學演算法,而是在已有數學演算法上如何實現各種安全需求。防止消息泄露只是眾多安全問題中的冰山一角,而這個問題本身又有很多複雜的變化。

補充閱讀

說到密碼學,我們來玩一個跟密碼學無關的燒腦小問題:

10個人坐在一起談天,突然他們想知道他們的平均年薪,但又都不願意透露自己的工資數額。有沒有什麼辦法讓他們能夠得出答案,並且不用擔心自己的年薪被曝光?


推薦閱讀:

數字簽名是什麼?
PDF簽名從入門到精通(1):PDF簽名機制的漏洞分析
PDF簽名從入門到精通(2):PDF的簽名值到底存在哪裡?

TAG:數字簽名 |