【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公钥
 



















