1. 程式人生 > >簡單科普簽名和加密

簡單科普簽名和加密

在平時使用中,經常有小朋友將簽名和加密亂叫,所以寫個小文章科普下。

先理一下主要概念:

簽名 sign:顧名思義,簽名是一個人(比如Alice)對於資訊的認可,比如Alice簽名以後一定會根據字的筆畫數在Alice名字的下面點多少個點。有了簽名,資料可以保證不被篡改,或者說篡改的資料不要了。

加密 encrypt: 想辦法將資訊隱藏不被別人看到,就好像給資料加了一把鎖。

所以,從字面上就能看到,簽名的報文內容別人是可以看到的,而加密不行。從這個主要特點,可以將兩者區分開。

=======

在簽名和加密的對面,收到報文的人,需要什麼操作呢?

驗證簽名 verify sign: 對於簽名,需要驗證簽名去確定這個簽名的有效性。不是說加了簽名就有用。驗證的主要有兩部分,是否是 Alice 的簽名,是否是 對於收到的報文的簽名。 兩者合起來,我們認為這次的報文是對的。  

驗證是否是 Alice的簽名,主要根據我們有的key,用常見的md5簽名為例,我們和Alice商定一個共同的key,只要是alice的簽名,都是用這個key,這樣就可以驗證了。按照舉例來,可以認為Alice每次簽名的筆跡都一樣,我們有一個副本,上去對比下,是否一樣。

驗證是否是該報文,主要根據簽名演算法,比如將某些字串排序,然後加上一個時間戳,組成一個簽名報文,再用key去簽名得到簽名串。簽名報文也就是簽名原串,這個串不一定就是收到的報文。這個在舉例中,可以認為我們也數了一下字的筆畫,然後再數數點對不對。

解密 decrpyt: 拿到一堆亂七八糟的字元,或者說拿到一個上鎖的保險箱,我肯定看不懂啊,所以需要進行解密。用鑰匙去解密,我們也需要一個key,然後利用加密演算法的特性,將報文解開。這裡演算法,又涉及兩個名詞,對稱加密和非對稱加密。

對稱加密:簡單講就是這個祕鑰key是一樣的,就好像我們家裡的鑰匙一樣,所有的鑰匙都是一樣的,你可以用這個鑰匙上鎖,也可以用這個鑰匙開鎖。常見的對稱加密演算法有 AES, DES,3DES(三把鎖,嘿嘿)。 

非對稱加密:上鎖的鑰匙(私鑰)和開鎖的鑰匙(公鑰)是一對的,上鎖的只能上鎖,開鎖的只能開鎖。常見的演算法有:RSA,ECC。

=========

一些使用中的問題:

1、為什麼rsa是加密演算法,但是我們也用來做簽名?

其實簽名並不關心使用的是什麼演算法,不過我們引入加密演算法,就會使簽名演算法更安全不可攻破,而且也比較容易實現。

2、簽名和加密中,都使用了金鑰,金鑰洩露就不安全了吧?

是的,所以金鑰的交換和保管也是一門學問。

非對稱加密自帶安全性,本身有一對金鑰,給你一把用來解密的,加密的我自己儲存。這樣就安全些了。

結合這個特性,有使用多重加密的,隨機產生一個金鑰,對資料進行加密,再將這個金鑰用非對稱加密了傳給接收方。

還有使用加密機的,金鑰就沒有出來,你只能告訴加密機,你要用第幾把鑰匙去加解密。

3、簽名後資料會被篡改嗎?

會的。比如被人攻破了演算法,而且知道這個簽名是有漏洞的。比如舉例的演算法,數筆畫,“一二三” “一四” 兩個字串,得到的簽名是一樣的,就會被篡改了。