上期我們了解了數字籤名的三個等級類型以及數字籤名在商業、教育、醫療和政府等眾多領域的應用,所以這期我們要接著深入了解,數字證書的技術原理。
數字籤名是公鑰基礎結構的基礎部分。當我們說PKI時,一般想到的是數字證書,證書頒發機構(CA),銀行使用的Key,以及SSL通信等等。
數字證書,一般都是成對存在的,包含證書的公鑰,和證書對應的私鑰,公鑰本身有一定的身份標識功能(如ssl證書中的域名信息,郵件客戶端證書的郵箱地址等),對於數字證書的應用比較廣泛,但其基本原理簡單來說就是公鑰用來加密,私鑰用來解密。私鑰用來籤名,公鑰用來驗證籤名。
那麼,在我們了解數字籤名的技術原理之前,我們先要明白一個和數字籤名密切相關的算法:Hash算法。
hash算法是一種散列(密碼雜湊)算法。簡單來說這個算法有幾個很顯著的特性:
1. 易壓縮性,可以很容易的將任何長度的數據映射到固定長度的輸出。
2. 單向性,它是一種單向密碼體制,根據源數據計算一個哈希值很容易,但是要根據計算出的結果得出源數據是不可能的。
3. 高靈敏性,就是對於輸入數據的變化非常靈敏,即使很小的變化都會輸出差異性很大的結果。
4. 抗碰撞性,對於不同的數據塊,其hash值相同的可能性極小;對於一個指定的數據塊,找到和它hash值相同的數據塊極為困難。
由於具有這些特性,所以它非常適合用來做數據完整性和文件完整性的校驗。目前應用較為廣泛的哈希算法主要有sha1,sha256,sha384等,而我們國密與之相對應的是SM3算法,其安全性也是遞增的。幾年前Google就對SHA-1碰撞實驗,就是為了驗證其安全性。現在隨著科技的飛速的發展和計算能力的提升,sha1也即將要退出歷史舞臺。
現在,讓我們逐步了解一下數字籤名的過程:
1、將要籤名的文件進行hash計算。
2、用私鑰將文件的hash值進行籤名。
3、除了籤名外,還可以添加時間戳以指示籤名時間。
這個就是數字籤名的主要過程,總的來說就是先對文檔進行哈希處理,然後籤名者用自己的私鑰對文件生成的哈希值進行籤名,使用時將原文件和籤名數據一起發送。
值得注意的是,數字籤名並沒有對整個文件進行籤名,而是對文件的hash值進行了籤名。這樣的不僅節約了資源而且提高了效率。
好的,接下來我們討論一下如何讀取和認證籤名。
我們已經知道了創建數字籤名的過程,隨著要來進行數字籤名驗證。主要過程有以下步驟:
1、將原文件進行hash計算得到hash值。
2、將籤名的公鑰從籤名數據中計算出籤名數據中的hash值。
3、將步驟1中得到的hash值和步驟2得到的hash值進行對比,如果對比結果一致則驗證通過,反之驗證失敗。
除了要點之外,數字籤名的應用會越來越廣泛,如今連電子發票和電子合同都加入了數字籤名的應用行列,所以它的重要性可以預見。
本文技術文案指導:探花郎
高級軟體工程師,從事PKI相關技術研發工作多年,熟悉Linux網絡編程,擅長C/C++語言。現任職沃通CA,負責國密ssl相關庫的開發工作。
本文為沃通原創,轉載請註明。