計算機網路-7-3-數字簽名
阿新 • • 發佈:2022-03-15
數字簽名
數字簽名必須保證能夠實現以下3點:
- 接收者能夠核實傳送者對報文的簽名。也就是所,接收者能夠確認該報文的確是傳送者傳送的。其他人無法偽造對報文的簽名。這叫報文鑑別。
- 接收者確信所收到的資料和傳送者傳送的資料完全一樣,沒有被篡改過。這叫報文的完整性。
- 傳送者事後不能抵賴對報文的簽名,這叫不可否認。
現在已有多種實現數字簽名的方法。但採用公鑰演算法要比對稱金鑰演算法更容易實現。下面就來介紹這種數字簽名。
為了進行簽名,A用其私鑰\(SK_A\)對報文X進行D運算(如圖7-4),D運算本來叫做解密運算,可是,還沒有加密怎麼就進行解密呢?這並沒有關係。因為D運算只是得到了某種不可讀的密文。在圖7-4中我們寫成”D運算“而不是解密運算,就是為了避免產生這種誤解。A把經過D運算得到的密文傳給B。B為了核實簽名
數字簽名為什麼具有上述的上述的三個功能點?
- 因為除了A之外沒人持有A的私鑰\(SK_A\)。所以除了A外沒有別人能產生密文\(D_{SK_A}(X)\)。這樣,B就相信報文X就是A簽名傳送的,這就是報文鑑別的原理。
- 同理,其他人如果篡改過報文,但由於無法得到A的私鑰\(SK_A\)來對X進行加密,那麼B對篡改過的報文進行解密後,將會得出不可讀的明文,就知道收到的報文被篡改過。這樣就可以保證報文的完整性。
- 若A要抵賴曾經發送報文給B,B可以把X以及\(DSK_A(X)\)出示給進行公證的第三者,第三者很容易的用\(PK_A\)去證實A確實傳送X給B,這就是不可否認的功能。這三項的關鍵都是沒有其他人能夠持有A的私鑰SKA。
但上述的過程僅僅只是對報文進行了簽名,對報文X還未保密,因為截獲到密文\(D_{SXK_A}(X)\)並知道傳送者身份的任何人,通過查閱手冊即可獲得傳送者的公鑰\(PK_A\),因而能知道報文的內容,若採用圖7-5所示的方法,則可以同時實現祕密通訊和數字簽名。圖中\(SK_A\)和\(SK_B\)分別為A和B的私鑰,\(PK_A\)和\(PK_B\)分別為A和B的公鑰。
A向B傳送時:A使用A的私鑰\(SK_A\)
B接收到後使用B的私鑰\(SK_B\)對報文X進行解密,同時使用A的公鑰\(PK_A\)對簽名進行驗證。