數字簽名簡介

2021-09-28 22:27:47 字數 2826 閱讀 3885

簽名的作用無非就是證明某個檔案上的內容確實是我寫的/我認同的,別人不能冒充我的簽名(不可偽造),我也不能否認上面的簽名是我的(不可抵賴)。

我們知道,手寫簽名之所以不能偽造,是因為每乙個人的筆跡都是獨一無二的,即使模仿,也可以通過專家鑑定分別出來。而不可抵賴,是因為每個人的筆跡都有固定特徵,這些特徵是很難擺脫的。

正是這兩點特性使得手寫簽名在日常生活中被廣泛承認,比如簽合同、借條等等。

而數字簽名,它的作用跟手寫簽名其實是一樣的,用來證明某個訊息或者檔案是本人發出/認同的。我國在2023年就已經施行《電子簽名法》,確立了電子簽名(包括但不限於數字簽名)的法律效力。

那麼數字簽名又是靠什麼保證不可偽造和不可抵賴兩個特性呢?

答案是利用公鑰加密系統。常用的簽名演算法有

其中rsa是實現數字簽名最簡單的公鑰加密方法。

rsa是乙個非常神奇的加密演算法,它具有乙個離散對數和橢圓曲線加密都沒有的特性:

既可以用公鑰加密然後私鑰解密,也可以用私鑰加密然後公鑰解密(對稱性)。

公鑰加密然後私鑰解密,可以用於通訊中擁有公鑰的一方向擁有私鑰的另一方傳遞機密資訊,不被第三方竊聽。

那麼私鑰加密然後公鑰解密是用在什麼場合呢?就是數字簽名。

因為rsa中的每乙個公鑰都有唯一的私鑰與之對應,任一公鑰只能解開對應私鑰加密的內容。換句話說,其它私鑰加密的內容,這個公鑰是解不開的。

這樣,如果你生成了一對rsa金鑰,你把公鑰公布出去,並告訴全世界人這個公鑰是你的。之後你只要在傳送的訊息,比如「123456」,後面加上用私鑰加密過的密文,其他人拿公鑰解密,看解密得到的內容是不是「123456」就可以知道這個「123456」是不是你發的。

其他人因為沒有對應的私鑰,所以沒法生成公鑰可以解密的密文,所以是不可偽造的。

又因為公鑰對應的私鑰只有乙個,所以只要能成功解密,那麼發訊息的一定是你,不會是其他人,所以是不可抵賴的。

當然,在數字簽名的過程中,我們不需要對「123456」保密,所以加密、解密這樣的名詞在這個場景中並不準確,用簽名解籤會更合適。

實際應用中,由於直接對原訊息進行簽名有安全性問題,而且原訊息往往比較大,直接使用rsa演算法進行簽名速度會比較慢,所以我們一般對訊息計算其摘要(使用sha-256等安全的摘要演算法),然後對摘要進行簽名。只要使用的摘要演算法是安全的(md5、sha-1已經不安全了),那麼這種方式的數字簽名就是安全的。

乙個具體的rsa簽名過程如下:

小明對外發布公鑰,並宣告對應的私鑰在自己手上

小明對訊息m計算摘要,得到摘要d

小明使用私鑰對d進行簽名,得到簽名s

將m和s一起傳送出去

驗證過程如下:

接收者首先對m使用跟小明一樣的摘要演算法計算摘要,得到d

使用小明公鑰對s進行解籤,得到d』

如果d和d』相同,那麼證明m確實是小明發出的,並且沒有被篡改過

手寫簽名可以用來簽合同,那麼數字簽名可以用來幹什麼呢?

「簽名演算法」一欄可以看到,它使用的是sha256rsa,也就是使用sha-256計算摘要,然後使用rsa對摘要進行簽名。而在「公鑰」一欄則儲存著該證書的「本體」,用於驗證簽名的rsa公鑰。

而除此之外,還有個地方我們經常碰到數字簽名的——**簽名。

