天天看點

【PKI】關于PKI的一些知識

最近看了一些 PKI 的文檔,本着對理論知識的深入了解,能夠幫助自己更好的寫代碼的原則。馬馬虎虎讀了不少東西。

簡單整理一下:

1. 重播攻擊:截獲某條通信信道的資料,等一段時間之後,再發送出去給接受者,可以獲得同樣的回報效果,後來添加了時間戳來判斷資訊是否失效。

2. 單點登入:優化使用者的使用體驗,在多個應用程式使用過程中,減少需要記住的密碼個數。

3. 簽名密鑰對 由簽名私鑰和驗簽公鑰組成,簽名密鑰為了保證其唯一性,不可備份和恢複,丢失了隻能重新申請,但要保留原來的公鑰,為了驗證之前簽名的資料。保留公鑰就等于是保留證書,直到證書失效或者被廢棄。

4. 加密密鑰對 由 加密公鑰和解密私鑰組成,為了防止解密私鑰丢失之後,不能解密資料,解密私鑰應該做備份。公鑰是證書自帶的,一般是不會丢失的,保留公鑰就等于是保留證書,直到證書失效或者被廢棄

個人了解:簽名私鑰是非常重要的,代表了唯一的身份辨別,是以簽名私鑰不能備份和恢複。隻能使用者自己知道。

5. USBKey 的證書登入伺服器的時候,如何證明自己的身份?

 答: 使用USBKey登入 伺服器,選擇證書,使用key的容器擷取到私鑰,對發送的資訊做一個簽名。

byte[] sign = this.hsm.sign(container, 0, null, hash, this.signAlgName, sm2id_sign);
           

Admin的簽名操作找到了,Server的驗簽操作未找到,懷疑在 SFW中。

6. 通信過程攜帶證書的目的:實體A可以準确無誤的得到他想要的通信實體B的公鑰。避免B自行僞造。

7. 實體認證 采用對使用者請求資訊簽名還是對随機挑戰資訊簽名的方式,取決于應用場景。

     随機挑戰資訊簽名主要用來可以防範重播攻擊。

     在實體環境公共且可信的環境中,可以使用 對請求資訊簽名的方式。

8. Q&A :CA機構的最終證書 是被一個組織信任 還是 被幾大機構互相簽發 交叉證書信任?

     答:使用者證書如何被信任,如果是同一個根CA體系環境中的證書,一定是可以通過根證書建立信任關系的。

            如果是浏覽器證書,浏覽器預設信任幾大簽證機構的CA根證書,是以可以驗證幾乎所有的域名證書,如果沒有被信任,也可以手動添加證書到信任清單。

9. Q&A : Admin 與 伺服器的SSL通信 使用的是 CA的公鑰加密? 伺服器發送到用戶端的資料使用管理者的公鑰加密?

 答: Admin 手動配置了 ca根證書,可以使用ca的公鑰做加密,進行密鑰協商。此時,雙方都有兩張證書,ca根證書 和 使用者證書。

10. 路徑長度限制: 能夠用來限制 可以出現在一個證書信任鍊中的交叉證書的個數。

11. 路徑确認 也稱為 證書信任,涉及到 驗證數字簽名,驗證證書有效期,查詢CRL,考慮證書政策,密鑰用法,名稱限制等。

12. 名稱限制和政策限制隻能用在 CA 證書中,基本限制可以用在實體證書中。

13. 名稱限制:指出證書路徑中後續證書的所有主體名字的命名空間。隻存在于CA憑證中,大概是命名子樹的概念。

14. 證書的擴充屬性 用證書所有者的私鑰簽名。

15. 資訊摘要處理 可以用 雙重加密,第一次用發送者的私鑰簽名,第二次用 臨時會話密鑰加密。

16. 簽名封裝資料 内容類型 包括 加密後的内容,加密後的‘會話密鑰’和為一個或多個簽名者準備的經過雙重加密後的資訊摘要。

17. 雙重加密 : 首先用簽名者的私鑰簽名,然後用内容加密密鑰對其加密。

18. KMC 産生臨時對稱密鑰? KMC産生密鑰對,使用使用者的公鑰加密之後,發送給CA,CA發送給使用者。

19. 交叉認證: 假如 微軟公司CA系統簽發的使用者證書持有者A要與youtube公司CA系統簽發的使用者證書持有者B通信,需要驗證B的證書有效性。

首先,得到B的簽名證書,根據證書攜帶的證書信任鍊,驗證上級CA憑證,發現自己不能信任其CA憑證,此時,向自己的CA憑證查詢 其簽發的所有交叉證書,來驗證youtube的CA憑證是否被自己的CA系統信任。此時存在兩張證書擁有同一個公鑰。不建議的,但是是可以接受的。

20. 單證的公鑰可以用來簽名 也可以用來加密。

21. JCA(Java Cryptography Architecture): Java加密體系,提供基本的加密架構,如證書,數字簽名,資訊摘要,密鑰産生器等。

