认证篇——数字签名
目錄
數字簽名
1.簽名的生成和驗證
2.公鑰密碼與數字簽名
1)公鑰密碼
2)數字簽名
數字簽名的方法
1)直接對消息簽名的方法
2)對消息的散列值簽名的方法
注意:
數字簽名的應用:
1)安全信息公告
2)軟件下載
3)公鑰證書
4)SSL/TSL
數字簽名的算法
對數字簽名的攻擊:
消息認證碼與數字簽名對比
數字簽名無法解決的問題:
之前提到過由于消息認證碼無法防止否認。之所以無法否認,是因為收發雙方共享一個密鑰;由于密鑰共享,所以能計算出正確MAC值的不只有發送者,接收者也可以計算出,對于第三方而言,無法判斷出消息的出處。因此需要使用數字簽名
?
數字簽名
數字簽名(又稱公鑰數字簽名、電子簽章等)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用于鑒別數字信息的方法。
1.簽名的生成和驗證
1)生成消息簽名:該行為由發送者來完成,生成簽名就是根據消息內容計算數字簽名的值,隱含”簽名人認可消息內容“
2)生成數字簽名:該行為由接收者來完成,也可能由驗證的第三方來完成,驗證簽名就是檢查消息是否真的來自發送方
一套數字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證;發送方使用簽名密鑰來生成消息的簽名;接收方(第三方)使用驗證密鑰來驗證消息的簽名
注:簽名密鑰只能簽名人持有,而驗證密鑰是需要驗證的人都可以持有
2.公鑰密碼與數字簽名
1)公鑰密碼
公鑰密碼包括有公鑰和私鑰組成的密碼對,公鑰用于加密,私鑰用于解密
2)數字簽名
同公鑰密碼一樣,數字簽名也使用公鑰和私鑰組成的密鑰對,但其用法與公鑰密碼相反;私鑰加密相當于生成簽名,公鑰解密相當于驗證簽名
所以說,在公鑰密碼中,人人都可以使用公鑰進行加密;在數字簽名中,人人都可以使用驗證密鑰來驗證簽名
?
數字簽名的方法
1)直接對消息簽名的方法
1.發送者使用自己的密鑰對消息進行加密(只有發送者才能持有,除發送者外,其他人是無法生成相同簽名的)
2.將簽名和消息發送給接收方
3.接收方使用公鑰對簽名進行解密
4.發送方將解密的消息與發送方發送的消息進行比對
?
2)對消息的散列值簽名的方法
1.發送方使用單向散列函數計算消息散列值
2.發送方使用私鑰對散列值進行加密
3.將消息和簽名發送給接收方
4.接收方使用公鑰對簽名進行解密
5.接收方將解密后的散列值與發送方發過來的散列值進行對比
?
注意:
1)數字簽名使用私鑰進行加密來產生認證符號
2)數字簽名并不用于保證機密性
3)簽名所代表的是簽名人對該消息進行的簽名,復制簽名不會改變簽名者和消息的內容
4)在簽名之后對消息進行修改是毫無意義的,數字簽名的作用為識別修改
5)數字簽名會根據消息內容的改變而改變,所以簽名是不會重復使用的
6)想要使一份數字簽名作廢,需要再創建一份聲明該簽名已作廢并附上數字簽名的文書
7)在數字簽名中,能生成簽名的只有發送者,能驗證簽名的只有接收者;因此可以防止否認
?
數字簽名的應用:
1)安全信息公告
此類消息是為了讓更多人知道,因此沒有加密的必要,只用在消息中加上數字簽名(對明文施加的簽名稱為明文簽名)
2)軟件下載
用于檢測所下載的軟件是否被篡改
3)公鑰證書
將公鑰當作信息,對其加上數字簽名
4)SSL/TSL
在認證服務器身份是與否合法時所使用的服務器證書(加上簽名的服務器公鑰)
?
數字簽名的算法
1)RSA
2)EIGamel
3)DSA
4)Rabin
?
對數字簽名的攻擊:
1)中間人攻擊
2)對單向散列函數進行攻擊
3)利用數字簽名攻擊公鑰密碼
4)其他攻擊
?
消息認證碼與數字簽名對比
?
數字簽名無法解決的問題:
驗證簽名的公鑰必須屬于真正的發送者,為了確認自己得到的公鑰是否合法,我們需要證書(將公鑰當成一條消息,由可信任的第三方對其簽名后得到的公鑰)
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結