第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证
第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证
这是密码学52件事系列中第16篇,这周我们描述关于DSA,Schnorr和RSA-FDH的密钥生成,签名和验证.
1.DSA
数字签名场景(DSA),也叫数字签名标准(the Digital Signature Standard,DSS),在1991年[1]被NIST(国际标准和技术机构)提出.DSA的安全是基于计算离散对数的困难性上.但是却没有一个基于一个标准困难性假设的证明,即便在随机访问模型里.
域参数生成
1.选择一个素数\(p\),其中\(2^{L-1}<p<2^L\),同时\(L\)是64的倍数, \(512 \le L \le 1024\)
2.选择一个\(p-1\)的质因数\(q\),其中\(2^{159}<q<2^{160}\)
3.计算\(q\)阶子群的生成函数\(g\):随机选择一个整数\(r\),其中\(1<r<p-1\),\(g=r^{(p-1)/q} \mod p\) and \(g \ne 1\).
密钥生成
1.选择一个随机整数\(x\),其中\(0<x<q\)
2.计算\(y=g^x \mod p\)
然后公钥是\(y\),私钥是\(x\).
签名
1.选择一个随机的整数\(k\),其中\(0<k<p\)
2.计算\(r=(g^k \mod p ) \mod q\)
3.计算\(s = (h(m)+x*r)*k^{-1} \mod q\),其中\(h(m)\)是\(m\)在使用SHA-1下的函数
m的签名对是\((r,s)\)
验证
1.计算\(u_1 = h(m)*s^{-1} \mod q\)
2.计算\(u_2 = r*s^{-1} \mod q\)
3.计算\(v = (g^{u_1}*g^{u_2}) \mod q\)
4.如果\(v=r\),输出1,否则输出0
正确性
如果\((r,s)\)是一个\(m\)的合法签名,那么我们有
= g^{(h(m)+x\cdot r)\cdot (h(m)+x \cdot r)^{-1}\cdot k}\ mod \ p
= g^k \mod p
\]
2.Schnorr
Schnorr是一个重要的基于DLP问题的签名场景.它工作在任何素数域.它的安全性在DL假设和随机访问模型下是被证明了的.
域参数生成
1.选择一个素数\(p\)
2.选择一个和\(p-1\)互质的\(q\)
3.选择\(q\)阶子群的生成器\(g\)
密钥生成
1.随机选择一个整数\(x\),其中\(0<x<q\)
2.计算\(y = g^x \mod p\)
公钥就是\(y\),私钥就是\(x\).
签名
1.选择一个随机整数\(k\),其中\(0<k<q\)
2.计算\(a = g^k \mod p\)
3.计算\(r = h(m||a)\),其中\(m\)是被签名的消息,同时\(h:\{0,1\}^* \rightarrow Z_q\).是一个哈希函数.
4.计算\(s = (k+r*x) \mod q\)
签名就是\((r,s)\)
正确性
如果\((r,s)\)是一个正确的签名在\(m\)上,那么我们有
\]
(注意:schnorr协议是一个交互式的协议,这里应该说的不是最初的想法)
3.RSA-FDH
\(RSA-FDH\)(full domain hash)是一种Bellare和Rogaway in [3]中介绍的基于RSA的签名.遵循先hash后签名的范例.它利用哈希函数(输出正好等于RSA的模数),为普通的RSA签名方案生成输出.它保护了textbook RSA签名的代数攻击方案.并且对任意长度的消息都能签名.但是实际中很难创建这样的哈希函数.RSA-FDH可以在随机的oracle模型中证明EU-CMA安全(存在不可为造性).
密钥生成
1.选择两个大素数\(p\)和\(q\)
2.计算\(N = p*q\)
3.选择一个随机整数\(e\),其中\(1<e<\phi(N)\).使得\(gcd(e,\phi(N))=1\).
4.计算一个整数d,使得\(1<d<\phi(N)\),\(e*d=1\mod\phi(N)\)
公钥是\((N,e)\),私钥是\((d,p,q)\)
签名
计算\(s = h(m)^d\mod N\),其中\(m\)是将要被签名,同时\(h:\{0,1\}^* \rightarrow Z_N\)是一个hash函数.
\(m\)的签名就是\(s\).
验证
如果\(s^e=h(m)\),输出\(1\).否则输出0.
正确性验证
\]
Reference
[1] http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf
[2] http://eprint.iacr.org/2012/029.pdf
[3] http://web.cs.ucdavis.edu/~rogaway/papers/exact.pdf
第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证的更多相关文章
- 第二十六个知识点:描述NAF标量乘法算法
第二十六个知识点:描述NAF标量乘法算法 NAF标量乘法算法是标量乘法算法的一种增强,该算法使用了非邻接形式(Non-Adjacent Form)表达,减少了算法的期望运行时间.下面是具体细节: 让\ ...
- 第三十六个知识点:Index Calculus算法
第三十六个知识点:Index Calculus算法 我们这篇博客继续描述一种数学攻击,这种数学攻击被叫做Index Calculus(IC)算法. 注意这里Index Calculus算法没有找到合适 ...
- 第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么
第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么 Sigma协议 Sigma协议是Alice想要向Bob证明一些东西的协议(Alice知道一些秘密).他们有下面的一般范式:Al ...
- Bristol大学密码学博士生的五十二个知识点
Bristol大学密码学博士生的五十二个知识点 这个系列,是Bristol大学的密码安全工作组为密码学和信息安全相关的博士准备了52个基本知识点. 原地址:http://bristolcrypto.b ...
- 第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密
第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密 1.RSA-OAEP RSA-OAEP是RSA加密方案和OAEP填充方案的同时使用.现实世界中它们同时使用.(这里介绍的只是&quo ...
- 第四十九个知识点:描述在IPsec和TLS后的基本想法
第四十九个知识点:描述在IPsec和TLS后的基本想法 网络安全协议(Internet Protocol Security,IPsec)和安全传输层协议(Transport Layer Securit ...
- 第十八个知识点:画一个描述ECB,CBC,CTR模式的操作
第十八个知识点:画一个描述ECB,CBC,CTR模式的操作 第8周是画三个图的任务,但是维基百科上已经有人画的很好了 https://en.wikipedia.org/wiki/File:ECB_en ...
- 第二十四个知识点:描述一个二进制m组的滑动窗口指数算法
第二十四个知识点:描述一个二进制m组的滑动窗口指数算法 简单回顾一下我们知道的. 大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法.因此,现代密码学需要大指数模幂算法的有效实现.我 ...
- 第三十四个知识点:描述攻击离散对数问题的baby-step/Giant-step方法
第三十四个知识点:描述攻击离散对数问题的baby-step/Giant-step方法 Baby-step/Giant-step是Dnaiel Shanks为解决DLP问题开发的算法.DLP问题已经是许 ...
随机推荐
- 看动画学算法之:二叉搜索树BST
目录 简介 BST的基本性质 BST的构建 BST的搜索 BST的插入 BST的删除 简介 树是类似于链表的数据结构,和链表的线性结构不同的是,树是具有层次结构的非线性的数据结构. 树是由很多个节点组 ...
- Flume(二)【入门】
目录 一.安装部署 1.安装地址 2.安装步骤 二.入门案例 1.官方案例(nestat->logger) 2.实时监控单个追加文件(exec->hdfs) 3.实时监控目录下多个新文件( ...
- css系列,选择器权重计算方式
CSS选择器分基本选择器(元素选择器,类选择器,通配符选择器,ID选择器,关系选择器), 属性选择器,伪类选择器,伪元素选择器,以及一些特殊选择器,如has,not等. 在CSS中,权重决定了哪些CS ...
- Linux定时任务crontable简介
Linux下定时执行任务的方法:Linux之crond 服务介绍:https://www.cnblogs.com/liang-io/p/9596294.html http://www.mamicode ...
- oracle 锁查询
--v$lock中 id1 在锁模式是 TX 时保存的是 实物id 的前2段SELECT * FROM (SELECT s.SID, TRUNC(id1 / power(2, 16)) rbs, bi ...
- Cnblog博客美化
具体的使用教程文档在这里 BNDong/Cnblogs-Theme-SimpleMemory 简要的操作如下: 博客园 - 管理 - 设置 值得注意得是: 要想JS代码要申请才可以使用 博客侧边栏 可 ...
- java的父类声明,子类实例化(强制类型转换导致异常ClassCastException)
一.使用原因 父类声明,子类实例化,既可以使用子类强大的功能,又可以抽取父类的共性. 二.使用要点 1.父类类型的引用可以调用父类中定义的所有属性和方法: 2.父类中方法只有在是父类中定义而在子类中没 ...
- Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别
敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...
- php-正则邮箱验证及详解
当前的邮箱格式有哪些//1.第1种是QQ邮箱,它的后缀名是,@qq, .com.// 2.第2种是网易邮箱后缀名是,@163.com或者,@126.com// 3.第3种是雅虎邮箱,后缀名是,@yah ...
- mysql的事务详解
事务及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性. 原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执 ...