加密算法分類: 對稱加密算法(又稱私鑰加密):AES DES、TripleDES、RC2、RC4、RC5和Blowfish等。 效率高 DES 56位,廢棄 AES 128位 加密強度是DES的1021倍,美國國家標準 非對稱加密算法(又稱公鑰加密):RSA DSA 生成一對密鑰,公鑰,私鑰。 公鑰用來加密和驗證簽名,私鑰用來解密和簽名。 算法複雜,需要大量計算,效率低。 Hash算法(單向加密): 密鑰的指紋:就是通過Hash算法算出來的指紋,用來覈實密鑰是否相同! 指紋是鑑別位置不同的兩個密鑰是否相同的常用的一種密碼學技術,用於不可能逐位對比兩個密鑰的情況。 指紋,是根據密鑰計算出來的一個長度較短的值。它的原理與檢驗和類似,用於驗證一串信息的不可替換性。 假設A得到了一個號稱是B的公鑰,於是A打電話給B,然後A和B都查看公鑰的指紋,如果兩個指紋相符,則可確保此公鑰確實來自B。 密鑰服務器:用來存放公鑰,通過KEY ID進行索引。 CA證書:包含發行機構信息和公鑰!通過Hash算法驗證證書真僞!SSL使用證書覈實身份。 ---------------------------------------------------------------------- 簽名原理 雙方使用同樣的密鑰對數據進行加密和解密,這種加密方式被稱作對稱加密,對應的密鑰就被稱作對稱密鑰。常用的對稱加密算法,如RC4、3DES、AES等,都具有高效的優點,即使是普通PC機也可以在短時間內使用這些算法對大量數據進行加解密。 相對於對稱加密,非對稱加密(或稱公鑰加密)則很好地克服了這個缺陷。非對稱加密需要使用不止一個,而是一對密鑰——一個公鑰和一個私鑰。明文數據使用公私鑰對中的一個密鑰加密後,只能由對應的另一個密鑰解密。應用非對稱加密時,用戶需要妥善保管私鑰,不得外泄或丟失,同時公開公鑰。 消息摘要是將一段任意長度的消息轉化成一個固定長度的短文本串的過程。對於信息安全領域所使用的摘要算法(如常用的MD5、SHA1),極難找到具有相同摘要的兩段不同的消息。 至此,保密性、完整性和身份驗證都圓滿地得到了解決。完整的數據傳輸過程如下: 發件人 對消息進行數字簽名 計算消息摘要 用自己的私鑰加密消息摘要,得到數字簽名 加密簽名後的消息 隨機生成一個對稱密鑰 用對稱密鑰加密消息和數字簽名,得到消息密文 用收件人的公鑰加密對稱密鑰,得到對稱密鑰密文 將對稱密鑰密文和消息密文合併後發送給收件人 收件人 解密 用自己的私鑰解密對稱密鑰 用對稱密鑰解密消息密文得到消息明文和數字簽名 校驗數字簽名 計算消息摘要 用發件人的公鑰解密數字簽名,得到原始消息摘要 比對兩個消息摘要 每個公鑰有一個對應的8位KEY ID 如果我們把公鑰都發布到一個公共的地方,然後只在紙上互相交換8位的Key ID,再用Key ID到這個公共的地方下載對應的公鑰,就可以安全且方便地交換公鑰了。而這個公共的地方,就是密鑰服務器(Key Server)。GnuPG Shell內置了對密鑰服務器的支持,可以直接向服務器發佈新密鑰或通過Key ID獲取已經發布到服務器上的其他密鑰。其使用方法也比較簡單直接,這裏就不贅述了。 或者通過物理方式交換公鑰,避免公鑰被篡改。 參考 http://blog.liancheng.info/?p=338 --------------------------------------------------------------------- SSL原理 http://xiejin2008.javaeye.com/blog/720760 1.服務器通過證書將公鑰給與客戶端,客戶端根據證書確認服務器的真實身份。 (客戶端反過來將證書給服務器,可以讓服務器確認客戶端的身份) 2.通過公鑰,私鑰來交換真正通信時使用的對稱密鑰 3.通過對稱密鑰進行通信 證書:通過非對稱密鑰加密簽名過的信息文件,證書包含了發行機構,發行機構的域名,已經公鑰。證書末尾對簽名的信息進行了簽名,以保證信息沒有被篡改,通過證書,客戶端可以確認公鑰的可靠性 具體過程: 1.客戶端向服務器請求鏈接 2.服務器返回證書 3.客戶端驗證證書,隨機生成對稱密鑰,用公鑰加密對稱密鑰,發回服務器 4.服務器用私鑰揭開公鑰加密的對稱密鑰,然後用對稱密鑰開始與客戶端通信。 ---------------------------------------------------------- 數字證書認證 CA 證書認證機構 CA(Certificate Authority)是數字證書認證中心的簡稱,是指發放、管理、廢除數字證書的機構。CA的作用是檢查證書持有者身份的合法性,並簽發證書(在證書上簽字),以防證書被僞造或篡改,以及對證書和密鑰進行管理。 CA根證書,用戶的證書是被CA認證機構的根證書認證的。會形成證書信任鏈,最終由根證書結束。 CA也擁有一個證書(內含公鑰),當然,它也有自己的私鑰,所以它有簽字的能力。網上的公衆用戶通過驗證CA的簽字從而信任CA,任何人都應該可以得到CA的證書(含公鑰),用以驗證它所簽發的證書。 如果用戶想得到一份屬於自己的證書,他應先向CA提出申請。在CA判明申請者的身份後,便爲他分配一個公鑰,並且CA將該公鑰與申請者的身份信息綁在一起,併爲之簽字後,便形成證書發給那個用戶(申請者)。 如果一個用戶想鑑別另一個證書的真僞,他就用CA的公鑰對那個證書上的簽字進行驗證(如前所述,CA簽字實際上是經過CA私鑰加密的信息,簽字驗證的過程還伴隨使用CA公鑰解密的過程),一經驗證通過,該證書就被認爲是有效的。 CA除了簽發證書之外,它的另一個重要作用是證書和密鑰的管理。 由此可見,證書就是用戶在網上的電子個人身份證,同日常生活中使用的個人身份證作用一樣。CA相當於網上公安局,專門發放、驗證身份證。 --------------------------------------------------------- X.509標準 數字證書格式 -------------------------------------------------------- X.500協議 目錄服務協議 LDAP Lightweight Directory Access Protocol,輕量級目錄訪問協議。它是基於X.500標準的,但是簡單多了並且可以根據需要定製。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。 -------------------------------------------------------- OCSP(Online Certificate status Protocol)在線證書狀態協議 -----------------------事例------------------------------ xuhejie@xuhejie-desktop:~/note$ gpg --list-key /home/xuhejie/.gnupg/pubring.gpg -------------------------------- pub 2048R/10C49A72 2010-10-23 uid soulxu <[email protected]> sub 2048R/7528D4A4 2010-10-23 pub 2048R/67D305B1 2010-11-13 uid [email protected] <[email protected]> sub 2048R/E7E9FE4E 2010-11-13 xuhejie@xuhejie-desktop:~/note$ gpg --list-secret-key /home/xuhejie/.gnupg/secring.gpg -------------------------------- sec 2048R/10C49A72 2010-10-23 uid soulxu <[email protected]> ssb 2048R/7528D4A4 2010-10-23 sec 2048R/67D305B1 2010-11-13 uid [email protected] <[email protected]> ssb 2048R/E7E9FE4E 2010-11-13 #pub 2048R/10C49A72 此爲KEY ID #使用gpg --export 導出的是公鑰 #--list-key默認輸出的是私鑰 #gpg --gen-key用來生成密鑰對 -------------------------------------------------- gpg介紹: 支持的算法: 公鑰: RSA, RSA-E, RSA-S, ELG-E, DSA 對稱加密: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 散列: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 壓縮: 不壓縮, ZIP, ZLIB, BZIP2 gpg --gen-key 生成密鑰 gpg --list-keys 列出所有公鑰 gpg --list-secret-keys 列出所有私鑰 gpg --delete-secret-keys [keyid] 刪除私鑰 如果存在公鑰和私鑰,需先刪除私鑰 gpg --delete-keys [keyid] 刪除公鑰 gpg --export [keyid] > outfile.asc 導出公鑰 gpg --print-md [算法] [文件] 計算散列 gpg -r [公鑰] -e [文件] 使用指定公鑰加密 gpg -d [文件] 使用密鑰解密指定文件 gpg --edit-key 編輯簽名,如--trust修改信任度 -------------------------------------------------- 密鑰庫文件格式(Keystore)和證書文件格式(Certificate) 密鑰庫文件格式【Keystore】 格式 : JKS 擴展名 : .jks/.ks 描述 : 【Java Keystore】密鑰庫的Java實現版本,provider爲SUN 特點 : 密鑰庫和私鑰用不同的密碼進行保護 格式 : JCEKS 擴展名 : .jce 描述 : 【JCE Keystore】密鑰庫的JCE實現版本,provider爲SUN JCE 特點 : 相對於JKS安全級別更高,保護Keystore私鑰時採用TripleDES 格式 : PKCS12 擴展名 : .p12/.pfx 描述 : 【PKCS #12】個人信息交換語法標準 特點 : 1、包含私鑰、公鑰及其證書 2、密鑰庫和私鑰用相同密碼進行保護 格式 : BKS 擴展名 : .bks 描述 : Bouncycastle Keystore】密鑰庫的BC實現版本,provider爲BC 特點 : 基於JCE實現 格式 : UBER 擴展名 : .ubr 描述 : 【Bouncycastle UBER Keystore】密鑰庫的BC更安全實現版本,provider爲BC 證書文件格式【Certificate】 格式 : DER 擴展名 : .cer/.crt/.rsa 描述 : 【ASN .1 DER】用於存放證書 特點 : 不含私鑰、二進制 格式 : PKCS7 擴展名 : .p7b/.p7r 描述 : 【PKCS #7】加密信息語法標準 特點 : 1、p7b以樹狀展示證書鏈,不含私鑰 2、p7r爲CA對證書請求籤名的回覆,只能用於導入 格式 : CMS 擴展名 : .p7c/.p7m/.p7s 描述 : 【Cryptographic Message Syntax】 特點 : 1、p7c只保存證書 2、p7m:signature with enveloped data 3、p7s:時間戳簽名文件 格式 : PEM 擴展名 : .pem 描述 : 【Printable Encoded Message】 特點 : 1、該編碼格式在RFC1421中定義,其實PEM是【Privacy-Enhanced Mail】的簡寫,但他也同樣廣泛運用於密鑰管理 2、ASCII文件 3、一般基於base 64編碼 格式 : PKCS10 擴展名 : .p10/.csr 描述 : 【PKCS #10】公鑰加密標準【Certificate Signing Request】 特點 : 1、證書籤名請求文件 2、ASCII文件 3、CA簽名後以p7r文件回覆 格式 : SPC 擴展名 : .pvk/.spc 描述 : 【Software Publishing Certificate】 特點 : 微軟公司特有的雙證書文件格式,經常用於代碼簽名,其中 1、pvk用於保存私鑰 2、spc用於保存公鑰