数字签名中用到了多个函数,包括 ECDSA_sign、ECDSA_sign_ex、ECDSA_do_sign、ECDSA_do_sign_ex、ecdsa_do_sign、ECDSA_sign_setup、ecdsa_sign_setup。这些函数有的是用于计算签名,有的是用于做签名前的预运算;有的签名是采用DER编码,有的是采用ECDSA_SIG。下图将简要说明这些函数之间的调用关系。
图
6.3
签名所用函数图
现对上图做个简要说明:
-
ECDSA_sign和ECDSA_sign_ex的签名采用的是DER编码,故需要用i2d_ECDSA_SIG将ECDSA_do_sign_ex得出的ECDSA_SIG格式签名编码成DER形式。
-
ECDSA_sign_setup和ecdsa_sign_setup做签名前的预运算,是可选函数。所谓的预运算就是指如果外部不输入kG和 k-1的值((x1,y1) ←kG 是ECDSA签名算法step1.1.2 需要计算的值,而k-1是step1.2所需中间值),就预先将这两个值计算出来。参见§6.2.2签名原理的ECDSA签名算法。
-
ecs_ossl.c文件中的函数ecdsa_do_sign是具体实现签名的函数,ecdsa_sign_setup是具体实现预运算的函数。
下表对以上函数再做一个比较。
|
函数名
|
签名采用的编码方式
|
可选参数
|
所在文件
|
|
ECDSA_sign
|
DER编码
|
无
|
ecs_sign.c
|
|
ECDSA_sign_ex
|
DER编码
|
有
|
ecs_sign.c
|
|
ECDSA_do_sign
|
ECDSA_SIG
|
无
|
ecs_sign.c
|
|
ECDSA_do_sign_ex
|
ECDSA_SIG
|
有
|
ecs_sign.c
|
|
ecdsa_do_sign
|
ECDSA_SIG
|
有
|
ecs_ossl.c
|
|
ECDSA_sign_setup
|
ECDSA_SIG
|
计算可选参数
|
ecs_sign.c
|
|
ecdsa_sign_setup
|
ECDSA_SIG
|
计算可选参数
|
ecs_ossl.c
|
表6.4
签名函数对比表
数字签名中用到了多个函数,包括 ECDSA_sign、ECDSA_sign_ex、ECDSA_do_sign、ECDSA_do_sign_ex、ecdsa_do_sign、ECDSA_sign_setup、ecdsa_sign_setup。这些函数有的是用于计算签名,有的是用于做签名前的预运算;有的签名是采用DER编码,有的是采用ECDSA_SIG。下图将简要说明这些函数之间的调用关系。图...
ECDSA
的全名是Elliptic Curve DSA,即椭圆曲线DSA。它是Digital
Sig
nature Algorithm (DSA)应用了椭圆曲线加密
算法
的变种。椭圆曲线
算法
的原理很复杂,但是具有很好的公开密钥
算法
特性,通过公钥无法逆向获得私钥。
第一部分 : DSA的
签名
和验证过程
要了解
ECDSA
,首先要了解DSA
签名
的过程和验证过程。为了理解的方便,这里省去诸
DSA:Digital
Sig
nature Algorithm (DSA)
ECDSA
:The Elliptic Curve Digital
Sig
nature Algorithm (
ECDSA
)
DSS:Digital
Sig
nature Standard (DSS)
NIST:(U.S. National) Institute of Standards and Tec
既然我们已经可以产生椭圆曲线密钥对,我们接下来就用使用它来进行消息的
签名
和验证。我所指的消息是任何形式,无论是文本还是二进制形式,只要它们有被验证合法性的需要。特别的是,bitcoin客户端通过
签名
来证明交易的有效性,反之,矿工则是通过验证这样的
签名
,来批准并广播合法的交易。
ECDSA
签名
椭圆曲线
签名
算法
就是
ECDSA
(Ellipt...
公司原计划是年后让我直接去公安一所过35114的认证,但是突发疫情,导致上班时间一推再推,最后也只能远程用升级包的方式给检测员进行认证。
前几次的尝试,服务器一直回复401,让我百思不得其解,甚至开始让我产生对
算法
的怀疑。现在回过头来看,其实SM2
签名
格式不理解是导致一直验签失败的主要原因。
按照国密的规范,SM2
签名
结果r||s长度应该是(r:32字节)+(s:32字节)64字节,就算加个0...
数字
签名
就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。一般是非对称密钥加密技术与数字摘要技术的结合应用,目前主流的三种非对称
算法
有:
1. RSA,这个巨NB
算法
的实现方式,使其既可以用于
签名
也可以用于加密(密钥交换)。除了将公钥与密钥的地位交换一下之外,其它步骤几乎是完全一样的。发送方用自己的私钥对消息的摘要值进行“加密”
───────────────────────────────────────
int
ECDSA
_
sig
n(int type, const un
sig
ned char *dgst, int dgstlen, un
sig
ned char *
sig
, un
sig
ned int *
sig
len, EC_KEY *eckey)
功能: 计算
签名
,
签名
采用D...
ECDSA
:椭圆曲线数字
签名
算法
。jdk7的第四个版本提供了对
ECDSA
的支持。ECDS的
签名
算法
代码:public static void jdk
Ecdsa
(String data) {
try {
//1.初始化密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC")
本文首发公众号VenusBlockChain,关注公众号后可免费阅读!VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。
1
ECDSA
算法
首先,需要设置参数(a,b,p,N,G)(a,b,p,N,G)(a,b,p,N,G)来初始化一椭圆曲线,椭圆曲线方程y2=(x3+ax+b)modpy^2=(x^3+ax+b)modpy2=(x...
使用 C 语言调用
OpenSSL
库
来实现求数组 MD5
算法
,可以使用
OpenSSL
库
中的函数 EVP_MD5() 来处理数据,具体步骤如下: 1. 定义一个 EVP_MD_CTX 结构体,用于存放 MD5 的上下文信息; 2. 使用 EVP_MD_CTX_init() 函数初始化 EVP_MD_CTX 结构体; 3. 使用 EVP_DigestInit_ex() 函数初始化摘要上下文;4. 使用 EVP_DigestUpdate() 函数传入要处理的数组; 5. 调用 EVP_DigestFinal_ex() 函数完成计算; 6. 使用 EVP_MD_CTX_cleanup() 函数清理 MD5 的上下文信息; 7. 使用 EVP_MD_CTX_destroy() 将 EVP_MD_CTX 结构体的内存释放掉。