http://deep-fish.iteye.com/blog/760311
公鑰私鑰數字證書及工作原理
公鑰一般用於加密,驗證簽名
私鑰一般用於簽名
簽名的具體作法:
首先將信息“***”通過散列算法計算后得到的報文摘要,然后通過私鑰對摘要進行加密,后面簽名有三種證書:建
銀行系統一般是:
1. 用對方的公鑰加密數據,對方收到后用自己的私鑰解密;
2. 用你自己的私鑰簽名數據,對方收到后用你自己的公鑰驗證簽名。
網銀在傳遞數據過程中要把”傳遞的數據“用自己的私鑰進行簽名,而且要把”傳遞的數據“用公鑰進行加密
客戶端有自己的私鑰和一個數字證書,其中私鑰和服務器中的公鑰成對,而且是數字證書中的公鑰和服務器上的私鑰成對
過程如下:
(1)客戶A准備好要傳送的數字信息(明文)。
(2)客戶A對數字信息進行哈希(hash)運算,得到一個信息摘要。
3)客戶A用自己的私鑰(SK)對信息摘要進行加密得到客戶A的數字簽名,並將其附在數字信息上。
4)客戶A隨機產生一個加密密鑰(DES密鑰),並用此密鑰對要發送的信息進行加密,形成密文。
5)客戶A用雙方共有的公鑰(PK)對剛才隨機產生的加密密鑰進行加密,將加密后的DES密鑰連同密文一起傳送給乙。
6)銀行B收到客戶A傳送過來的密文和加過密的DES密鑰,先用自己的私鑰(SK)對加密的DES密鑰進行解密,得到DES
7)銀行B然后用DES密鑰對收到的密文進行解密,得到明文的數字信息,然后將DES密鑰拋棄(即DES密鑰作廢)。
8)銀行B用雙方共有的公鑰(PK)對客戶A的數字簽名進行解密,得到信息摘要。銀行B用相同的hash算法對收到的明
9)銀行B將收到的信息摘要和新產生的信息摘要進行比較,如果一致,說明收到的信息沒有被修改過。
ssh公鑰私鑰認證原理
-
通常,通過ssh登錄遠程服務器時,使用密碼認證,分別輸入用戶名和密碼,兩者滿足一定規則就可以登錄。但是密碼認證有以下的缺點:
用戶無法設置空密碼(即使系統允許空密碼,也會十分危險)
密碼容易被人偷窺或猜到
服務器上的一個帳戶若要給多人使用,則必須讓所有使用者都知道密碼,導致密碼容易泄露,而且修改密碼時必須通知所有人
而使用公鑰認證則可以解決上述問題。公鑰認證允許使用空密碼,省去每次登錄都需要輸入密碼的麻煩
多個使用者可以通過各自的密鑰登錄到系統上的同一個用戶
公鑰認證的原理
所謂的公鑰認證,實際上是使用一對加密字符串,一個稱為公鑰(public key),任何人都可以看到其內容,用於加密;另一個稱為密鑰(private key),只有擁有者才能看到,用於解密。通過公鑰加密過的密文使用密鑰可以輕松解密,但根據公鑰來猜測密鑰卻十分困難。ssh 的公鑰認證就是使用了這一特性。服務器和客戶端都各自擁有自己的公鑰和密鑰。為了說明方便,以下將使用這些符號。
Ac 客戶端公鑰
Bc 客戶端密鑰
As 服務器公鑰
Bs 服務器密鑰在認證之前,客戶端需要通過某種方法將公鑰 Ac 登錄到服務器上。
認證過程分為兩個步驟。
會話密鑰(session key)生成
客戶端請求連接服務器,服務器將 As 發送給客戶端。
服務器生成會話ID(session id),設為 p,發送給客戶端。
客戶端生成會話密鑰(session key),設為 q,並計算 r = p xor q。
客戶端將 r 用 As 進行加密,結果發送給服務器。
服務器用 Bs 進行解密,獲得 r。
服務器進行 r xor p 的運算,獲得 q。
至此服務器和客戶端都知道了會話密鑰q,以后的傳輸都將被 q 加密。
認證
服務器生成隨機數 x,並用 Ac 加密后生成結果 S(x),發送給客戶端
客戶端使用 Bc 解密 S(x) 得到 x
客戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的會話密鑰
服務器計算 q + x 的 md5 值 m(q+x)
客戶端將 n(q+x) 發送給服務器
服務器比較 m(q+x) 和 n(q+x),兩者相同則認證成功
公鑰和私鑰就是俗稱的不對稱加密方式,是從以前的對稱加密(使用用戶名與密碼)方式的提高。我用電子郵件的方式說明一下原理。
使用公鑰與私鑰的目的就是實現安全的電子郵件,必須實現如下目的:
1. 我發送給你的內容必須加密,在郵件的傳輸過程中不能被別人看到。
2. 必須保證是我發送的郵件,不是別人冒充我的。
要達到這樣的目標必須發送郵件的兩人都有公鑰和私鑰。
公鑰,就是給大家用的,你可以通過電子郵件發布,可以通過網站讓別人下載,公鑰其實是用來加密/驗章用的。私鑰,就是自己的,必須非常小心保存,最好加上 密碼,私鑰是用來解密/簽章,首先就Key的所有權來說,私鑰只有個人擁有。公鑰與私鑰的作用是:用公鑰加密的內容只能用私鑰解密,用私鑰加密的內容只能 用公鑰解密。
比如說,我要給你發送一個加密的郵件。首先,我必須擁有你的公鑰,你也必須擁有我的公鑰。
首先,我用你的公鑰給這個郵件加密,這樣就保證這個郵件不被別人看到,而且保證這個郵件在傳送過程中沒有被修改。你收到郵件后,用你的私鑰就可以解密,就能看到內容。
其次我用我的私鑰給這個郵件加密,發送到你手里后,你可以用我的公鑰解密。因為私鑰只有我手里有,這樣就保證了這個郵件是我發送的。
當A->B資料時,A會使用B的公鑰加密,這樣才能確保只有B能解開,否則普羅大眾都能解開加密的訊息,就是去了資料的保密性。驗證方面則是使用簽 驗章的機制,A傳資料給大家時,會以自己的私鑰做簽章,如此所有收到訊息的人都可以用A的公鑰進行驗章,便可確認訊息是由 A 發出來的了。
