【PKI】关于PKI

【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  (摘要算法)

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,验证 证书链。产生新的问题,如果遇到 信息堵塞怎么办,有效期 是按照 接收到信息的有效期 还是 发送信息的有效期 比较? 我认为 是按照 发送信息的有效期计算,

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments