【密码学原理】数字签名(ElGamal签名,Schnorr签名,椭圆曲线签名,RSA-PSS签名)
数字签名是公钥密码学发展过程中最重要的概念之一,产生和使用数字签名过程的一般模型如图所示
消息认证可以保护消息交换双方不受第三方的攻击,但是不能处理通信双方自身发生的攻击。例如对下图中的某种方式进行攻击,考虑两种情况:
- Bob可以伪造一条消息并称该消息来自Alice。用他们的共享密钥产生认证码,并将认证码附加在消息后面。
- Alice可以否认曾经发送过某天消息。Bob可以伪造消息,所以无法证明Alice确实发过该消息。
数字签名的特征:
- 必须能验证签名者、签名日期和时间
- 必须能认证被签的消息内容
- 签名应该由第三方仲裁,以解决争执
下面给出一些攻击类型,危害程度从高到低:
- 唯密文攻击
- 已知消息攻击
- 一般选择消息攻击
- 定向选择消息攻击
- 适应性选项消息攻击
- 完全破译
- 通用伪造
- 选择伪造
- 存在性伪造
数字签名应该满足的条件:
- 签名必须是与消息相关的二进制位串
- 签名必须使用发送方某些独有的信息,以防止伪造和否认
- 产生数字签名比较容易
- 识别和验证签名比较容易
- 伪造数字签名在计算上是不可行的。无论是从给定的数字签名伪造消息,还是从给定的消息伪造数字签名,在计算上是不可行的
- 保存数字签名的副本是可行的
安全Hash函数可用于满足上述条件的数字签名设计,简单的设计方案如图所示
直接数字签名是指:只涉及通信双方的数字签名。这里先进行签名,然后才执行外层的加密,发生争执的时候第三方可以查看消息及签名。如果对消息先加密,然后对消息的密文签名,那么第三方必须知道解密密钥才能读取原始消息。签名如果在内层进行,接收方可以存储明文的消息及签名,以备解决争执。
直接签名有个弱点,它依赖于发送方的私钥安全性。发送方可以抵赖私钥丢失或者被盗。被广泛接受的解决方案是使用数字证书的证书管理中心(CA)。
ElGamal数字签名方案
ElGamal签名方案使用私钥进行加密,使用公钥进行解密。
签名包括两部分,一部分是对公共参数的加密,一部分是对私钥和前一部分签名的加密。验证签名的方式为
m是明文的Hash值,然后对A的公钥和前一部分签名分别用签名求指数,得到的结果进行比较即可。
Schnorr数字签名方案
同ELGama数字签名一样,Schnorr数字签名也是基于离散对数,将生成签名所需的消息计算量最小化,生成签名的主要工作不依赖于消息,可以在处理器空闲时执行。生成签名过程与消息相关的部分需要进行2n位长度的整数与n位长度的整数相乘。
在签名之前可以生成x,这个x是关于随机数r的值,与M无关,最后签名只是与M的绑定,不依赖于M
验证过程为
数字签名标准(DSS)
DSS使用的是只提供数字签名功能的算法,与RSA不同,DSS虽然是一种公钥密码方案,但是不能用于加密或密钥交换。
数字签名算法(DSA)如图所示
DSA中的签名和验证函数如图所示
椭圆曲线数字签名算法(ECDSA)
ECDSA处理过程:
- 参与数字签名的所有通信方都使用相同的全局参数,用于定义椭圆曲线以及曲线上的基点
- 签名者首先生成一对公私钥。对于私钥,选择一个随机数或者伪随机数作为私钥,利用随机数和基点算出另一点,作为公钥
- 对消息计算Hash值,用私钥、全局参数和Hash值生成签名
- 验证者用签名者的公钥、全局参数等验证
全局参数:
密钥生成:
每个签名者都要生成一对公私钥,假设是Bob
这里是定义在上的椭圆曲线,椭圆曲线上的乘法运算就是多个点的累加运算,最后的结果还是椭圆曲线上的点
有了公钥之后,Bob对消息m生成320字节的数字签名:
第2步确保最后算出的公钥(椭圆曲线上的点)是落在曲线上。第5不,如果为O点也是不符合的,所以也要重新生成。
Alice在获得Bob的公钥和全局参数后,即可校验签名
RSA-PSS数字签名
掩码生成函数(MGF)是一个伪随机函数,输入参数是一个任意长度的位串X以及需要输出字节长度L。
在签名之前,先对消息进行编码(EM),如图
拥有私钥和公钥的签名者生成签名
将字节串EM作为无符号的非负二进制整数m,加密得到签名s:
在做签名的时候不再用公钥加密m,而是用私钥加密得到签名。验证的时候用公钥验证:
【密码学原理】数字签名(ElGamal签名,Schnorr签名,椭圆曲线签名,RSA-PSS签名)相关推荐
- 现代密码学实验5 数字签名ElGamal签名方案
赞赏码 & 联系方式 & 个人闲话 [实验名称]数字签名ElGamal签名方案 [实验目的] 1.了解数字签名的过程,包括签名过程和认证过程: 2.掌握ElGamal签名方案. [实验 ...
- 数字签名(RSA签名、ElGamal签名、Schnorr签名、DSS、DSA、离散对数签名、特殊性质的签名算法、Chaum盲签名、Chaum-Antwerpen不可否认签名、群签名、MUO代理签名)
数字签名基本概念 数字签名的必要性: 消息认证能够使通信双方对接收到的信息来源及完整性进行验证,防止第三方的攻击,然而却不能防止通信双方中的一方对另一方的欺诈. 这种欺诈有多种形式,例如通信双方(发送 ...
- iOS应用签名原理--数字签名?代码签名?双层代码签名?
数字签名 数字签名(又称公钥数字签名.电子签章等)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法.一套数字签名通常定义两种互补的运算,一个用于签名,另一个 ...
- Java使用BouncyCastle进行基于ECDSA算法的椭圆曲线secp256r1证书自签名
一. 基础 BouncyCastle,是一个用于Java平台的轻量级开源密码包.目前除了支持Java外,也支持C#.授权遵循MIT协议. BouncyCastle ...
- 区块链中的密码学之数字签名方案(十二)
1. 前言 类似在纸质合同上签名确认合同内容,数字签名用于证实某数字内容的完整性( integrity)和来源( 或不可抵赖,non-repudiation). 一个典型的场景是,A 要发给 B 一个 ...
- 北大肖臻老师《区块链技术与应用》系列课程学习笔记[1]Bitcoin中用到的密码学原理和数据结构
目录 一.比特币系统中用到的密码学原理 1.什么是比特币 2.哈希函数 3.非对称密码体系 4.数字签名 二.比特币中的数据结构--哈希指针和Merkle Tree 1.哈希指针 2.区块链 3.Me ...
- ukey的密码学原理
USBKey的密码学原理 首先,大致说下U盾的工作流程. 你的数字证书有一对,一份在U盾里的私钥,一份在银行的公钥(其实两份银行都有).U盾的原理很类似于双向认证的TLS(SSL)或者其它用到RSA的 ...
- atitit. 浏览器插件 控件 applet 的部署,签名总结 浏览器 插件 控件 的签名安全机制o9o...
atitit. 浏览器插件 控件 applet 的部署,签名总结 浏览器 插件 控件 的签名安全机制o9o 1. 服务器部署签名 1 2. 签名流程::生成密钥..导出cert正书,签名 1 3. ...
- 一、区块链技术与应用-密码学原理
密码学原理: 哈希: 加密货币(crypto-currency) 密码学中所用的哈希函数被称为cryptographic hash function 它有两个重要的性质: 1. collis ...
最新文章
- Google148亿元收购Fitbit,抢占苹果、三星可穿戴设备市场地盘
- 规格选项表管理之查询获取规格选项表列表数据
- NLP-基础知识-005(专家系统)
- git 多仓库源 配置
- RunJar是什么进程?
- 无线网卡的Master,Managed,ad-hoc,monitor等模式
- Java System类exit()方法及示例
- acctype mysql assoc_DedeCMS V5.3二次开发经验分享
- 比较标签 php,比较标签 · ThinkPHP5.0完全开发手册 · 看云
- C++ typename 的双重含义
- markdownpad 2 的使用
- echart高级使用_echarts高级入坑
- 转载一个 mui 等待动画 mui.showLoading
- WebSocket爬虫之爬取龙珠弹幕
- 如何关闭搜狗输入法软键盘的热键
- 向量相似度度量(二):EMD (Earth Mover's Distance)的MATLAB对照实现
- MQTT客户端软件(MQTT.fx)的使用详解
- JavaSrcipt学习(学习打卡Day9)
- python实现微信自动投票_Python——开发一个自动化微信投票器【附代码实例方法】...
- 陈强《计量经济学及Stata应用》习题答案