如果windows上的可執行程式程式**於正規公司,那麼通常它會有**簽名,用於確保其**可靠且未被篡改。以qq為例,它的數字簽名是這樣的。

如果某個程式沒有數字簽名,那麼它的安全性往往就沒***,如果它有數字簽名,但是顯示「此數字前面無效」,那麼這個程式要麼被篡改了要麼損壞了,不管哪種可能都不應該嘗試執行它。

實際上,驗證數字簽名並不需要我們手動去檢視,如果你沒有關閉windows的uac(使用者賬戶控制)功能,那麼你在執行任何程式的時候系統都會自動驗證其簽名,如果是簽名有效的程式,那麼彈出來的uac對話方塊是藍色或者灰色的,如果沒有簽名,那麼會是醒目黃色的。而如果簽名被阻止,則會顯示紅色並且不允許執行。

但是數字簽名不是萬能的。事實上不管是瀏覽器的數字簽名還是**的數字簽名,都依賴於系統或者瀏覽器內建的根證書,如果電腦本身已經中毒或者被入侵,那麼這些根證書可以被輕易新增或者修改,這時的數字簽名的安全性可以說是蕩然無存了。

即使是正常簽名的軟體,也不能保證發行公司不耍流氓,很多流氓軟體都是由一些不知名的小公司搞出來的;或者某些小公司篡改知名軟體,加入自己的**,然後用自己的私鑰進行簽名,這些數字簽名也都是有效的,但是我相信你不會想執行這些軟體的。如果對安全性要求比較高,可以手動或者借助工具吊銷那些不太安全的根證書,具體方法已經超出本文討論範疇,讀者可以自行尋找。

位元幣是一種完全匿名的數字貨幣,它的身份認證是基於ecdsa。位元幣的賬戶位址就是對公鑰計算摘要得到的,向全世界公布。而確認你是賬戶擁有者的唯一辦法就是看你有沒有賬戶對應的私鑰。對於位元幣中的任意乙個交易記錄,只有當其中付款方的簽名是有效的,它才是有效的。如果賬戶私鑰丟失,那麼你將永遠地失去裡面的錢;一旦被黑客盜取,裡面的錢就完全歸黑客所有。

上面說到,rsa是數字簽名最簡單的演算法,為了做對比,大家可以感受一下dsa是如何實現的。

可以看到dsa過程明顯要比rsa簽名複雜不少,除非親自動手去推導它的正確性,不然很難直觀地感受為什麼這樣是可行的。

數字簽名原理簡介

首先要了解什麼叫對稱加密和非對稱加密,訊息摘要這些知識。1.非對稱加密 在通訊雙方,如果使用非對稱加密,一般遵從這樣的原則 公鑰加密,私鑰解密。同時,一般乙個金鑰加密,另乙個金鑰就可以解密。因為公鑰是公開的,如果用來解密,那麼就很容易被不必要的人解密訊息。因此,私鑰也可以認為是個人身份的證明。如果通...

數字簽名簽名概述

數字簽名的技術流程描述 1 傳送者使用摘要演算法對傳送資訊產生資訊摘要 2 傳送者使用自己的私鑰對資訊摘要進行簽名 3 傳送者將資訊本身和已簽名的摘要一起傳送出去 4 接收者使用相同的摘要演算法對資訊本身計算資訊摘要 5 接收者使用傳送者的公鑰對簽名的摘要就行驗籤,獲得資訊傳送者的資訊摘要 6 接收...

數字簽名原理簡介(附數字證書)

首先要了解什麼叫對稱加密和非對稱加密,訊息摘要這些知識。1.非對稱加密 在通訊雙方,如果使用非對稱加密,一般遵從這樣的原則 公鑰加密,私鑰解密。同時,一般乙個金鑰加密,另乙個金鑰就可以解密。因為公鑰是公開的,如果用來解密,那麼就很容易被不必要的人解密訊息。因此,私鑰也可以認為是個人身份的證明。如果通...