1.KDC
1.KDC
csharp
复制代码
1).KDC
KDC(密钥分发中心)是"对称密钥加密体系中的一个核心可信第三方机构"; 它就像一个非常安全, 备受信任的"网络票务中心"
它的核心指责是: 给需要安全通信的双方(用户和服务)产生并分发一个临时的, 一次性的会话密钥, 并验证它们的身份
csharp
复制代码
2).为什么需要KDC
没有KDC的世界里, 如果两个用户(比如Alice和Bob)想用对称加密进行保密通信, 共享一个相同的密钥, 那么密钥需要提前要
进行分发, 非常不便且不安全, KDC用于解决密钥如何进行分发的问题("用户和服务只需与KDC共享一个密钥")
csharp
复制代码
3).核心组成与工作机制
一个KDC通常由两个逻辑部分组成("票据是一个由KDC颁发的、加密的数据包")
a.认证服务器: 负责验证用户身份
b.票据授权服务器: 负责颁发"服务访问票据"
csharp
复制代码
a.TGT是票据授权票据, 它的核心作用: 证明你已经在中央认证中心验明了正身, 有资格去申请各个项目的通行证
"用于获取其他票据(如服务票据ST)")
b.ST是服务票据, 它的核心作用是: 进入某个特定服务的"入场券"
csharp
复制代码
假设用户Alice想要访问打印服务PrinterService
a.认证请求: Alice向AS发送自己的身份信息(如用户名)
b.颁发TGT: AS验证Alice的身份(可能需要密码), 验证通过后, AS生成一个票据授权票据, 并用Alice的密钥加密后发回给
Alice; TGT里包含了KDC为 Alice生成的一个会话密钥
c.请求服务票据: Alice用自己的密钥解密得到TGT和会话密钥, 然后, 她向TGS发送请求"我想访问 PrinterService", 这个
请求里包含了她刚收到的TGT, 以及用会话密钥加密的时间戳等信息
d.颁发服务票据: TGS收到请求后, 用自己的密钥解密TGT, 验证其有效性; 然后用TGT中的会话密钥解密Alice的时间戳, 进
行验证, 全部通过后TGS生成一个用于访问PrinterService的服务票据; 这个ST里包含了KDC为Alice和PrinterService生成
的一个新的、独立的会话密钥; TGS将这个ST和新的会话密钥用Alice的会话密钥加密, 发回给 Alice
e.访问服务: Alice向PrinterService出示她刚收到的ST, ST本身是用PrinterService的密钥加密的, 所以只有
PrinterService能解密; 服务端解密ST, 获得与Alice通信的会话密钥, 并用这个密钥验证Alice随后发送的认证信息(如时
间戳); 验证通过后, 双方即可使用这个会话密钥进行安全的通信
csharp
复制代码
CA(证书颁发机构)是"一个全球公认的、绝对可信的第三方组织"
它的核心工作就一句话: 证明"你是你, 并把你和你的公钥牢牢地绑在一起"; 类似于公证处角色: 颁发一张具有法律和技术
效力的"数字身份证", 证明"这个公钥确实属于你"; 这张"数字身份证"就是数字证书
csharp
复制代码
a.用公钥加密的数据, 有且只有对应的私钥能解密
b.用私钥加密的数据, 有且只有对应的公钥能解密
csharp
复制代码
假设你要访问https://www.bank.com
1).网站申请"数字身份证"(证书)
a.生成密钥对: 网站服务器先生成一对自己专属的非对称密钥, 一个私钥(绝密, 自己藏好), 一个公钥(可以公开)
b.提交申请材料: 网站拿着自己的公钥、公司信息、域名等, 去一家公认的CA那里申请证书
c.CA严格审核: CA会按严格流程审核申请者是否真的拥有www.bank.com这个域名, 以及公司的真实合法性, 这是信任的基石
d.签发证书: 审核通过后, CA用自己的私钥, 对"网站信息+网站公钥"进行数字签名, 生成一张数字证书, 颁发给网站; 这张
证书里就包含了www.bank.com的信息和它的公钥, 并且有CA的亲笔签名
2).你和网站建立安全连接
a.打招呼: 你的浏览器访问https://www.bank.com
b.出示身份证: 网站服务器把自己的数字证书发送给你的浏览器
c.你开始验明正身
- 检查发证机关: 浏览器查看证书是谁(哪个CA)颁发的, 你的电脑和浏览器里已经预装了所有全球公认CA的"公章"(即CA根
证书, 包含CA的公钥)
- 验证公章真伪: 浏览器用CA的公钥去解密证书上的CA签名, 如果能"成功解密并验证信息无误", 就证明两件事:
这张证书确实是由这个可信CA签发的(公章是真的)
证书内容在传输过程中没有被篡改过(内容完整)
- 核对身份信息: 浏览器检查证书上的域名是不是正在访问的www.bank.com, 以及证书是否在有效期内
"证书是否是为这个域名颁发的"
csharp
复制代码
服务器还需证明它是真的证书拥有者
a.客户端挑战服务器
浏览器验证证书是真的之后, 会随机生成一个"预主密钥"; 然后, 浏览器用证书里提取出来的服务器公钥, 加密这个预主密
钥
b.服务器必须回应挑战
服务器收到这个加密的预主密钥后, 必须用自己的私钥来解密它; 只有拥有正确私钥的服务器才能成功解密, 拿到预主密钥
c.共同生成会话密钥
客户端和服务器使用这个预主密钥, 结合之前交换的随机数, 各自独立计算出相同的会话密钥后续所有通信都用这个会话密钥
进行对称加密
csharp
复制代码
数字签名验证
a.服务器在发送证书后, 还会发送一套临时DH参数
b.服务器用自己的私钥对这些DH参数(和之前的部分握手消息)进行数字签名
c.客户端用证书里的公钥验证这个签名
csharp
复制代码
e.开始安全对话: 一旦全部验证通过, 浏览器就完全信任这张证书, 并放心地取出证书里的网站公钥; 随后, 用它来加密接
下来要生成的一个临时会话密钥, 并发送给网站; 因为只有拥有对应私钥的网站才能解密这个信息; 之后, 双方就用这个临
时的会话密钥进行高效的对称加密通信