【Cryptography】密钥管理与分发
数字签名
在数据完整性使用的那篇文章提到过
只要认证不要保密性
流程
- 只要发送方对消息或文件产生
Hash值
,随着密文
一起发送。接收方只要对消息计算Hash
并与接收的Hash
匹配即可
既要认证也要保密性
【使用对称加密与数字结合】
流程图
- 与上面不同的是,这里将HASH值也加密了
具体过程
- 发送方对消息或文件产生
Hash值
- 发送方用自己的
私钥
对Hash值
加密得到Signature
【如果通信双方认识,发送方最好用接收方的公钥进行加密】 - 发送方再用
对称加密
中的密钥,将Hash值和消息
一起加密再发送。 - 接收方对接收的消息使用
对称加密密钥
解密 - 再用发送方的公钥对
Signature
进行解密得到Hash值
- 再
对消息计算Hash值
并与接收的Hash值
进行匹配即可
既要认证,也要保密性
【使用
非
对称加密与数字结合】
- 因为
非对称加密
往往进行密钥管理
,传输消息时不用非对称加密,如果要用也不是不行
集中密钥分发
- A→KDC:IDA∥IDB∥N1
A向KDC发出会话密钥请求。请求的消息由两个数据项组成:一是A和B的身份IDA和IDB,二是本次业务的唯一标识符N1,每次请求所用的N1都应不同,常用一个时间戳、一个计数器或一个随机数作为这个标识符。
- KDC→A:E(Ka[Ks∥IDA∥IDB∥N1∥
E(Kb[Ks∥IDA])
])。
KDC对A的请求发出应答。应答是由加密Ka加密的信息,因此只有A才能成功地对这一信息解密,并A相信信息的确是由KDC发出的。KDC并将使用Kb加密的ks数据发送给A
- A→B:
E(Kb[ Ks∥IDA])
。
A收到KDC响应的信息后,同时将会话密钥Ks存储起来,同时A将经过KDC与B的共享密钥加密过的信息
传送给B。
- B收到后,得到会话密钥Ks,并从IDA可知对方是A,而且还丛EKb知道
Ks确实来自KDC
。
基于非对称密钥分发
简单密钥分发
- A产生一个公私钥对发送给B【可以插入中间人攻击】
- B产生
对称加密的密钥K
,用A的公钥加密发送给A - A用私钥解密得到密钥K
- A丢弃公私钥,B丢弃A的公钥
- A、B使用
对称加密的密钥K
加密
保密性和身份认证密钥分发
解决简单密钥分发中间人攻击问题
前提:假如“A与B使用安全的公钥分发方式”得到了
对方的公钥
【不存在中间人攻击】核心:因为确保能拿到对方公钥,再用临时数来进行通信双方的身份验证,身份验证后再产生出
共享密钥k
- A用
B的公钥
加密A的标志符IDa和一个临时数N1并发给B - B用
B的私钥
解出A的标志符IDa和一个临时数N1,并用A的公钥
加密N1和新临时数N2发送给A - A用
A的私钥
解出临时数N1和新临时数N2,A确定是来自B
,并用B的公钥
加密N2发送给B - B用
B的私钥
解出N2,确定是来自A
- A发送
M=E(PUb,E(PRa,K))
,表示用A的私钥
加密密钥k
,再用B的公钥
加密一层。用B的公钥
加密确保只有B可以读取这个消息,用A的私钥
加密保证只有A可以发送这个消息 - B收到后解出密钥k,以后再用这个
密钥k
通信
公钥分发
数字证书【公钥证书】
可以应用在
数字签名
之上,用来保护数字签名不被中间人攻击替换,数字签名只能确保数据完整性
,消息内容本身的加密仍然可以用对称加密或非对称加密。可以应用在
密钥交换
之上,用来保护发送方公钥不被中间人替换
公钥证书的应用
最典型的应用HTTPS,这个S就是指TLS
,TLS将对称加密
与数字证书
结合,在服务器与客户端连接阶段,用数字证书
来交换用来对称加密的密钥
,TCP建立后续都用这个对称加密的密钥来加密消息
,数字证书就没用了
服务器向CA申请数字证书时,服务器要把自己的公钥
也提交给CA,CA向服务器发送CA证书
和CA公钥
,CA已经将服务器自己的公钥
加密到CA证书
里面
客户端用CA公钥
从CA证书
提取出服务器的公钥
,再作其它传输操作【这样做的目标是,确定服务器的公钥
的确是来自服务器
的】
证书产生
- Bob要把预先部署了若干个共享的密钥【如RSA算法参数(模数p,基数g)】和自己的公钥【Bob的公钥】交给CA
- CA将{【算法参数(模数p,基数g)】、【Bob的公钥】、【CA信息】}这三个打包并产生一个
Hash
,并用CA私钥
对Hash
加密【只加密Hash】,并将加密后的Hash和前面三个值一起,打包成证书
,所以证书
包含{【算法参数(模数p,基数g)】、【Bob的公钥】、【CA信息】、【加密后的Hash】} - Alice拿到
证书
后,因为{【算法参数(模数p,基数g)】、【Bob的公钥】、【CA信息】}未加密,Alice直接计算出这三个的Hash
,Alice再用CA公钥
对【加密后的Hash】解密,将两个Hash进行对比,如果没问题,则会提出服务器公钥
【关于TLS加密,后面文章会讲】
SSL/TLS协议运行机制的概述:https://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
SSL/TLS 协议[3]:密钥交换(密钥协商)算法及其原理 https://blog.csdn.net/andylau00j/article/details/54583769
网页的证书
- 可以看到,网页与客户端的加密方式还是用RSA加密
- 在服务器上添加CA证书与CA公钥