數字簽名是非對稱加密算法與數字摘要技術的應用,數字摘要驗證了原文是否被篡改、公鑰私鑰保證了數字摘要的安全性,兩者配合使用安全性高,速度快。
非對稱密鑰加密: RSA 、ECC等,依賴密鑰長度來提高安全性,
數字摘要:將任意長度的消息變成固定長度的短消息,常用的加密算法包括 HASH (MD5、SHA1、SHA256)、HMAC(HmacMD5/HmacSHA1/HmacSHA256)等。
數字簽名過程:
環境:A 的公鑰公開,私鑰保密 ,A 和 B 都使用同樣的摘要算法 HASH。
• A 給 B 發送一段數據data,首先 A 使用 HASH 算法生成 data 的數字摘要 digestA,然后利用A的私鑰對數字摘要 digestA 進行加密生成 digestEncodeA ,然后將 data 和 digestEncodeA 一起發送給B。
• B 收到 A 發過來的 data 和 digestEncodeA 以后,首先使用 HASH 算法生成 data 的數字摘要 digestB ,然后用 A 的公鑰對 digestEncodeA 進行解密得到數字摘要 digestDecodeB,然后如果 digestB = digestDecodeB ,那么標明 data 是由 A 發送過來的 ,否則不是。
一、公鑰加密 假設一下,我找了兩個數字,一個是1,一個是2。我喜歡2這個數字,就保留起來,不告訴你們(私鑰),然后我告訴大家,1是我的公鑰。
我有一個文件,不能讓別人看,我就用1加密了。別人找到了這個文件,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用 數字2,就是我的私鑰,來解密。這樣我就可以保護數據了。
我的好朋友x用我的公鑰1加密了字符a,加密后成了b,放在網上。別人偷到了這個文件,但是別人解不開,因為別人不知道2就是我的私鑰, 只有我才能解密,解密后就得到a。這樣,我們就可以傳送加密的數據了。
二、私鑰簽名 如果我用私鑰加密一段數據(當然只有我可以用私鑰加密,因為只有我知道2是我的私鑰),結果所有的人都看到我的內容了,因為他們都知 道我的公鑰是1,那么這種加密有什么用處呢?
但是我的好朋友x說有人冒充我給他發信。怎么辦呢?我把我要發的信,內容是c,用我的私鑰2,加密,加密后的內容是d,發給x,再告訴他 解密看是不是c。他用我的公鑰1解密,發現果然是c。 這個時候,他會想到,能夠用我的公鑰解密的數據,必然是用我的私鑰加的密。只有我知道我得私鑰,因此他就可以確認確實是我發的東西。 這樣我們就能確認發送方身份了。這個過程叫做數字簽名。當然具體的過程要稍微復雜一些。用私鑰來加密數據,用途就是數字簽名。
總結:公鑰和私鑰是成對的,它們互相解密。
公鑰加密,私鑰解密。
私鑰數字簽名,公鑰驗證。