JDK安全剖析之术语与定义

1.验证(Authentication)

确认通信对方身份的过程。

2.证书(Certificate)

一份数字签名声明,用于证明某个实体(个人、公司等)的身份和公钥。证书可以是自签名的,也可以是由证书颁发机构 (CA) 颁发的,CA 是受信任的实体,可以为其他实体颁发有效证书。著名的 CA 包括 Comodo、Entrust 和 GoDaddy。X509 是一种常见的证书格式,可以由 JDK 的keytool进行管理。

3.密码套件(Cipher Suite)

定义用于身份验证、密钥协议、加密和完整性保护的安全算法和密钥大小的加密参数的组合。

4.加密哈希函数(Cryptographic Hash Function)

一种算法,用于从任意数据块生成相对较小的固定大小的位串(称为哈希)。加密哈希函数类似于校验和,具有三个主要特征:它是单向函数,这意味着不可能从哈希生成原始数据;原始数据的微小变化会导致生成的哈希发生巨大变化;并且它不需要加密密钥。

5.加密服务提供商 (Cryptographic Service Provider,CSP)

有时简称为提供程序,Java 加密体系结构 (JCA) 将其定义为一个包(或一组包),用于为特定加密算法实现一个或多个引擎类。引擎类以抽象方式定义加密服务,没有具体实现。

6.数据报传输层安全 (Datagram Transport Layer Security,DTLS) 协议

一种协议,用于管理客户端和服务器的身份验证、数据完整性以及基于不可靠传输通道(如 UDP)的客户端和服务器之间的加密通信。

7.加密(Encryption)

加密是使用复杂算法将原始信息(明文)转换为编码信息(密文)的过程,除非解密,否则无法理解。

用于加密和解密数据的算法通常分为两类:密钥(对称)加密和公钥(非对称)加密。

8.解密(Decryption)

解密是从密文生成明文的逆过程。

9.电子签名(Digital Signature)

手写签名的数字等价物。它用于确保通过网络传输的数据是由声称发送它的人发送的,并且数据在传输过程中没有被修改。例如,基于 RSA 的数字签名是通过首先计算数据的加密哈希值,然后使用发送者的私钥加密哈希值来计算的。

10.端点识别(Endpoint Identification)

用于识别网络端点的 IPv4 或 IPv6 地址。

端点识别程序在 SSL/TLS 握手期间处理。

11.握手协议(Handshake Protocol)

协商阶段,在此期间两个套接字对等体同意使用新的或现有的会话。握手协议是通过记录协议交换的一系列消息。在握手结束时,将根据会话中的密钥协议机密生成新的连接特定加密和完整性保护密钥。

12.密钥协议(Key Agreement)

双方合作建立公用密钥的方法。双方各自生成一些数据,然后进行交换。然后将这两部分数据组合起来生成密钥。只有持有正确私有初始化数据的人才能获得最终密钥。Diffie-Hellman (DH) 是密钥协商算法最常见的示例。

13.密钥交换(Key Exchange)

密钥交换方法。一方生成私钥,并使用对方的公钥(通常为 RSA)对其进行加密。数据传输给对方,对方使用相应的私钥解密密钥。

14.密钥管理器/信托管理器(Key manager/Trust manager)

密钥管理器和信任管理器使用密钥库作为其密钥材料。密钥管理器管理密钥库并根据需要向其他人提供公钥(例如,用于向其他人验证用户身份)。信任管理器根据其管理的信任库中的信息决定信任谁。

15.密钥哈希消息代码 (Keyed-Hash Message Code,HMAC)

一种特定类型的消息认证码,涉及加密哈希函数和秘密加密密钥。

基于密钥哈希消息代码 (Keyed-Hash Message Code,HMAC) 的提取和扩展密钥派生函数 (Keyed-Hash Derivation Function,HKDF)

用于密钥生成和验证的函数。

16.密钥库/信任库(keystore/truststore)

密钥库是密钥材料的数据库。密钥材料可用于多种用途,包括身份验证和数据完整性。有多种类型的密钥库可供选择,包括 PKCS12 和 Oracle 的 JKS。

一般来说,密钥库信息可分为两类:密钥条目和受信任证书条目。密钥条目由实体的身份及其私钥组成,可用于各种加密目的。相比之下,受信任证书条目除了实体的身份外,还仅包含公钥。因此,在需要私钥的地方不能使用受信任证书条目,例如在javax.net.ssl.KeyManager中。在 JKS 的 JDK 实现中,密钥库可能同时包含密钥条目和受信任证书条目。

信任库是用于决定信任哪些内容的密钥库。如果您从已经信任的实体收到数据,并且您可以验证该实体是否是其声称的实体,那么您可以假设数据确实来自该实体。

只有当用户信任该实体时,才应将条目添加到信任库中。通过生成密钥对或导入证书,用户即可信任该条目。信任库中的任何条目都被视为受信任条目。

拥有两个不同的密钥库文件可能会很有用:一个仅包含您的密钥条目,另一个包含您的受信任证书条目(包括 CA 证书)。前者包含私人信息,而后者不包含。使用两个文件而不是单个密钥库文件可以更清晰地区分您自己的证书(和相应的私钥)和他人的证书之间的逻辑区别。为了更好地保护您的私钥,请将它们存储在具有受限访问权限的密钥库中,并在需要时将受信任的证书提供在更公开可访问的密钥库中。

17.信息认证码(Message Authentication Code,MAC)

提供一种基于密钥检查通过不可靠介质传输或存储的信息完整性的方法。通常,MAC 用于共享密钥的双方之间,以验证双方之间传输的信息。

基于加密哈希函数的 MAC 机制称为 HMAC。HMAC 可与任何加密哈希函数(例如消息摘要 5 (MD5) 和安全哈希算法 (SHA-256))结合使用,并结合秘密共享密钥。HMAC 在 RFC 2104 中指定。

18.公钥加密(Public-Key Cryptography)

一种使用加密算法的加密系统,其中会产生两个密钥。一个密钥公开,另一个密钥保密。公钥和私钥是加密的逆向;一个密钥加密的内容只有另一个密钥才能解密。公钥加密也称为非对称加密。

19.记录协议(Record Protocol)

一种协议,将所有数据(无论是应用程序级数据还是作为握手过程的一部分)打包成离散的数据记录,就像 TCP 流套接字将应用程序字节流转换为网络数据包一样。然后,各个记录将受到当前加密和完整性保护密钥的保护。

20.密钥加密(Secret-Key Cryptography)

一种使用加密算法的加密系统,其中使用同一个密钥来加密和解密数据。密钥加密也称为对称加密。

21.安全套接字层 (Secure Sockets Layer,SSL)协议

一种管理客户端和服务器身份验证、数据完整性以及客户端和服务器之间的加密通信的协议。SSL 已重命名为传输层安全性 (TLS)。

22.会话(Session)

状态信息的命名集合,包括经过验证的对等身份、密码套件和密钥协商机密,这些信息通过安全套接字握手进行协商,并可在多个安全套接字实例之间共享。

23.传输层安全性 (Transport Layer Security,TLS) 协议

一种协议,基于可靠的传输通道(例如 TCP)管理客户端和服务器的身份验证、数据完整性以及客户端和服务器之间的加密通信。

相关推荐
XiaoLeisj32 分钟前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck34 分钟前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei34 分钟前
java的类加载机制的学习
java·学习
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~3 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616883 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7893 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java4 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
hikktn4 小时前
如何在 Rust 中实现内存安全:与 C/C++ 的对比分析
c语言·安全·rust
睡觉谁叫~~~4 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust