規范中有很多數學相關的推演和計算,並不打算在這里介紹,主要介紹一下相關的計算流程及最終的簽名結果。
算法可以分為:對稱算法和非對稱算法兩大類。對稱算法加密和解密都用的是同一個密鑰;而非對稱算法卻是有一對密鑰對(公鑰和私鑰),但是這對公鑰加密的東西,能用私鑰解開;反之亦然。
RSA就是屬於非對稱算法,RSA也有一對密鑰對用來參與運算。公鑰,顧名思義就是可以公開的密鑰,其實就是可以拿給大家看的密鑰。私鑰,當然就是只有自己才能知道的密鑰,不可以給人看的,也就是說只有你自己才能知道的。
一開始的時候,總是會分不清楚RSA加解密與簽名驗簽的關系是什么?
應用場景:
加解密,肯定是有什么東西是不想給別人知道的,好比有個寶貝得鎖在箱子里,鑰匙當然要在自己這里才安全。而RSA里面的私鑰呢只有自己可以看見,相當於鑰匙了。一把鑰匙對應一把鎖,這個鎖自然就是公鑰了。
簽名驗簽呢,就好比目前有一份合同,甲乙雙方都按了手印,以示達成協議,不再反悔,所以簽名的內容需要是公示給大家看的。但是只有自己親手按的才能認對吧,那肯定是要用私鑰做簽名了,因為私鑰只有自己才有啊;公鑰當然就用來驗簽了。
計算流程:
加解密:公鑰(鎖)對明文(寶貝)加密(鎖在箱子里);私鑰(鑰匙)對密文(鎖上的箱子)進行解密(打開箱子),就可以得到明文(寶貝)了。
簽名驗簽:私鑰(指紋)對明文(合同)進行簽名(按手印);公鑰(公安局里你的指紋記錄)對簽名值(按了手印的合同)進行驗簽(核驗手印是否匹配),如果匹配,就是驗簽通過,就沒有辦法抵賴了。
計算方法:
從計算流程上可以看出,如果拋開應用場景,而只關注數學運算的話:
加密:公鑰 + 明文 ---> 密文
驗簽:公鑰 + 簽名 ---> 驗簽結果
解密:私鑰 + 密文 ---> 明文
簽名:私鑰 + 明文 ---> 簽名
所以全部過程,只涉及:公鑰運算和私鑰運算而已。如果調用openssl的接口,就會發現只有RSA_decrypt和RSA_encrypt兩個函數就夠了。
