? ? ? ? 本人,由于項目最近要加一套簽名驗簽的機制,又沒有做過,經查閱資料,做了簡單的梳理,如有不合理之處,請多多指教。
下面是我梳理的一份流程圖,簡單說說:
? ? ????首先得簡單了解公私鑰是干嘛的,對稱加密與非對稱加密,證書又是怎么回事,以及usbKey或藍牙Key方面的相關信息。
公私鑰
? ? ????百度百科:公鑰(Public Key)與私鑰(Private Key)是通過一種算法得到的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對中公開的部分,私鑰則是非公開的部分。
對稱加密
? ??????需要對加密和解密使用相同密鑰的加密算法。雖然加解密速度快,但是不安全,因為使用相同的密鑰就要保障每次加密后將密鑰安全的傳遞給解密者,無疑密鑰管理成為雙方的負擔。
非對稱加密
? ??????非對稱加密算法需要兩個密鑰來進行加密和解密,這兩個秘鑰是公開密鑰(public key,簡稱公鑰)和私有密鑰(private key,簡稱私鑰)。
? ??? ????公私鑰是一對密鑰對,任何一個加密之后,只能用另一個解密,公鑰用于客戶端加密(公開的),私鑰用于服務端解密。因此,只要保證私鑰安全不丟,那么傳輸的數據就是安全的。
CA證書
? ? ? ? 它是由權威機構頒發的,經過國際認證的,CA 也擁有一個證書(內含公鑰和私鑰)。證書的內容包括:電子簽證機關的信息、公鑰用戶信息、公鑰、權威機構的簽字和有效期等等。目前,證書的格式和驗證方法普遍遵循X.509 國際標準。
圖解
????????了解這些后,簡單說說簽名驗簽過程。首先做key的廠商會先燒Key,不同的廠商根證書是不一樣的,需要我們存儲在服務端,再建用戶的時候會將key的序列號跟用戶綁定。客戶端()先對需要做簽名的數據做一次hash(算法協商),再拿key里的私鑰對hash值做加密得到簽名值,然后將簽名原文、簽名值、公鑰證書一塊發給服務端,服務端用已存儲的根證書驗證客戶端公鑰證書的有效性,拿公鑰解密簽名得到客戶端送的hash值1,服務端對簽名原文做相同的hash得到hash值2,比較hash值1和hash值2,驗簽完成。
? ? 其實驗完證書有效性后,還可以對hash值做反向hash,得到明文,對比一下,驗簽完成。