第十六个知识点:描述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\)的合法签名,那么我们有

\[v = g^{u_1}\cdot y^{u_2}=g^{h(m)\cdot (h(m)+x\cdot r)^{-1}\cdot k}\cdot {g^{x \cdot r \cdot (h(m)+x\cdot r)^{-1}\cdot k}} \ mod \ p
= 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\)上,那么我们有

\[v=g^s\cdot y^{-r}=g^{k+r\cdot x}\cdot g^{-r\cdot x}=g^k=r
\]

(注意: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.

正确性验证

\[s^e=h(m)^{d\cdot e} mod \ N=h(m)\ mod \ N
\]

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的密钥生成,签名和验证的更多相关文章

  1. 第二十六个知识点:描述NAF标量乘法算法

    第二十六个知识点:描述NAF标量乘法算法 NAF标量乘法算法是标量乘法算法的一种增强,该算法使用了非邻接形式(Non-Adjacent Form)表达,减少了算法的期望运行时间.下面是具体细节: 让\ ...

  2. 第三十六个知识点:Index Calculus算法

    第三十六个知识点:Index Calculus算法 我们这篇博客继续描述一种数学攻击,这种数学攻击被叫做Index Calculus(IC)算法. 注意这里Index Calculus算法没有找到合适 ...

  3. 第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么

    第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么 Sigma协议 Sigma协议是Alice想要向Bob证明一些东西的协议(Alice知道一些秘密).他们有下面的一般范式:Al ...

  4. Bristol大学密码学博士生的五十二个知识点

    Bristol大学密码学博士生的五十二个知识点 这个系列,是Bristol大学的密码安全工作组为密码学和信息安全相关的博士准备了52个基本知识点. 原地址:http://bristolcrypto.b ...

  5. 第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密

    第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密 1.RSA-OAEP RSA-OAEP是RSA加密方案和OAEP填充方案的同时使用.现实世界中它们同时使用.(这里介绍的只是&quo ...

  6. 第四十九个知识点:描述在IPsec和TLS后的基本想法

    第四十九个知识点:描述在IPsec和TLS后的基本想法 网络安全协议(Internet Protocol Security,IPsec)和安全传输层协议(Transport Layer Securit ...

  7. 第十八个知识点:画一个描述ECB,CBC,CTR模式的操作

    第十八个知识点:画一个描述ECB,CBC,CTR模式的操作 第8周是画三个图的任务,但是维基百科上已经有人画的很好了 https://en.wikipedia.org/wiki/File:ECB_en ...

  8. 第二十四个知识点:描述一个二进制m组的滑动窗口指数算法

    第二十四个知识点:描述一个二进制m组的滑动窗口指数算法 简单回顾一下我们知道的. 大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法.因此,现代密码学需要大指数模幂算法的有效实现.我 ...

  9. 第三十四个知识点:描述攻击离散对数问题的baby-step/Giant-step方法

    第三十四个知识点:描述攻击离散对数问题的baby-step/Giant-step方法 Baby-step/Giant-step是Dnaiel Shanks为解决DLP问题开发的算法.DLP问题已经是许 ...

随机推荐

  1. 【每天五分钟大数据-第一期】 伪分布式+Hadoopstreaming

    说在前面 之前一段时间想着把 LeetCode 每个专题完结之后,就开始着手大数据和算法的内容. 想来想去,还是应该穿插着一起做起来. 毕竟,如果只写一类的话,如果遇到其他方面,一定会遗漏一些重要的点 ...

  2. SQLyog连接mysql8报2058错误

    连接会话时,报如下错误. 通过网上查解决办法,报这个错误的原因是mysql密码加密方法变了 解决办法: 1.先使用mysql -uroot -p输入密码进去mysql 2.ALTER USER 'ro ...

  3. 大数据学习day35----flume01-------1 agent(关于agent的一些问题),2 event,3 有关agent和event的一些问题,4 transaction(事务控制机制),5 flume安装 6.Flume入门案例

    具体见文档,以下只是简单笔记(内容不全) 1.agent Flume中最核心的角色是agent,flume采集系统就是由一个个agent连接起来所形成的一个或简单或复杂的数据传输通道.对于每一个Age ...

  4. vi查找替换命令详解 (转载)

    转载至:   http://blog.csdn.net/lanxinju/article/details/5731843 一.查找 查找命令 /pattern<Enter> :向下查找pa ...

  5. 给webapp加上一个apk外壳

    原文:http://blog.csdn.net/cmyh100/article/details/77862962 1.在Android Studio里创建一个项目 2.创建MyApplication. ...

  6. linux安装redis报错

    问题:You need tcl 8.5 or newer in order to run the Redis test 解决办法: wget http://downloads.sourceforge. ...

  7. Data Calendar

    1.Date对象 Date类在java.util包中.使用Date类的无参数构造方法创建的对象可以获取本地当前时间. 用Date的构造方法Date(long time)创建的Date对象表 示相对19 ...

  8. Handler与多线程

    1.Handler介绍 在Android开发中,我们常会使用单独的线程来完成某些操作,比如用一个线程来完成从网络上下的图片,然后显示在一个ImageView上,在多线程操作时,Android中必须保证 ...

  9. new Date()与setDate()参数

    New Date()与setDate()参数 相信网上已经有很多关于日期的文章了,这里只是我自己再工作中遇到的问题然后加以总结: new Date() new Date() 一共有六种形式,五种带参数 ...

  10. Linux centos7 安装.net 环境

    其实在linux 下安装.net 环境并不复杂,但最近遇到的服务器没有外网,比较坑很多依赖都没有,记录下这次的安装过程. 一开始以为是服务器没有外网,后来发现是服务器没有配置dns,于是配置dns 第 ...