区块链中的认证机制:数字签名

2020-06-05 18:47:01  [ 以太坊 ]      留言:0      阅读:14

来源:https://www.sohu.com/a/152841283_468675


区块链中的认证机制:数字签名

2017-06-29 00:07

导读:在区块链的分布式网络里,节点之间进行通讯并达成信任,需要依赖数字签名技术,它主要实现了身份确认以及信息真实性、完整性验证。本文主要介绍了数字签名的基本原理、类型以及区块链中用到的签名算法SECP256K1。

数字签名介绍

数字签名涉及到公钥、私钥和钱包等工具,它有两个作用:一是证明消息确实是由信息发送方签名并发出来的,二是确定消息的完整性。数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

数字签名的基本算法

1、对称加密算法

对称加密指加密和解密使用相同密钥的加密算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。

对称加密常用的算法包括:

(1)DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;

(2)3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;

(3)AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。

2、非对称加密算法

非对称加密算法需要两个密钥:公钥和私钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

常用的非对称加密算法包括:

(1)RSA:因由 RSA 公司发明而命名,是一个支持变长密钥的公开密钥算法,需要加密的文件块的长度也是可变的;公开密钥算法总是要依据一个数学上的难题。RSA基于大素数积难分解问题,给定两个数p、q 很容易相乘得到n,而对n进行因式分解却相对困难。

(2)ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。椭圆曲线因为用二元三次方程y^2= x^3+ ax + b来表示,类似椭圆周长计算方程而得名。公开秘钥算法要基于一个数学难题,椭圆曲线算法就是基于离散对数问题。有限域Fp上的椭圆曲线同样有加法,但已经不能给以几何意义的解释。

椭圆曲线上的加法如下定义:

  • 无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P

  • P(x,y)的负元是-P(x,-y),有P+(-P)= O∞

  • P(x1,y1),Q(x2,y2)和R(x3,y3) 有如下关系:

    x3≡k2-x1-x2(mod p)

    y3≡k(x1-x3)-y1(mod p)

其中若P=Q 则 k=(3x2+a)/2y1 若P≠Q,则k=(y2-y1)/(x2-x1)

考虑如下等式:

K=kG,其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数,不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。这就是椭圆曲线加密算法采用的难题,我们通常称作离散对数问题。我们把点G称为基点(base point),k(k<n,n为基点G的阶)称为私有密钥(privte key),K称为公开密钥(public key)。

ECC和RSA相比,在许多方面都有对绝对的优势,主要体现在:抗攻击性强;计算量小,处理速度快;存储空间占用小;带宽要求低。ECC的这些特点使它必将取代RSA,成为通用的公钥加密算法,所以区块链也使用了ECC。

区块链中用到的签名算法SECP256K1

区块链中生成公钥时用到的算法是SECP256K1,是一种椭圆曲线的标准化表达方式,其中256表示该椭圆曲线是256位, K代表Koblitz curve,相对应的椭圆曲线的标准换表达还有,SECP192K1,SECP192R1,SECP224K1,SECP224R1,SECP256R1,SECP384R1,SECP521R1等。

SECP256K1曲线由下述函数定义,该函数可产生一条椭圆曲线:

Y^2 = (x^3 + 7)} over (Fp)

如此选取的原因,也是为了和哈希算法SHA256的输出值相一致,以及求解离散对数的困难性。

现在描述一个利用椭圆曲线进行加密通信的过程:

  • 用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。

  • 用户A选择一个私有密钥k,并生成公开密钥K=kG。

  • 用户A将Ep(a,b)和点K、G传给用户B。

  • 用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。

  • 用户B计算点C1=M+rK;C2=rG。

  • 用户B将C1、C2传给用户A。

  • 用户A接到信息后,计算C1-kC2,结果就是点M。因为C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

再对点M进行解码就可以得到明文,这是区块链中用到签名算法SECP256K1的基本原

来源:https://www.sohu.com/a/152841283_468675


留言:


    更换校验码     

无觅相关文章插件,快速提升流量
分享到:
友荐云推荐 Process: 0.0344s ( Load:0.0003s Init:0.0008s Exec:0.0210s Template:0.0123s ) | DB :14 queries 1 writes | UseMem:3,028 kb