• 现代密码学-数字签名


    消息认证码到数字签名

    前面讲到,消息认证码无法防止否认,A,B之间共享密钥计算出MAC,A,B都能计算出MAC,对于第三方C来说,他无法证明这个MAC是A计算的还是B计算的。

    通过数字签名解决问题。

    A,B各自使用不同的密钥-公钥密码,A用私钥生成一个签名,B可以用A公开的公钥进行验证。

    签名的生成和验证

    数字签名中的两种行为:

            生成消息签名

            验证消息签名

    数字签名:将公钥密码反过来用,

    私钥公钥
    公钥密码接收者解密使用发送者加密使用
    数字签名签名者生成签名使用验证者验证签名使用
    个人持有公开

    数字签名的方法

    直接对消息签名

    1. A用私钥对消息进行加密
    2. A将消息和签名发给B
    3. B用A的公钥对收到的签名进行解密
    4. B将解密出来的消息和A发的消息进行对比

    直接对消息签名

    对消息的散列值签名

    A用单向散列函数计算消息的散列值

    A用自己的私钥对散列值加密

    A将消息和签名发给B

    B用A的公钥对收到的签名进行解密

    B将解密得到的散列值和A发来的消息的散列值进行比较

    对消息的散列值签名

    对消息的散列值签名时序图 

    使用公钥密码的私钥生成签名,主要是利用了私钥只有特定的人才持有这一特性。签名和消息是具有对应关系的,消息不同,签名内容不同。如果将一份签名提取出来放在另一个消息后面,验证签名的时候会失败。

    应用实例

    安全信息公告

    软件下载

    公钥证书

    SSL/TLS

    对数字签名的攻击

    中间人攻击:确认自己得到的公钥是否真的是通信对象的

    单向散列函数攻击:散列函数抗碰撞性

    利用数字签名攻击公钥密码-不要直接对消息进行签名,对散列值进行签名更安全;公钥密码和数字签名分别使用不同的密钥

    数字签名无法解决的问题

    数字签名可以识别出篡改和伪装,还可以防止否认。前提条件是用于签名的公钥属于真正的发送者。数字签名用来识别消息篡改、伪装及否认,但我们必须从一个没有被伪装的发送者得到没有被篡改的公钥才行----死循环。

    怎样才能确认自己得到的公钥是合法 的 ---使用证书。那么证书又由谁来颁发才安全呢?---公钥基础设施PKI

     

  • 相关阅读:
    【多线程】Thread 类 详解
    JS控制显示或隐藏TR
    jQuery
    java毕业生设计中文网络小说平台系统计算机源码+系统+mysql+调试部署+lw
    PCL 计算一个平面与包围盒体素的相交线
    前端开发核心知识进阶 —— 宏任务和微任务
    iOS实现代码混淆
    C++STL学习笔记-map的属性(大小以及是否存在)
    说实话ThreadLocal真不是啥高级的东西
    是面试官放水,还是公司太缺人?这都没挂,字节跳动原来这么容易进...
  • 原文地址:https://blog.csdn.net/weixin_40042143/article/details/139420942