22. JCE(Java Cryptography Extension) : Java加密擴充包,JCE在JCA的基礎上,做了擴充,提供了各種加密算法,資訊摘要算法和密鑰管理功能。目前流行的 DES,AES,RSA,DSA算法都是JCE 提供的。

23. JSSE(Java Secure Sockets Extension):安全套接字擴充包,提供了基于SSL的加密功能,在網絡傳輸過程中,資訊會經過多個主機,最終傳送給接受者。這種安全依賴JSSE提供。

24. JAAS(Java Authentication and Authentication Service):提供了在 Java平台進行身份鑒别的功能。JAAS提供一個符合标準安全機制的登入子產品,通過可配置的方式內建到各個系統中。

25. 根據美國的出口限制,JCA 是可以出口的,而JCE是不能出口的,是以一般實作 JCE 需要第三方的廠商JCE,稱為安全提供者。

26. Java.security包為安全架構提供類和接口。僅僅能夠完成資訊摘要算法的實作,并且其源碼是可見的。

27.Javax.crypto包提供真正的加解密和算法,但其源代碼是不可見的。

28. java.security.spec包和javax.crypto.spec包提供了密鑰規範和算法參數規範的類和接口。

29.  java.security.cert 包提供用于解析和管理證書、證書撤銷清單(CRL)和證書路徑的類和接口。

30. java.net.ssl包提供了用于安全套接字包的類 。

31. 對象序列化:将對象的狀态資訊轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象将其目前狀态寫入到臨時或持久性存儲區。

32. DH算法中,A可以用自己的密鑰和B 的密鑰按照一定方法生成一個密鑰,B可以用自己的密鑰和A的公鑰生成一個密鑰。此時,兩個密鑰是一樣的。

33. 證書tbscertificate中的 signatureAlogi 算法是 公鑰的産生算法。 證書内容的簽名算法需要跟這個算法相關,一般為 簽名算法。

證書項有個簽名算法: 1.2.156.10197.1.501   SM3withSM2    

有個公鑰參數:1.2.156.10197.1.301     SM2(加密算法)

有個指紋算法: sha1  (摘要算法)

【PKI】關于PKI的一些知識

34. 基本限制: 支援該證書是否是 CA憑證,且 證書路徑通過CA能存在的深度。當ca的值為 true,表示是CA憑證,此時 pathLenConstrain 可以有效,如果其值為 0,表示隻能有一張末端實體證書。

40. 證書密鑰用法:

證書中的密鑰用法是指 公鑰的用法,與私鑰無關,私鑰是用來簽名的,私鑰不用指定用法,公鑰有多種用法,需要特别指定。

 1. 密鑰用法 nonRepudiation被斷言,公鑰用來驗證 提供抗抵賴服務的數字簽名。驗證數字簽名。

 2. 密鑰用法 keyEncipherment 被斷言,公鑰用來密鑰傳輸,也就是加密密鑰。

 3. 密鑰用法 dataEncipherment 被斷言,公鑰用于 對使用者資料加密。

 4. 密鑰用法 keyAgreement 被斷言,公鑰用于密鑰協定,當DH密鑰是要為密鑰管理被使用。

 5. encipherOnly 和 keyAgreement 同時斷言的時候,公鑰僅用于将資料加密使用。 decipherOnly和keyAgreement 同時斷言的時候,公鑰僅用于解密使用。履行密鑰協定。

 6. ketCertSign 密鑰被斷言,公鑰被用來驗證 證書簽名。

 7. digitalSignature 被斷言,公鑰用來支援安全服務。而不支援 抗抵賴性 簽名證書  CRL。常用來做完整性驗證。

Question : 

1. 數字信封到底是什麼?

答: 為某個特定的收件人準備的加密後的資料和加密後的内容加密密鑰的聯合通常叫做數字信封。

通常最常見的資料信封内容類型的應用是封裝給一個或多個收件人的資料資訊,摘要資料或簽名資料。

2. CA更換密鑰的過程中,old-old證書用來驗證 A(old) 和 B(old)通信。old-new 證書用來驗證A(old)和C(new)通信==(其實沒用),new-old 證書可以連接配接old和new的ca。

3. 私有密鑰的使用周期也是證書的擴充項之一?證書的有效期擴充項是指公鑰的有效期,那私鑰的有效期要短?證書廢棄之後,公鑰廢棄,之前的簽名資訊還有效嘛?怎麼驗?

答: 私鑰密鑰的有效期也是擴充項,私鑰預設有效期要比公鑰有效期短,證書廢棄之後,簽名資訊驗證,會先拿 證書,檢視有效期,檢視 CRL,驗證 證書鍊。産生新的問題,如果遇到 資訊堵塞怎麼辦,有效期 是按照 接收到資訊的有效期 還是 發送資訊的有效期 比較? 我認為 是按照 發送資訊的有效期計算,

4. CA 怎麼簽發 子CA : 選擇 什麼 模闆?

繼續閱讀