數字簽名的原理和應用

孫哥說天下發表於2020-12-18

1.數字簽名的原理

在日常生活中,簽名的意義就是簽完你的名後,別人可以知道這件事是你做的,而由於每個人筆跡不同,你也無法否認這個名字是你籤的。同真實的簽名一樣,數字簽名也是用來證明某條資訊是本人發的,而且本人不可抵賴,他人不可偽造。

通常是用非對稱加密(RSA)實現數字簽名,分為以下幾個步驟:
1.計算訊息的摘要M
2.傳送方用自己的私鑰d對M進行加密,得到S(這裡叫作簽名,因為M不是一個需要加密的資訊,加密的目的是簽名),隨訊息一起發出
3.訊息傳送之後,接收方對訊息計算摘要M,再用傳送方的公鑰對S解密de’da,如果S==M,則說明是傳送方發的,由於其他人不知道d的值,所以其他人無法仿造這個加密,而只有傳送方知道d,他也無法否認這條資訊是他發的

2.先加密還是先簽名?

在上面這個過程中,如果在傳輸過程,傳送方想要對M加密,只讓接收方知道這個資訊,那他就要對M用接收方的公鑰加密,那是先簽名還是先加密嘞?
1.假設先加密再簽名
這時候中間人出現了,他擷取到這個資訊,用傳送方的公鑰解密後,得到訊息摘要,這時候,中間人就可以用自己的私鑰對這個資訊再重新簽名了啊!這就是中間人攻擊,接收方收到的訊息是正確的,但是他卻無法判斷訊息的傳送者是誰。
2.假設先簽名再加密
顯然更安全, 只有接收方能得知這個簽名後的訊息摘要M2,可以保證不會被篡改。

3.應用

1.網站認證使用數字簽名
我們訪問csdn網站,那怎麼知道這個網站是不是真的是csdn呢?
在這裡插入圖片描述
就是使用數字簽名了,csdn將自己的公鑰公開出去,並宣告只有自己持有私鑰,那使用者就可以用公鑰對簽名解密,比對是否與摘要相同,來判斷該網站是否為真正的csdn

2.保證資料完整性
軟體廠商為了保證自己程式碼不被他人更改,會對資料計算摘要後簽名。在執行時先檢查是否解密後的S與當前資料的摘要相同,如果程式碼或資料被篡改過,那麼解密後的簽名顯然不會與當前摘要相等。同時,其他人不知道我們的私鑰,也無法修改後重新簽名。

3.比特幣
比特幣是一種完全匿名的數字貨幣,它的身份認證是基於ECDSA。比特幣的賬戶地址就是對公鑰計算摘要得到的,向全世界公佈。而確認你是賬戶擁有者的唯一辦法就是看你有沒有賬戶對應的私鑰。對於比特幣中的任意一個交易記錄,只有當其中付款方的簽名是有效的,它才是有效的。如果賬戶私鑰丟失,那麼你將永遠地失去裡面的錢(相當於銀行卡丟了,沒法跟別人再交易了);一旦被駭客盜取,裡面的錢就完全歸駭客所有(駭客可以用私鑰簽名,交易,相當於駭客仿造你的筆跡跟別人籤合同)。

實際上不止rsa一種方法實現數字簽名,非對稱加密中還有DSA(基於離散對數問題),ECDSA(DSA的一個變種,基於橢圓曲線上的離散對數問題)也可用於簽名,但過程較rsa更為複雜,不作討論


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990899/viewspace-2743215/,如需轉載,請註明出處,否則將追究法律責任。

相關文章