PKI
Public Key Infrastructure的縮寫,即公開密鑰基礎設施,它是國際上解決開放式互聯網絡信息安全需要的一套體系。PKI體系支持身份認證,信息傳輸、存儲的安全性,消息傳輸、存儲的機密性,以及操作的不可否認性。“基礎設施”的作用就是只要遵從必要的原則,不同的實體都可以方便的使用基礎設施提供。
PKI的核心是認證中心(CA)。CA就像公安局發(fā)放身份證一樣,發(fā)放一個叫“數字證書”的身份證明,這個數字證書包含了用戶身份的部分信息,以及用戶持有的公鑰。
PKI的核心技術基礎是公鑰密碼學的“加密”和“簽名”技術
數字證書(公鑰)
數字證書就是網絡通信中標識通信各方神風信息的一系列數據,其作用類似于顯示生活中的身份證。
最簡單的證書包含一個公開密鑰、名稱以及證書授權中心的數字簽名。一般情況下證書匯總還包括密鑰的有效時間、發(fā)證機關的名稱、改證書的序列號等信息,證書的格式遵循ITUT X.509國際標準。
1、原理
數字證書采用公鑰體制,即利用一對互相匹配的密鑰進行加密、解密。每個用戶可以設定一把特定的僅為本人所知的私鑰,用它進行解密和簽名;同時設定一把公鑰并由本人公開,為一組用戶所共享,用于加密和驗證簽名。當發(fā)送一份保密文件時,發(fā)送方使用接收方的公鑰對數據加密,而接收方則使用自己的私鑰解密,這樣信息就可以安全無誤的到達目的地。通過數字的手段保證加密過程是一個不可逆的,即只有用私鑰才能解密。(公鑰加密私鑰解密)
RSA加密算法。其數學原理是將一個大數分解成兩個質數的乘積,加密和解密用的是兩個不同的密鑰。即使已知明文、密文和加密密鑰(公鑰),想推導出解密密鑰(私鑰),在計算上是不可能的。
加密技術
加密技術的密碼體制分為對稱加密體制和非對稱加密體制
1.對稱加密,加密密鑰和解密秘鑰相同,代表算法DES
缺點:
1).需要提供一條安全的通道使通信雙方在首次通信時協(xié)商一個共同的秘鑰,直接面對面協(xié)商難以實施。只能通過郵件電話等不夠安全的手段協(xié)商。
2).每個合作者需要使用不同的密鑰,密鑰數量龐大難于管理。
3).信息完整性不能鑒別,無法驗證發(fā)送者和接受者的身份。
4).以共同保守秘密來實現,
2.非對稱加密,加密秘鑰和解密秘鑰不同,加密秘鑰可以公開而解密秘鑰需要保密,代表算法RSA
公鑰和私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能界面,如果用私鑰進行加密,只有用對應的公鑰才能解密。
缺點:
1).加密和解密花費時間長,速度慢,不適于對文件加密,只適用于對少量數據進行加密。
實際步驟(使用了兩種加密方式):
1).發(fā)送方生成會話密鑰(對稱加密)并用接收方的公鑰對會話密鑰進行加密,然后將密鑰發(fā)給接收方
2).發(fā)送方對需要傳輸的文件用會話密鑰進行加密,將文件發(fā)送給接收方
3).接收方用私鑰進行解密得到會話密鑰
4).用會話密鑰對文件解密,得到文件明文。
數字簽名技術
數字簽名:防止他人對傳輸的文件進行破壞以及確定發(fā)信人的身份采用的手段
完善的數字簽名應具備簽字方不能抵賴、他人不能偽造、在公證人面前能夠驗證真?zhèn)蔚哪芰Α?/p>
目前數字簽名采用較多的是公鑰加密技術,如基于RSA的PKCS、X.509、PGP等
原理:
報文發(fā)送方從報文文本中生成一個128位的散列值(報文摘要或哈希值)。發(fā)送方用自己的私鑰對這個散列值進行加密來星城發(fā)送發(fā)的數字簽名。然后這個數字簽名將作為報文的附件和報文一起發(fā)送給報文的接收方。接收方首先從接收到的原始報文中計算出128位散列值(或報文摘要),接著再用發(fā)送方的公鑰來對報文附加的數字簽名進行解密。如果兩個散列值相同,那么接收方就能確認該數字簽名是發(fā)送方的。
時間戳技術
數字時間戳技術(DTS)是數字簽名技術的一種變種應用
Java Security
Java平臺自誕生時就非常注重安全,如自動的內存管理、字節(jié)代碼的驗證機制以及獨特的安全類加載方式。同時java的密碼體系也設計得很完善,java security提供相關類和接口,java security api是java編程語言的核心API,位于java.security包中。開發(fā)人員可以利用該API實現安全工鞥,java密碼體系依賴于JCA(Java Cryptography Architecture,java加密結構)和JCE(java cryptography extension,Java加密擴展)。
JCA包括了數字簽名和消息摘要的API。
JCE擴展了JCA,提供了更豐富的安全API,包括對稱分組算法,對稱的流加密算法,非對稱假面算法和信息認證碼等。
體系結構:
1.密碼服務提供者:java加密體系結構引入了密碼服務提供者的概念,他是指一個包,用于提供JDK安全API的密碼子集的具體實現。SUN jdk提供了一個叫“SUN”的缺省標準提供者。其他jdk可能不提供
2.密鑰管理,java提供了名為“密鑰倉庫”的數據庫來管理密鑰和證書。應用程序可使用密鑰倉庫來完成認證或簽名。
主要概念:
Java.security開發(fā)中引入了一些概念,主要包括引擎類的算法、實現和提供者、獲取實現實例的factory方法等。
引擎類和算法:
“引擎類”:以一種抽象方式定義一種密碼服務,一個引擎類提供某類密碼服務功能的接口。Signature和KeyFactory就是兩個引擎類。Signature提供對數字簽名算法功能的訪問。KeyFactory提供DSA私鑰或公鑰
JAVA摘要算法
MessageDigest(MD),摘要算法有MD5、MD2、SHA1
JAVA加密和解密
數據的加密就是通過一定的數學變換把原始有意義的數據轉化為無意義的數據。
對稱加密算法的加密和解密采用同一個密鑰,大多數采用替換、置換、和移位等技術對原始數據進行變換。
Java中對稱密鑰的產生以及對稱加密和解密等功能是在JCE中提供的,密鑰產生是由javax.crypto.KeyGenerator類提供的,對稱加解密是由javax.crypto.Cipher類提供。
加密解密流程:
1).生成密鑰,設置算法和密鑰長度。
2).創(chuàng)建Cipher對象,確定算法、算法模式和填充模式。
3)初始化Cipher對象,設置加密以及加密密鑰
4)用明文字符串計算密文,連續(xù)調用.update,最后調用doFinal
5)如果解密密文。則初始化為解密
6)解密密文。連續(xù)調用.update,最后調用doFinal。
JAVA數字簽名和驗證
Java中非堆成密鑰的產生、簽名和驗證等功能是在JCE中提供的。非堆成密鑰產生是由javax.crypto.KeyPairGenerator類提供的,簽名和驗證是有javax.crypto.Signature類提供的。