数字签名

在数据完整性使用的那篇文章提到过

只要认证不要保密性

流程

image-20220615221949732

  • 只要发送方对消息或文件产生Hash值,随着密文一起发送。接收方只要对消息计算Hash并与接收的Hash匹配即可

既要认证也要保密性

【使用对称加密与数字结合

流程图

image-20220615222031740

  • 与上面不同的是,这里将HASH值也加密了

具体过程

  • 发送方对消息或文件产生Hash值
  • image-20220615215623867
  • 发送方用自己的私钥Hash值加密得到Signature【如果通信双方认识,发送方最好用接收方的公钥进行加密
  • image-20220615215735864
  • 发送方再用对称加密中的密钥,将Hash值和消息一起加密再发送。
  • 接收方对接收的消息使用对称加密密钥解密
  • 再用发送方的公钥Signature进行解密得到Hash值
  • image-20220615215816872
  • 对消息计算Hash值并与接收的Hash值进行匹配即可
  • image-20220615215823508

既要认证,也要保密性

【使用对称加密与数字结合

  • 因为非对称加密往往进行密钥管理,传输消息时不用非对称加密,如果要用也不是不行


集中密钥分发

  1. A→KDC:IDA∥IDB∥N1

A向KDC发出会话密钥请求。请求的消息由两个数据项组成:一是A和B的身份IDA和IDB,二是本次业务的唯一标识符N1,每次请求所用的N1都应不同,常用一个时间戳、一个计数器或一个随机数作为这个标识符。

  1. KDC→A:E(Ka[Ks∥IDA∥IDB∥N1∥E(Kb[Ks∥IDA])])。

KDC对A的请求发出应答。应答是由加密Ka加密的信息,因此只有A才能成功地对这一信息解密,并A相信信息的确是由KDC发出的。KDC并将使用Kb加密的ks数据发送给A

  1. A→B:E(Kb[ Ks∥IDA])

A收到KDC响应的信息后,同时将会话密钥Ks存储起来,同时A将经过KDC与B的共享密钥加密过的信息传送给B。

  1. B收到后,得到会话密钥Ks,并从IDA可知对方是A,而且还丛EKb知道Ks确实来自KDC

基于非对称密钥分发

简单密钥分发

  1. A产生一个公私钥对发送给B【可以插入中间人攻击
  2. B产生对称加密的密钥K,用A的公钥加密发送给A
  3. A用私钥解密得到密钥K
  4. A丢弃公私钥,B丢弃A的公钥
  5. A、B使用对称加密的密钥K加密

保密性和身份认证密钥分发

解决简单密钥分发中间人攻击问题

前提:假如“A与B使用安全的公钥分发方式”得到了对方的公钥【不存在中间人攻击】

核心:因为确保能拿到对方公钥,再用临时数来进行通信双方的身份验证,身份验证后再产生出共享密钥k

  1. A用B的公钥加密A的标志符IDa一个临时数N1并发给B
  2. B用B的私钥解出A的标志符IDa一个临时数N1,并用A的公钥加密N1和新临时数N2发送给A
  3. A用A的私钥解出临时数N1和新临时数N2A确定是来自B,并用B的公钥加密N2发送给B
  4. B用B的私钥解出N2确定是来自A
  5. A发送M=E(PUb,E(PRa,K)),表示用A的私钥加密 密钥k,再用B的公钥加密一层。用B的公钥加密确保只有B可以读取这个消息,用A的私钥加密保证只有A可以发送这个消息
  6. B收到后解出密钥k,以后再用这个密钥k通信


公钥分发

数字证书【公钥证书】

可以应用在数字签名之上,用来保护数字签名不被中间人攻击替换,数字签名只能确保数据完整性,消息内容本身的加密仍然可以用对称加密或非对称加密。

可以应用在密钥交换之上,用来保护发送方公钥不被中间人替换

公钥证书的应用

公钥证书注册与下载

最典型的应用HTTPS,这个S就是指TLS,TLS将对称加密数字证书结合,在服务器客户端连接阶段,用数字证书交换用来对称加密的密钥,TCP建立后续都用这个对称加密的密钥来加密消息,数字证书就没用了

服务器向CA申请数字证书时,服务器要把自己的公钥也提交给CA,CA向服务器发送CA证书CA公钥,CA已经将服务器自己的公钥加密到CA证书里面

客户端用CA公钥CA证书提取出服务器的公钥,再作其它传输操作【这样做的目标是,确定服务器的公钥的确是来自服务器的】

证书产生

  1. Bob要把预先部署了若干个共享的密钥【如RSA算法参数(模数p,基数g)】和自己的公钥【Bob的公钥】交给CA
  2. CA将{【算法参数(模数p,基数g)】、【Bob的公钥】、【CA信息】}这三个打包并产生一个Hash,并用CA私钥Hash加密【只加密Hash】,并将加密后的Hash和前面三个值一起,打包成证书,所以证书包含{【算法参数(模数p,基数g)】、【Bob的公钥】、【CA信息】、【加密后的Hash】}
  3. 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加密

blog.lthero.cn的证书

  • 在服务器上添加CA证书与CA公钥

服务器上添加证书的CA公钥与CA证书

公钥证书-将发送方的公钥保存到证书

公钥证书-接收方拿到证书

公钥证书-接收方从证书中提取出发送方公钥