前言 隨著通訊、網際網路技術的發展,人們接觸到的資訊紛繁複雜,資訊的真真假假讓人難以辨認。在嚴肅性場合,比如電子合同、電子證照等,必須有一種手段確保資訊的完整性和真實性,這時簽章就派上了用場。
簽章的技術原理並不複雜,簽章的基石就是非對稱加密演演算法。但是圍繞著簽章又衍生出一些列概念,比如證書、電子印章、PKI等,這些概念又對應著一些列國家標準。如果不對這些技術做細緻的剖析,總感覺是霧裡看花,難以準確把握這些概念,難以對整個簽章流程有清晰的認識。
本文不泛泛而談概念;而是從實踐、具體資料、程式設計開發等講起,更加貼近實戰的角度入手,這樣更容易理解。本人為開發人員,已獨立開發了制證書、制電子印章、ofd簽章驗章、與加密機對接等程式,這些程式都達到商用級別;通過這些程式的開發也加深了我對簽章的理解;經過大量的開發,終於從迷霧中走出,再回首,走過的路曲曲折折;希望本文能更好的加深你對簽章的理解。
簽章基石:非對稱加密演演算法
常用的非對稱加密演演算法有:RSA、ECC。國標商密演演算法時SM2,大的範疇屬於ECC。
非對稱加密演演算法會產生一對公鑰和私鑰。如果對一段資料用公鑰加密,私鑰解密,這就是加密過程;反之,就是簽名。要把這加密和簽名這兩個概念吃透;
加密:我手裡有一段明文,我想把這段明文加密傳送,並且只能有特定的接受者解密。公鑰是公開,私鑰只有一個人擁有。如果用公鑰加密,只能有私鑰擁有者才能檢視,這就是加密過程。
簽名:我手裡有一段明文,用我的私鑰對這個明文簽名;任何擁有對應公鑰的人都可以驗證這段明文是我簽署的。簽名檔案是不怕公開,只是需要證明是誰簽名的,資料是否完整即可。
我怎麼相信這個公鑰是你的?
這裡有個術語Public Key Infrastructure(PKI),即公開金鑰基礎設施;就是解決這個問題的。PKI的主要目的是用來發行「身份證明書」,證書中關鍵資訊就是公鑰。證明書的檔案構造是一種叫做 X.509 的協定規定的。以下是證書的定義:
證書包含公鑰、證書持有者的一些資訊。這個證書是通過權威的CA做簽名,確保證書不被偽造。關於認證機關的權威性和可信度的問題,其實是一個社會基礎設施建設的話題了。在很多國家認證機關都是由政府在主導建設,常常被視作一個社會性基礎設施的一個環節。
為了便於解釋概念,稱為剛才的簽署的證書為個人證書;下一個問題出現了:我怎麼知道這個證書是由權威的CA簽署的。其實CA本身也有證書,需要獲取CA的證書去驗證個人證書的真假。新問題又來了,我怎麼知道CA的證書是真實的?這就是雞生蛋蛋生雞的問題。最終我們需要從一個可靠的來源獲取CA的證書,就認定這個證書是可靠的。
實體印章蓋在證書上就是一個圖片,電子印章是啥樣?也是一個圖片?
數位簽章就是模擬真實的簽章的流程和外觀。真實印章蓋上後,就可以理解為一個圖片;如何驗證圖片的真偽就依賴圖形分析,與原始印章對比。電子印章包含:印章圖片、簽章人證書、制章人證書等資訊;所以電子印章不僅僅包含圖片,電子印章的真偽驗證不依賴圖片,而是數位簽章。
總之:電子印章是圖片和其他資訊的結合體。
簽章實體合同時,有蓋章這個動作;對於電子印章,怎麼蓋章?
蓋章動作對應私鑰簽名。私鑰簽名後的資料格式是怎樣的,看下圖。國家有對應的標準。
簽名後資料包括:電子印章、原文雜湊值等資訊。電子印章是包含在簽章資料中的;看一個簽章後的ofd檔案:
Seal.esl這個檔案是可有可無的,因為SignedValue.dat這個檔案也包含印章檔案。
怎麼驗章?
驗章必須的三要素:公鑰、原文雜湊、簽名值;咱看看這三個資料從哪裡獲取。這三個資料都可以從SignedValue.dat這個檔案獲取。
公鑰: SignedValue.dat(簽章資料)包含 Seal.esl(電子印章),電子印章包含證書,證書包含公鑰。
原文雜湊值和簽名值:
以上從技術原理上,講述了簽章過程。
如果真的上一套簽章系統,流程是怎樣的?和誰打交道,買啥裝置?
1 加密機生成和保管私鑰:
2 從加密機匯出證書請求檔案,發給CA簽名,生成證書;
3 製作電子印章,需要選客製化章者和簽章者角色。
需要制章者證書、簽章者證書、電子印章製作軟體、加密機配合,生成電子印章。
4 簽章
需要輸入電子印章、印章位置、待籤檔案,通過簽章軟體實現簽章。
後記 本文從原理和實踐上,講述了簽章流程。簽章基本原理並不複雜,但是簽章流程涉及多個環節,為確保每個環節嚴禁可靠,又衍生出了大量概念。深刻領會這些概念就離不開實踐;只有從剖析證書資料、簽章後的檔案,這些可觸控的資料的入手,才能全面掌握領會簽章流程。