听说这玩意可以防止否认 —— 数字签名

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 发送方发送消息的时候使用私钥对消息进行签名,接收方接收消息的时候使用公钥对签名进行验证即可确定发送者身份。因为签名只能由发送者的私钥完成,所以这个签名一定是由发送者签发的,这样就没有否认的问题了,这就是数字签名(Digital Signature)。

谁骗了谁?


  小艾和小杨是好朋友,并且经常使用固定密钥进行通信。一天小艾收到一条诈骗消息,理所当然,单纯的小艾被骗钱了。小艾kali学的不好,找不到凶手,于是动起了坏心思。小艾将诈骗消息使用和小杨通信的密钥使用单向散列函数计算出MAC然后将消息和 MAC 封装后拿去警察局报警。


  • 小艾:小杨发给我的诈骗消息骗了我的钱。
  • 小杨:我没有发过这条消息。
  • 小艾:你怎么证明不是你发的。
  • 小杨:你怎么证明是我发的。
  • 警察:到底是谁骗了谁?


数字签名


  之前的文章提到消息认证码(MAC)的缺点就是无法防止否认。因为发送方和接收方可以计算出同样的 MAC 值,所以无法判断这个 MAC 值到底是由谁来计算出来的。
  
这个问题的本质在于双方使用同样的密钥生成同样 MAC 值,所以解决这个问题的办法就是让发送者和接收者使用不同的密钥。要求使用不同密钥,很容易想到非对称加密中的公钥与私钥。
  
发送方发送消息的时候使用私钥对消息进行签名,接收方接收消息的时候使用公钥对签名进行验证即可确定发送者身份。因为签名只能由发送者的私钥完成,所以这个签名一定是由发送者签发的,这样就没有否认的问题了,这就是数字签名(Digital Signature)


如何签名与验签?


  • 生成数字签名由消息发送者 A 完成,生成签名就是根据消息内容计算签名值,生成签名意味着认可这个消息的内容。
  • 验证数字签名由消息接受者完成,也可以由第三方来完成。验签成功意味着这个消息是由 A 发出,失败则表示这个消息不是 A 发出的。


  在数字签名的过程中,消息发送者 A 和消息接收者 B 使用不同的密钥来进行签名和验签。这里使用的不同的密钥就是非对称加密中的公钥和私钥。
  
非对称加密中使用公钥加密、私钥解密,数字签名中使用私钥签名、公钥验签,数字签名其实就是公钥密码的反向应用。

公钥

私钥

非对称加密算法

加密消息

解密消息

数字签名

验签

签名


数字签名的方法


1.对消息进行签名


  • 发送者 A 用自己的私钥对消息 M 进行加密生成签名 S
  • A 将加密后的签名 S 和消息 M 发送给接收者 B
  • B 用公钥对签名 S 进行解密,从而得到签名之前的消息 M1
  • B M1 A 直接发送过来的消息 M 进行对比,两者一致则验签成功,否则失败。


2.对消息的hash 值进行签名


  直接对消息进行签名,看起来非常简单,但是在实际应用中很少使用。因为对整个消息进行签名是一个非常耗时的操作,所以我们通常会使用单向散列函数对消息计算出一个 hash 值,然后对这个 hash 值进行签名,这样既可以对消息签名又节省了时间。


  • 发送者 A 用单向散列函数对消息 M 计算 hash H
  • A 用自己的私钥对 H 进行签名 S
  • A 将消息 M 和签名 S 发给接收者 B
  • B A 的公钥对签名 S 进行解密得到 H
  • B 使用单向散列函数对收到的消息 M 计算得到 hash H1,将 H H1 进行比对,两者一致则验签成功,否则失败。


缺点


  • 使用消息认证码(MAC)可以防篡改和仿伪装,但是无法防否认。
  • 使用数字签名可以防篡改、防伪装、防否认。


但是如果验证签名的公钥不是和签名的私钥配对的呢?
  
这样就会导致验签失败,这里我们就需要一个可信任的机构来为我们颁发可信任的公钥,这就需要用到证书了。

相关文章
|
7月前
|
存储 Java 开发者
惊呆了!Java数据类型里竟藏着这些不为人知的秘密!
【6月更文挑战第13天】Java编程中的隐藏特性揭秘:整数类型超出范围会“回环”,如byte超过127变为-128;浮点数运算存在精度问题,如0.1+0.2不一定是0.3;char类型基于16位Unicode,可表示多种语言字符;包装类型与自动装箱拆箱简化了基本数据类型与对象间的转换。了解这些细节,助你深入理解Java数据类型。
36 3
|
8月前
|
存储 安全 数据安全/隐私保护
加密的艺术:对称加密的奇妙之处(下)
加密的艺术:对称加密的奇妙之处(下)
加密的艺术:对称加密的奇妙之处(下)
|
存储 安全 算法
为什么人人都要懂点密码学
人类进入二十一世纪以来,随着计算机和移动设备的普及高速发展,我们的社会已经高度信息化,为了防止信息被窃取、修改,就需要对信息的存储、传递进行加密处理,而加密就需要使用到加密算法,解密需要使用密码才可以看到原文。
239 1
|
供应链 物联网 数据安全/隐私保护
优衣库 UNIQLO,藏着多少秘密
优衣库 UNIQLO,藏着多少秘密
|
存储 SQL 数据挖掘
我为什么又开始刷题了,还发现了个秘密...
我为什么又开始刷题了,还发现了个秘密...
121 0
我为什么又开始刷题了,还发现了个秘密...
|
数据安全/隐私保护
【杂(瞎)谈(聊)】易经当中的密码学
看到这个标题,估计可能会有不少读者会有疑问,易经这不是个文学作品吗,怎么和数学相关的密码学给搞到一起了,这不是标题党蛤, 下面小Q来给大家聊聊在易经当中所体现的一些密码学的思想,有些资料来源也不太确定,我凭借记忆进行搜索的,如有错误还请各位读者海涵。
【杂(瞎)谈(聊)】易经当中的密码学
|
搜索推荐 大数据 数据安全/隐私保护
【密码学】杂谈-日升昌票号
通过对于日升昌的这个汇票的分析呢,我们可以发现,在中国古代,实际商用的和密码学相关的东西也真不少,这不像上一篇文章当中所提到的易经那么玄学了,这是实打实的一个案例,由此可见整个思想还是想通的。
【密码学】杂谈-日升昌票号
|
存储 安全 算法
密码学杂谈 - 上
最近做软件的商业license设计,又一次对密码学进行了一些学习和了解,整理形成本文的笔记。密码学比较复杂,我了解有限,所以不打算深入介绍,仅仅针对涉及的几个应用场景进行介绍。
467 0
密码学杂谈 - 上
|
并行计算 算法 安全
密码学杂谈 - 下
在数字计算机没有发明之前,加密都是对字符进行加密,一般采用的方法是字母替换,我把它称为 经典加密 。
402 0
密码学杂谈 - 下
|
算法 安全 数据安全/隐私保护
听说这玩意可以防篡改——单向散列函数
由于某些原因,访问国外网站的速度较慢,所以我们常使用镜像网站下载文件。假设你正通过镜像网站从网络上下载一款软件,但是如何保证你下载的软件是正版,没有被恶意篡改过呢?怎么保证我的软件的完整性呢?
听说这玩意可以防篡改——单向散列函数