The Elliptic Curve Digital Signature Algorithm(ECDSA)学习之路 - 签名验签流程
前言
本文档主要基于规范<ANSI-X962-2005>
进行学习理解。该标准主要定义了使用ECDSA算法对数据进行保护的数字签名的产生和验证方法。
ECDSA应该与某个已经验证过的Hash函数结合一起使用,如SHA-1、SHA-224、SHA-256、SHA-384、SHA-512
该标准不仅提供了生成公私钥对的方法,同时也提供了使用这些密钥的流程。该标准同样也提供了产生椭圆曲线参数的方法和算法中安全使用这些椭圆曲线参数的流程。
安全级别
ECDSA的每种加密都有一定范围的安全级别。安全级别按照BIT计量,ECDSA只识别那些论证过的安全级别,当前可识别的安全级别有:80 112 128 192 和 256 bit
ECDSA的所有组件应该使用同样的安全级别,但是也可以有所不同。ECDSA的用户和使用者应该保证使用的安全级别可以满足应用程序需要。
Hash函数
ECDSA中的hash函数被用来计算签名或验签过程中用于计算消息的摘要值。
Hash函数还被用于随机椭圆曲线参数域的产生和验证;也可以在椭圆曲线私钥的随机数产生器中被使用。
HASH函数的安全级别应该满足ECDSA的整体要求。
ECDSA
签名者按照签名规则对某些数据进行操作,得到签名值;
验证者收到签名值和数据之后,使用验证规则检查签名的正确性。
签名过程
签名者通过以下过程签名消息:
输入:
a)签名消息M
b)椭圆曲线参数域
c)Hash函数
d) 私钥d
操作流程:
a):使用A.4中的方法产生一个与椭圆曲线参数相关的密钥对(k,R)
,其中R=(Xr,Yr)
b):将Xr
转换成整数 j
c):设置 r=j mod n
,如果 r= 0
回到步骤a
d):使用选择的hash函数,计算H=hash(M)
e):按照以下规则从H 中产生e值:
1):如果 ⎡log2n⎤ ≥ hashlen
,设置E=H
;否则E=H的最左⎡log2n⎤ bits
2):将bit字符串E
转换成整数e
f):计算s = k-1 (e + dr) mod n
,如果s为0 ,回到步骤a
输出:
(r,s)
验签过程
公钥验签
输入:
a)消息 M
b) 签名值由( r',s')
组成
c)椭圆曲线参数域
d)Hash函数
e)公钥Q
操作流程:
a):如果 r'
和 s'
不在范围 [1, n –1]
内,报错;
b):计算H'= Hash (M')
c):从H'
获取整数 e'
1)如果 ⎡log2n⎤ ≥ hashlen
,E'= H'
;否则E'= the leftmost ⎡log2n⎤ bits of H'.
2)将bit串 E'
转换成整数e'
d):计算 u1 = e' (s')–1 modn
,u2 = r'(s')–1 mod n
e):计算R = (xR,yR) = u1G+ u2Q
,如果R是无穷大点,报错
f):将xR
按照一定的方式转换成j
g) :计算v = j modn.
h) :比较 v
和 r'
. 如果 v = r
',输出成功,否则失败
私钥验签
输入:
a)消息 M
b) 签名值由( r',s')
组成
c)椭圆曲线参数域
d)Hash函数
e)公钥Q
f)私钥d
操作流程:
a):如果 r'
和 s'
不在范围 [1, n –1]
内,报错;
b):计算H'= Hash (M')
c):从H'
获取整数 e'
1)如果 ⎡log2n⎤ ≥ hashlen
,E'= H'
;否则E'= the leftmost ⎡log2n⎤ bits of H'.
2)将bit串 E'
转换成整数e'
d):计算u1 =e' (s')–1 mod n
,u2 = r'(s')–1 mod n
.
e):计算 k'= u1+ u2d mod n.
f):计算R = (xR,yR) = k'G
;如果R
为无穷大点报错
g):将xR
按照一定的方式转换成j
h) :计算v = j modn.
i) :比较 v
和 r'
. 如果 v = r
',输出成功,否则失败
附录
素数检查
如果n是一个大的正整数,则下列的方法决定了n是一个素数还是合数;(素数又称质数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数))
输入:
大奇数n
,正整数T
输出:“素数” or “合数”
a):计算满足一对整数v、w,
其中v为非负,w为奇数,使得
b):选择j
,j
在1
到T
范围内循环:
1):使用可验证的随机数产生器,在[2, n – 1]
之间产生一个整数a
2):
3)如果 b = 1
或者 b = n-1
,进入步骤 6
4)选择i
在1
到v-1
之间循环
i): `b=b*b mod n`
ii):如果 `b= n-1`, ,去到步骤6
iii) 如果b =1,输出“合数”,退出
iv):i++,再次循环
5)输出“合数”,退出
6)j
加1循环
C):输出“素数”。
The Elliptic Curve Digital Signature Algorithm(ECDSA)学习之路 - 签名验签流程相关推荐
- ECDSA (Elliptic Curve Digital Signature Algorithm)
这是一个签名算法.介绍: http://zhiqiang.org/blog/it/das-and-ecdsa-rsa.html 维基百科 DSA http://en.wikipedia.org/wik ...
- 学习笔记:公钥私钥 签名验签 加密解密 CA 证书
重点: 1.区分加密解密和签名验签(在非对称加密情景下) 加密解密:#A给B发消息# A用B的公钥进行运算(加密),B收到后用B自己的私钥进行逆向运算(解密) 签名验签:#A给B发消息# A用A自己的 ...
- ECDSA数字签名算法(java实现ECDSA签名验签)
一.ECDSA概述 椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟.ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准.它在 ...
- iOS - ECC椭圆曲线、ECDSA签名验签和ECIES加解密本文来源
内容简介:ECC椭圆曲线详解前言ECC英文全称"Ellipse Curve Cryptography",与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性 ...
- RSA签名验签学习笔记
RSA私钥签名时要基于某个HASH算法,比如MD5或者SHA1等.之前我一直认为签名的过程是:先对明文做HASH计算,然后用私钥直接对HASH值加密.最近才发现不是那么简单,需要对HASH后的数据进行 ...
- Java学习之路 第三章 流程控制
第三章 流程控制 1.if条件语句 (1)简单的if条件语句语法: if(条件){语句: } 注意:a.条件必须最后返回一个布尔值. (2)嵌套if语句语法: if(条件1){if(条件2){...} ...
- 密码学–数字签名Digital Signature五种分类
密码学–数字签名Digital Signature五种分类 基于数字签名用途的分类 基于数学难题的分类 基于密码体制的分类 基于数字签名安全性的分类 基于签名用户的个数分类 A. 基于数字签名用途的分 ...
- Elliptic Curve Cryptography: 轻轻的学
Elliptic Curve Cryptography: 轻轻的学 Elliptic curves Algebraic addition Scalar multiplication Multiplic ...
- Elliptic curve cryptography
原文来自wiki 翻译参照Bing在线翻译 - - 部分翻译 Elliptic curve cryptography From Wikipedia, the free encyclopedia Jum ...
最新文章
- PTA 基础编程题目集 7-27 冒泡法排序 C语言
- IBM SOA解决方案
- 2017 清北济南考前刷题Day 2 afternoon
- 你可能没注意的CSS单位
- 成员缩写_青春有你2snh48成员都有谁 10名SNH48女团成员介绍
- CSDN粉丝可见回来了!
- 贪心算法之——会场安排(nyoj14)
- 钉钉宜搭3.0发布!易连接、酷数据、更安全
- IOS--工作总结--post上传文件(以流的方式上传)
- 98. Validate Binary Search Tree
- Spring框架IOC和AOP的实现原理(概念)
- 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串
- 【codevs3290】华容道
- OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法
- 第6篇 熊猫烧香专杀工具编写
- 高德sdk android加载3857,GCJ02-Correct
- ArcGIS实验教程——实验二:ArcGIS地理配准完整操作步骤
- centos格式化优盘命令_centos 格式化分区
- wireshark之文件还原
- 资源网365,资源之家! 天天好资源!力争打造一个更好的资源网下载站.希望大家指教!...