這篇博客,講一些名稱,很基礎,但是一直沒有整理過。這些名詞包括:
對稱加密、非對稱加密、數字簽名、數字證書、簽名加密
1、對稱加密
對稱加密的方式很簡單,就是加密和解密使用同一套規則,這種加密方式有一個很大的問題就是,保存和傳遞密鑰,如果在傳遞的過程中,信息被截取到,那么就可以使用密鑰對信息進行解密。
2、非對稱加密
這種加密方式就是,加密方和解密方可以使用不同的加密規則。這樣的話就有兩套密鑰,公鑰和私鑰。
乙方生成兩把密鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的。
甲方獲取乙方的公鑰,然后用它對信息加密。
乙方得到加密后的信息,用私鑰解密。
其中具體的原理在博客:RSA算法原理中有很詳細的介紹。
這樣就避免了傳輸明文的時候傳輸秘鑰,即便消息在傳輸過程中被截獲,也不會被破解。
如上圖,乙產生公鑰和私鑰,公鑰可以給任何人,加使用公鑰對問價加密,乙使用私鑰對文件進行解密。
公鑰加密,私鑰解密。
3、數字簽名
數字簽名的作用在于用來鑒別接受方接受到的信息是否是發送方發送過來的,并且中間是否又被篡改過。
如上圖1,公鑰可以被任何獲取,然后對文件加密。假設這樣一種情況:
甲使用公鑰對文件進行加密,然后向乙傳輸密文,但是傳輸的過程中,被同樣有公鑰的丙截獲(公鑰任何人都可以擁有),這個時候丙利用自己的公鑰,重新加密一封密文,傳輸給乙。如此一來,乙收到的密文不是甲傳過來的,而是丙傳過來的。但是乙并不知道。如此一來,就產生了文件被掉包。
數字簽名的作用就是用來校驗文件是否在傳輸過程中是否被篡改和掉包。具體實現方式有兩種:無保密機制簽名和保密機制簽名
3.1無保密機制簽名
甲在對明文加密之前,先使用摘要算法,對明文生成摘要,然后把摘要使用非對稱加密的方式進行加密,然后傳輸給乙,乙收到摘要密文后使用私鑰進行解密,然后把收到的文件明文進行摘要算法,得到摘要后和乙傳輸過來的密文進行比對。就可以知道,文件是否被替換。
具體過程如上圖:
(1)發送方采用某種摘要算法從報文中生成一個128位的散列值(稱為報文摘要);
(2)發送方用RSA算法和自己的私鑰對這個散列值進行加密,產生一個摘要密文,這就是發送方的數字簽名;
(3)將這個加密后的數字簽名作為報文的附件和報文一起發送給接收方:
(4)接收方從接收到的原始報文中采用相同的摘要算法計算出128位的散列值;
(5)報文的接收方用RSA算法和發送方的公鑰對報文附加的數字簽名進行解密;
(6)如果兩個散列值相同,那么接收方就能確認報文是由發送方簽名的。
最常用的摘要算法叫做MD5(Message Digest 5),它的作者R.L.
3.2保密機制簽名
上面的加密方式中,只是實現了使用簽名如何對校驗傳輸數據是否被篡改和替換,但是傳輸的還是明文,如果要想對傳輸明文進行加密成密文,是否也要使用RSA加密算法呢?
這種做法很不可取,因為RSA加密算法效率很低,所需加密的明文越長,效率會呈指數下降。那么應該怎么辦呢?
方法就是:
使用對稱加密的方式對明文加密,然后將對稱加密的秘鑰使用RSA加密,然后在對密文生成摘要,然后傳輸
如上圖,具體加密步驟為:
(1)發送方選擇一個對稱加密算法(比如DES)和一個對稱密鑰對報文進行加密;
(2)發送方用接收方的公鑰和RSA算法對第1步中的對稱密鑰進行加密,并且將加密后的對稱密鑰附加在密文中;
(3)發送方使用一個摘要算法從第2步的密文中得到報文摘要,然后用RSA算法和發送方的私鑰對此報文摘要進行加密,這就是發送方的數字簽名;
(4)將第3步得到的數字簽名封裝在第2步的密文后,并通過網絡發送給接收方;
(5)接收方使用RSA算法和發送方的公鑰對收到的數字簽名進行解密,得到一個報文摘要;
(6)接收方使用相同的摘要算法,從接收到的報文密文中計算出一個報文摘要;
(7)如果第5步和第6步的報文摘要是相同的,就可以確認密文沒有被篡改,并且是由指定的發送方簽名發送的;
(8)接收方使用RSA算法和接收方的私鑰解密出對稱密鑰;
(9)接收方使用對稱加密算法(比如DES)和對稱密鑰對密文解密,得到原始報文。
4、簽名證書
假設一種更為復雜的情況,甲在給乙傳輸密文的時候,使用公鑰加密,但是這個時候,丁把甲的電腦偷走,換成自己的公鑰,但是甲不知道,使用丁的公鑰加密后給乙傳輸密文,這樣如果丁截取到密文,就可以使用自己的私鑰進行解密。
那么怎么知道自己的公鑰就是自己的呢?這就用到了簽名證書。
找“證書中心”(certification authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息進行加密,生成“數字證書”(Digital Certificate)。
不是悶騷的程序員算不上程序員。我的微信公眾號“那點鼻事”,在這里周一到周五每天一篇文章,與技術無關,只哈牛逼。