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