比特币签名算法 比特币交易签名怎么写,举个例子
一、比特币背后的技术1 - 椭圆曲线签名算法
比特币背后的技术1-椭圆曲线签名算法
椭圆曲线签名算法(Elliptic Curve Digital Signature Algorithm,ECDSA)是比特币等加密货币中用于确保交易安全性和身份验证的关键技术。以下是对椭圆曲线签名算法及其在比特币中的应用的详细解释。
一、椭圆曲线的基本概念
椭圆曲线是一类具有特定解析式的曲线,其一般形式为:
y2= x3+ ax+ b
这样的曲线具有两个重要的性质:
椭圆曲线是关于x轴对称的。任意一条直线只会与椭圆曲线有不超过3个交点。基于这两个性质,我们可以在椭圆曲线上定义“加法”和“乘法”这两种运算,这些运算为后续的签名算法提供了数学基础。
二、椭圆曲线上的运算
加法运算:
假设我们有任意两点A,B在椭圆曲线E上,我们可以将两点链接起来得到一条直线,这条直线与椭圆曲线的第三个交点-C(注意这里的“-”表示关于x轴对称的点)。然后,我们将得到的点-C关于x轴对称,得到点C。这样的一串操作可以被记录为A+ B= C。
椭圆曲线上的点乘是满足交换律的,因为点A,B定义的直线与点B,A定义的直线是同一条。
乘法运算:
如果一个椭圆曲线上进行了n次A+ A这样的加法操作,我们可以将其简写为A× n。例如,A× 3的计算过程可以通过几何方法表现出来。
三、椭圆曲线的改进
为了在计算机上更准确地处理椭圆曲线,我们对椭圆曲线做了以下改进:
把原先定义在实数域上的椭圆曲线离散化到了整数域上,以避免浮点数溢出造成的计算误差。通过模运算(取余)的方式人为定义了椭圆曲线的上界,当椭圆曲线的计算结果超出上界时,因为模运算的存在,最终结果会被映射在整型变量能够表达的数值范围中。四、椭圆曲线与身份验证
比特币所使用的椭圆函数签名协议是SECP256K1,这个签名协议中包括了一个椭圆函数y2= x3+ 7和一个起始点A。
椭圆曲线签名算法的非对称性使得身份验证变得简单:
私钥K的持有者可以很快地用计算机算出在椭圆函数上的A× K。然而,给定A× K,计算出K的值却是几乎不可能的。这样的非对称难度保证了私钥的安全性,只要私钥K的持有者不公开自己手中的私钥,其他人就几乎不可能通过私钥的生成结果A× K逆向获得私钥K。
五、比特币交易系统中的椭圆曲线签名
在比特币的交易系统中,每个用户都会有一个随机生成的私钥,并且用SECP256K1算法计算出自己私钥所对应的公钥。
比特币交易流程中的关键部分之一就是通过椭圆曲线签名算法确定确实是比特币的所有者在进行转账操作。具体过程如下:
假设Alice要向Bob转账,她首先会使用自己的私钥K_A对交易信息进行签名。Alice将签名后的交易信息和自己的公钥Z_A一起发送给Bob。Bob收到后,使用Alice的公钥Z_A和已知的椭圆函数参数来验证签名的有效性。如果签名有效,说明交易确实是由Alice发起的,Bob就可以接受这笔转账。通过这样的方式,比特币交易系统确保了交易的安全性和不可篡改性。
(注:图片展示了比特币交易流程中的关键部分,包括私钥生成、公钥计算、交易签名和验证等步骤。)
综上所述,椭圆曲线签名算法是比特币等加密货币中不可或缺的技术之一,它利用椭圆曲线的数学特性实现了高效且安全的身份验证和交易签名。
二、比特币签名是什么,和其他签名有啥区别
比特币签名是用于验证比特币交易真实性和所有权的一种数字签名技术。它基于密码学原理,通过私钥对交易信息进行加密处理,生成独一无二的签名。只有拥有相应私钥的人才能创建有效的签名,从而证明对交易的控制权和认可。
比特币签名与其他签名的区别主要体现在以下几个方面:首先,比特币签名基于区块链技术,具有去中心化、不可篡改的特点。而其他签名可能基于传统的中心化系统,存在信任风险。其次,比特币签名使用的是密码学算法,安全性高。相比之下,其他签名可能采用较为简单的方式,安全性较低。再者,比特币签名的验证过程是公开透明的,任何人都可以通过区块链网络进行验证。而其他签名的验证可能依赖于特定的机构或系统,透明度较低。最后,比特币签名具有匿名性,能够保护用户的隐私。其他签名可能无法提供同样程度的隐私保护。总之,比特币签名在安全性、去中心化、透明度和隐私保护等方面具有独特的优势。
三、签名算法有哪些
签名算法有多种,以下是一些常见的签名算法:
RSA签名算法:
RSA是一种广泛使用的公钥密码体制,可用于数字签名。
它基于公钥和私钥机制,签名方使用私钥对消息进行签名,验证方使用公钥验证签名的真实性。
RSA算法具有高度的安全性和可靠性。
ECDSA签名算法:
ECDSA是一种基于椭圆曲线密码学的签名算法。
相比RSA算法,在相同的安全级别下具有更短的密钥长度,因此更加高效。
广泛应用于加密货币领域,如比特币,其安全性依赖于椭圆曲线密码学的特性。
DSA签名算法:
DSA是一种非对称加密算法,常用于数字签名和验证。
它使用公钥和私钥进行加密和解密操作,设计侧重于安全性和效率的优化。
主要应用于数字证书、电子支付等领域,通过哈希函数与随机数等技术生成不可伪造的数字签名。
四、比特币签名是什么意思
比特币签名是比特币交易中的一个重要环节,它用于验证交易的真实性和所有权。
在比特币网络中,每一笔交易都需要被验证,以确保其合法性和有效性。比特币签名就是一种数字签名,它使用私钥对交易信息进行加密,生成一个唯一的签名。这个签名可以证明交易的发起者拥有相应的私钥,从而验证交易的真实性。
1.私钥与签名:比特币使用非对称加密算法,每个用户都有一对公私钥。私钥是用户的唯一标识,用于生成签名。当用户发起一笔交易时,他会使用私钥对交易信息进行加密,生成一个签名。这个签名是独一无二的,只有拥有相应私钥的用户才能生成。
2.验证签名:在交易被广播到比特币网络后,其他节点会使用公钥对签名进行验证。如果签名验证成功,则说明交易的发起者拥有相应的私钥,交易是真实有效的。
3.确保交易安全:比特币签名的作用是确保交易的安全性和不可篡改。只有拥有私钥的用户才能生成签名,从而保证了交易的所有权。同时,签名的验证过程也保证了交易信息在传输过程中没有被篡改。
4.防止双重花费:比特币签名还可以防止双重花费问题。当一个用户发起一笔交易时,他会使用私钥对交易进行签名。如果其他用户试图使用相同的比特币进行另一笔交易,由于签名不同,这笔交易将无法通过验证。
5.应用场景:比特币签名不仅用于比特币交易,还在其他区块链项目中广泛应用。它是区块链技术中实现安全、可信交易的重要手段之一。
比特币签名通过使用私钥对交易信息进行加密,生成唯一的签名,从而验证交易的真实性和所有权。它在比特币网络中起着至关重要的作用,确保了交易的安全性和不可篡改。同时,比特币签名也为其他区块链项目提供了重要的安全保障。
五、ECDSA(椭圆曲线数字签名算法)
ECDSA(Elliptic Curve Digital Signature Algorithm)
在现实工作和生活中,我们使用签名的方式表达对一份文件的认可,其他人可以识别出你的签名并且无法伪造你的签名。数字签名就是对显示签名的一种电子实现,它不仅可以完全达到现实签名的特点,甚至能够做的更好。
常用的数字签名算法有RSA(Rivest-Shamir-Adleman Scheme)、DSS(Digital Signature Standard)等。比特币使用ECDSA来生成账户的公私钥以及对交易和区块进行验证。
1.Alice(密码学中常用A到Z开头的人名代替甲乙丙丁等,字母越靠后出现频率越低)生成一对密钥,一个是sk(signing key),是非公开的;另一个是vk(verification key),是公开的。
这一对密钥同时生成,并且在数学上是相互关联的,同时,根据vk无法推测出关于sk的任何信息。
2.数字签名算法接收两个输出:信息M和sk,生成一个数字签名Sm
3.验证函数接收信息M、Sm以及vk作为输入,,返回结果是yes或者no。这一步的目的是为了验证你看到的针对信息M的数字签名确实是由Alice的sk来签发的,用于确认信息与签名是否相符。
与手写签名不同,手写签名基本都是相似的,但是数字签名却受输入影响很大。对输入轻微的改变都会产生一个完全不同的数字签名。一般不会对信息直接进行数字签名,而是对信息的哈希值进行签名。由加密哈希函数的无碰撞性可知,这样和对原信息进行签名一样安全。
在数学上,任何满足以下方程的点所形成的曲线称为随机椭圆曲线:并且,a和b可以为任意值。下面展示几个随机椭圆函数的示例:
在了解如何通过基于secp256k1椭圆曲线的ECDSA算法生成公私钥之前,我们需要了解在随机椭圆曲线里,点的加法是如何实现的。
首先定义椭圆曲线上点的加法。设椭圆曲线上有两点,A和B点,那么作过这两点的直线与该曲线相交于第三点(C点),然后关于X轴对称得到D点,则D为这两个点的和,记作D=A+BD=A+BD=A+B。很明显,D点也在该曲线上。所以椭圆曲线上两点之和也是曲线上的点。
特例:
1.如果两点重合,则做该点的切线,与曲线相交点的对称点为和,即A+A=C
如图:
有了加法以后,乘法实现是不过是进行多次加法运算。有了一个基准点P以后,我们可以对其进行乘法运算,最后可以得到曲线上的另外一个点。
设PPP是椭圆曲线上的一个点,那么正整数kkk乘以点PPP的结果由下面的式子定义,注意式子中的加法是上面提到的椭圆曲线上点的加法:
点的运算满足结合律:
很显然,通过累加的方式计算是一种很笨的办法,其时间复杂度是线性的。上面我们提到过,椭圆曲线上点的加法是满足结合律的,即,扩展一下,就有
于是就有这么一种骚操作,比如计算,我们可以先计算;然后计算;再计算;最后计算。这里我们把15次加法减少到了4次。
当然,k的值不可能总是2的幂。实际上上面的操作可以推广到k为任意正整数的情况。比如计算23P,首先计算,然后
因为,所以。总共只需要7次加法。
分析一下,对于任意正整数k,我们都可以利用这个方法将计算k∗P所需的加法计算次数降低到
也就是说,从时间复杂度的角度来看,这个算法是一个的算法。
这个方法被称为快速幂算法,原本常用于快速计算某个数的k次幂,这里将其推广到椭圆曲线点乘的快速计算中。
为什么要在介绍了椭圆曲线上点的乘法后突然冒出一个快速幂算法?快速幂算法对于椭圆曲线加密有什么意义?因为数学家/密码学家发现,利用快速幂算法计算的时间复杂度是对数级的,但是要在知道和的前提下,倒推出的值,没有比挨个尝试的值快太多的算法。于是椭圆曲线加密依赖的数学难题就这么诞生了。
如果我们改一种记法,把椭圆曲线上点的加法记作乘法,原来的乘法就变成了幂运算,那么上述难题的形式跟离散对数问题应该是一致的。即:
所以这个难题叫椭圆曲线上的离散对数问题。
尽管两者形式一致,但是他们并不等价。实际上这个问题比大整数质因子分解(RSA)和离散对数(DH)难题都要难得多,目前还没有出现亚指数级时间复杂度的算法(大整数质因子分解和离散对数问题都有),以致于同样的安全强度下,椭圆曲线加密的密钥比RSA和DH的短不少,这是椭圆曲线加密的一大优势。
假设随机取一个~位之间的值x,计算,最后的结果一定会落在曲线上的一点。假设该点为,在公开以及具体曲线的方程的情况下,能否反推出最初的随机值?
证:寻找的过程只能通过暴力计算,的可能值为~中的一个,平均来说需要计算次能够找到一次值。那么问题来了,运行一次的计算需要多长的时间呢?
假设我们使用的是超级计算机,主频为(一秒钟可以进行一万亿次运算),从宇宙诞生的那一刻开始计算,到现在也就进行了次。找到值的概率为。这个概率和下一秒地球被巨型陨石撞击而毁灭的概率接近,既然我们读到了这里,那么说明这件事没有发生。
在上面的案例中,是~位的一个随机数,可以作为私钥。是随机椭圆曲线上的一个点,也就是由私钥生成的公钥,因此优点可以1得证。
但是密码学中,并不能使用上面介绍的实数域上的椭圆曲线。因为
所以我们需要引入有限域上的椭圆曲线。
要证明优点2,还需要将随机椭圆曲线做一些改动:为了保证最后计算出来的点的坐标值相加是512位,secp256k1引入了一个对质数取模的机制。具体来说,随机椭圆曲线从
变为了其中,是小于的最大质数。
此时的随机椭圆曲线函数图如下:
具体来说,就是向别人证明我知道,但不暴露的任何信息。(有些类似于零知识证明)
证:前面介绍过结合律:添加一个hash函数,简单修改可以得出:使,那么可知为。此时方程为:为了简单起见,我们记和。此时方程化简为:上面这个方程是什么意思呢?
可以这样假设:在已知的情况下,如果能够提供一个和满足上面的方程,就可以证明一个人拥有。这个假设有一个前提,如果一个人不知道x,那么他就无法提供和满足上面的等式。
详细探讨这个前提:如果一个人不知道x,又想计算出和,能够办到吗?结论是不能,首先我们无法从计算出(在有限时间内)。
还有一个问题:在已知和的情况下,能否计算出关于的任何信息?
根据公式:只要解出就可以了。
要想计算出x,就需要知道r,但是在r没有公开的情况下,有什么办法可以计算r吗?我们知道R=r*P;但是根据这个公式无法倒推出r(刚才介绍的那个数学难题),所以x也是安全的。
至此,可以证明算法的第二个优点。
-
芝麻开门交易所官网地址 芝麻交易所排名 11-09