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更為復雜,不作討論
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/235546.html
標籤:區塊鏈
上一篇:基于區塊鏈的域名決議
