第二章、 文獻探討
2.4 數位簽章(Digital Signature)
數位簽章又稱為電子簽章,一種類似寫在紙上的普通個人簽名或蓋章,但使 用公鑰加密(public key encryption)領域的技術,是一種用於鑒別數位訊息的 方法。
數位簽章和傳統簽章最大的不同點,除了所欲簽署的文件之形式不同外,印
2.4.1 雜湊演算法(Hash Algorithm)
雜湊,也經常被稱做摘要(Digest)。雜湊演算法就像數學式裡的 f(x)函式,
當你以一串長度不等的數位內容做為輸入時,它藉由將輸入資料打亂、混合,再 輸出成一串長度固定的值(此長度視會演算法而有所不同,例如使用 MD5 輸出 16 個 bytes,而 SHA-1 則輸出 20 個 bytes)。這個輸出值,被稱為是原始輸入資料 的雜湊值(hash value)。
雜湊值可以視為一個檔案的電子指紋(digit digest)。在現實世界裡,我們
出有效率的方法可以計算出原始的輸入值,也就是說要偽造原始資料的難度或成 本很高。為加密為目的設計的雜湊函數(ex.MD5),被廣泛地用作檢驗雜湊函數。
例如在下載軟體的時候,就會對照驗證碼下載正確的部份。錯誤監測和修復函數 主要用於辨別資料是否被更動。
目前來說, MD5 及 SHA-1 是一般較為常見的雜湊演算法,分別簡介如下。
MD5(Message Digest Algorithm 5)
Ron Rivest 於 1990 年十月以 RFC 的型態發表 MD4,為 MD5 的前身。MD5 於 1992 年四月發表為 RFC1321,為輸入任意長度訊息,分成數個 512 位元區段,運 算後產生 128 位元長度的雜湊值。當暴力攻擊法(Brute Force)與密碼破解等議 題未成熟前,MD5 是最多人使用的雜湊函數。1994 年 Oorschot 與 Wiener 花一千 萬美元設計一台針對 MD5 的配對搜尋機(Collision Search Machine),只用 24 天就找出一組配對的資料區段,這說明 MD5 不具有強碰撞抵抗力(Strong Collision Resistance)
SHA-1(Secure Hash Algorithm-1)
安全雜湊演算法(SHA)是由美國國家標準與技術協會(NIST)所發展,並於 1993 年發佈成為第 180 項聯邦資訊處理標準(FIPS PUB 180),爾後又於 1995 年 頒發修訂版 FIPS PUB180-1,通稱為 SHA-1,其設計是以 MD4 為基礎。此演算法 輸入值長度不可超過 264個位元,處理流程類似 MD5,皆將原輸入資料切成數個 512 位元的區段,計算後的輸出結果為 160 bytes。
太細節的內部運算流程我們不予討論,僅需要把它想像成一個黑盒子就行了。
我們在此以 java security package 實作並觀看其結果(為方便表示,轉換成十 六進位顯示)如下表所示:
表 4 雜湊演算法實例(一)
輸入內容(以 Unicode 編碼):這是輸入的第一個訊息
MD2 86:6F:56:FA:5A:3A:C3:79:D9:4A:F9:FA:51:E5:C7:07 MD5 3F:7B:4A:B8:2D:26:E6:47:4B:0A:0E:E9:06:56:64:36
SHA-1 E2:5F:EA:26:AD:03:95:0C:88:B6:72:64:96:41:18:3A:86:3A:
F2:AB
SHA-256 A5:74:45:D3:C8:67:C5:C5:D4:64:9E:D2:79:EC:7A:3C:42:36:
86:39:76:47:6C:36:70:EA:6F:32:6F:0D:C3:02
MD2 D5:C2:ED:55:B6:AF:36:22:95:13:62:8E:D2:5D:16:DA MD5 E6:82:21:AE:5B:D2:60:64:CE:D0:42:2D:A7:35:4E:82
SHA-1 29:E0:A3:A7:44:88:0A:65:02:37:4D:39:A8:63:EB:AC:67:13:
C7:EB
SHA-256 51:3C:3E:52:B5:C6:70:ED:0E:D0:CE:FE:5C:6F:C5:5C:E2:A8:
B4:B8:D9:DF:B2:B9:8F:5B:72:E6:AC:11:0C:75
2.4.2 簽章演算法(Signature Algorithm)
目前實作上的所有簽章演算法,都必須輔以密碼學中的一把公鑰(Public Key)及一把私鑰(Private Key),此型式又稱為非對稱密碼系統(Asymmetric Cryptosystem)。公鑰及私鑰以數位化的形式儲存在個人電腦或網路中,使用者 必須秘密地保存自己的私鑰,並且將公鑰公諸他人(通常會搭配數位憑證)。之 後使用者就可以利用自己的私鑰對文件進行簽署;而數位簽章的接收者可以利用 該簽署者的公鑰來驗證數位簽章的有效性。
一個安全且有效的數位簽章,除了簽署者必須要以正確且有效的方法來對電 子文件進行簽署外,其所產生的數位簽章之有效性亦需要一個合適的驗證方法來 驗證。目前較常使用的簽章演算法包括 RSA 及 DSA。
2.4.3 數位簽章的產生與驗證
數位簽章的產生步驟。如圖 17 所示:
圖 17 產生數位簽章
圖片來源: http://sna.csie.ndhu.edu.tw/~cnyang/HA/sld021.htm
1.假設我們手上握有欲簽章的原始訊息(Original Message)。
2.將原始訊息透過雜湊演算法產生雜湊值,此值在這裡又被稱為 MAC(Message Authentication Code)。
3.我們以 MAC 及自己的私鑰為輸入,利用簽章演算法產出數位簽章(Digital Signature)。
4.將數位簽章附加到原始訊息的後面,一起傳送給驗證方。
當接收方收到資料之後,可以利用類似的步驟來驗證簽章的正確性,如圖 18 所示:
圖 18 驗證數位簽章
圖片來源:http://sna.csie.ndhu.edu.tw/~cnyang/HA/sld022.htm
1.將收到的原始訊息,以相同的雜湊演算法計算出 MAC 值。
2.用簽署者的公鑰,解開數位簽章,得到簽署者計算的 MAC 值。
3.比較步驟 1 及 2 的 MAC 值,若相同的話,則表示訊息及數位簽章都沒有 被更改過,且可以認為是簽署者所傳送。
2.4.4 數位簽章的功能
傳送一份使用數位簽章技術的文件,可以達到下列目的:
1.資料完整性(Data Integrity):文件接收者透過數位簽章之核對可確保此文 件的完整性,避免被篡改、重送、遺失。
2.來源認證(Authentication):文件接收者可確認此文件之發送者的身分,避 免被冒名傳送假資料。
3.不可否認性(No-Repudiation):因為只有文件發送者知道自己的私密金鑰,
而且文件具有發送者之數位簽章,使其無法否認發送此文件的事實。