午休時,想起自己以前做的乙個配置檔案簽名的例子.這裡簡單回顧一下幾個基本概念!
(1)非對稱金鑰指的是一對金鑰:私鑰和公鑰.
私鑰和公鑰並無特別的區分,只是對外公布的金鑰稱為公鑰,自己保留的稱為私鑰.這對金鑰中,其中任何乙個用來加密,可以使用另乙個進行唯一解密.且相互之前無法推到得出.
(2)加密分為兩種情況:對稱加密和非對稱加密.兩者用在不同的情況下.一般情況下,對稱金鑰適用於大量內容的加密.非對稱金鑰用於少量內容的加解密(主要考慮效率的問題,典型的應用為ssl).
(3)數字簽名指的是對資訊摘要進行加密.一般分為兩個步驟:摘要和加密.
<1>首先對明文利用摘要演算法抽出一段固定位元組的摘要.關於摘要演算法的幾種性質,這裡不做討論.讀者記住不可逆就可以了.
<2>對上述摘要用自己的私鑰加密.這個過程就稱為簽名.相當於打上了你的資訊.別人也無法冒充你,同時你也無法抵賴哦.
(4)證書指的是封裝公鑰,同時該公鑰已經過公證了,有權威第三方證實過了.表明該公鑰指的信任,所以無法假冒的.
情景假設:
a給b傳送資訊.
<1>首先假設a,b都各自擁有了"對方"的公鑰(這裡的公鑰之所以加了引號,表明公鑰不一定真的是對方的,至少使用者是堅信這就是對方的)
<2>還有乙個角色是第三方
因為內容需要保密,故a用b的公鑰加密,並傳送給b.理論上講b收到資訊後,用自己的私鑰解密就可以了.但是存在以下幾個疑點:
第一:b如何確定這個是a傳送過來的呢.
第二:a如何確定自己用於加密的對方的公鑰就是b的呢.
第三:b如何確定自己持有的公鑰就一定是a的呢.
對於第乙個問題:就要用到簽名了.即發給b的資訊上加上自己的簽名.
a只需要使用sha256演算法(一種摘要演算法)對明文處理,抽出一段摘要.並用自己的私鑰對這段摘要加密.
再把明文和簽名一起用b的公鑰加密.最後將這個加密信件發給b.(注意,這裡的明文和簽名可能經過特殊的封裝.常見的標準是pkcs系列,如:pkcs7.這裡一併封裝了使用了何種摘要演算法)
b收到資訊後,使用自己的私鑰解密,拿出兩個東西:明文和簽名.b用向指明的摘要演算法對明文再做一次摘要處理得摘要1.然後用a的公鑰解密簽名,拿出摘要2..此時,b手裡有兩份摘要.b比較z這兩份摘要.若一致.,則表明這個確實是a傳送過來的.
以上都是在假定a和b手裡的公鑰都是對方的才正確!!
對於第二和第三個疑點的處理為證書:通常a和b的公鑰都通過了第三方(ca中心)公證過了.ca用自己的私鑰簽名過了.當然ca不可能處理全球這麼多的公證需求.所以存在證書鏈一說.這裡不討論了.
思路就是:
首先使用openssl生成一對金鑰.要求按照spec生成.然後自簽名乙個pkcs12格式證書.pkcs12證書封裝了公鑰和私鑰.不過這裡的私鑰還需要手動設定一段密碼,加密.不用擔心這裡的私鑰的安全性.這裡主要考慮到私鑰需要存放在產品中,已方便使用者上傳配置檔案時進行解簽名.
設計的一對簽名/解籤api是基於openssl庫完成.openssl本身存在一對api實現pkcs7格式的簽名.所以,只要相應的處理一下即可.
謝謝~~~~
加密和簽名證書
1.5 簽名和加密 我們說加密 是指對某個內容加密,加密後的內容還可以通過 解密進行還原。比如我們把一封郵件進行加密,加密後的內容在網路上進行傳輸,接收者在收到後,通過 解密可以還原郵件的真實內容。這裡主要解釋一下簽名,簽名就是在資訊的後面再加上一段內容,可以證明 資訊 沒有被修改過,怎麼樣可以達到...
簽名證書VS加密證書
從證書的用途來看,數字證書可以分為 簽名證書 主要用於對使用者資訊進行簽名,以保證資訊的不可否認性。加密證書 主要用於對使用者傳送資訊進行加密,以保證資訊的真實性和完整性。什麼是加密證書和簽名證書?數字證書可分為簽名證書和加密證書。簽名證書主要用於對使用者資訊進行簽名,以保證資訊的有效性和不可否認性...
加密 簽名 證書的區別和使用
在實際開發的過程中,我們經常會用到一些安全加密的手段,通常會用到加密 簽名 證書等等 而當提及他們的作用與區別時候,我們可能並不是十分理解。作者在最近的工作中也遇到了相關的需求,在查閱了相關的資料之後,覺得有必要做一些整理,留作日後查閱之用 也希望後來者讀到這篇文章時能有所收穫。通常,我們認為滿足資...