草根站长
老司机 路子野 随时超车
我们都知道,比特币就是一种运用密码学来投资的加密货币,那么,比特币究竟是通过什么样的操作来保证交易过程中的保密性呢?比特币的密码原理又是什么?
比特币钱包中包括了一个私匙和一个公匙,简单的来说私匙就像我们自己的银行账户密码,只有通过这个密码才能打开我们的账号去转账,而公匙就是我们的账号,当我们把账号发给别人对方才可以转账给我们。而私匙和公匙的单一转换性确保了转账来源方的私密安全。什么叫单一转换性?就是说只有私匙可以转化为公匙,公匙不能反向转化为私匙。私匙是一串随机选择的数字,通过椭圆曲线运算(elliptic curve multiplication),转化成另一串数字,也就是公匙。接着,再通过一则单向性哈希密码方程(one-way cryptographic hash function),得到比特币地址。在这两个运算当中,因为他们均非对应方程,也就是说输入值(input)只会有一个对应的输出值(output),但输出值会有多个对应的输入值,所以没有人能通过公匙反方向追查私匙,确保了私匙的安全性。
为了方便大家理解,我来举个例子:在一个鹅毛大雪的冬天,小明从吉林步行送外卖到大连,但是雪太大了,他居然可以做到踏雪无痕。所以,当小明走到大连,当地人问他:“你的外卖是从哪里来的?”小明微微一笑,不予回答。这时,大连人无计可施,因为他们不能从脚步印去判断小明从哪里来的,只有小明自己知道他是从吉林来的。
找到一个随机的数字是在生成“钥匙”里面第一也是最重要的一步。那么,区块链是怎么样使得这个随机生成的数字不会与另一个数字重合呢?原来,在比特币系统里面包含了2^256(准确的来说是n=1.158*10^77)个数字,这个数字有多大呢?大过宇宙里面所有原子数量的总和。基于这一点,这个随机生成的数字与另一个随机生成数字重合的几率微乎其微。
选择了这个随机数字之后,我们需要通过椭圆曲线运算来生成公匙。它的代表公式为:K=k*G。大K就是公匙,小k是私匙,G是一个常数,我们称之为转化常数(generatingconstant)。
上面的图片就是比特币的椭圆曲线,这个特殊的曲线叫secp256k1曲线,它包含了一个这样的方程:y^2 = x^3 + 7 在 有限集的p的域里。而p是一个很大,接近2^256的质数。但又由于这个方程是被定义在有限的数里面,事实上,这个曲线并不平滑,而是由很多密密麻麻的小点组成,尽管我们可以理解这个曲线是平滑并具有在实数集的性质。
接着,我们需要在这个函数方程里找到G,通过数学计算,把G放大小k倍,得到大K。这步数学计算相当复杂,并且不能反向操作。
比特币的地址可以理解为交易中的收款地址。在获得公匙后,我们需要通过单向性哈希密码方程去得到地址。这个方程通常可以理解为A=RIPEMD160(SHA256(K))。这其实是两个方程,先把公匙代入安全散列算法,SHA256,再代入到完整性原语评估消息摘要(RIPEMD160)。为了避免一些数字和字母的混淆,例如1和I,0和o,比特币地址只使用58个字符,这种用法我们称之为Base58Check。
就这样,通过层层加密,我们的私匙终于演化为一个比特币的地址,付账人也终于可以通过这个地址来转账了。
比特币理论以密码学为支撑,构建了一个完备、安全、去中心化的数字货币体系,解决了数字资产所有权问题、双重支付问题、现实世界的通货膨胀问题甚至还预留了机制使得构建在资产转移之上的智能合同成为可能。比特币当然是伟大的创造,期待比特币有更好的未来。
这篇文章将会讲解比特币的加密原理。比特币之所以这么安全,就是因为它的加密机制。 哈希又称为散列,简单的说就是一种将任意长度橡滚逗的消息压缩到某一固定长度的消息摘要的函数。 那么怎么保证原文没用被第三备凳方篡改呢?答案就是数字签名。 这个类似于现实中的签名,就是在信息后面加上另一段内容,作为发送者的证明并证明信息没有被篡改。 如上图所示, 分析: 假设C截取信息,他想篡改内容。首先签名无法篡改,因为他梁卖没有发送方的私钥,如果用自己的私钥进行签名,那么接收方用发送方的公钥解密时是解不开的。所以他只能篡改密文。但接收方解出密文并进行哈希运算后得到的摘要必然和原来的摘要不同,而用发送方的公钥解密出签名得到的摘要肯定不会被篡改,所以两次摘要就会出现不一致,就能确认内容被篡改了。 非对称加密和数字签名这一块稍微有点绕,不过你看懂了之后一定会说一句:中本聪666!!! To be continued...
参加比特币源码研读班后首次写作,看到前辈black写的有关密钥,地址写的很好了,就选了他没有写的椭圆曲线,斗胆写这一篇。 在汪郑密码学上有两种加密方式,分别是对称密钥加密和非对称密钥加密。 对称加密:加密和解密使用的同样的密钥。 非对称加密:加密和解密是使用的不同的密钥。 二战中图灵破解德军的恩尼格码应该就是用的对称加密,因为他的加密和解密是同一个密钥。比特币的加密是非对称加密,而且用的是破解难度较大的椭圆曲线加密,简称ECC。非对称加密的通用原理就是用一个难以解决的数学难题做到加密效果,比如RSA加密算法。RSA加密算法是用求解一个极大整数的因数的难题做到加密效果的。就是说两个极大数相乘,得到乘积很容易,但是反过来算数一个极大整数是由哪两个数乘积算出来的就非常困难。下面简要介绍一下椭圆曲线加密算法ECC。 首先椭圆曲线的通式是这个样子的:一般简化为这个样子:()发公式必须吐槽一下,太麻烦了。) 其中 这样做就排除了带有奇点的椭圆曲线,可以理解为所有的点都有一条切线。 图像有几种,下面列举几个:[1] 椭圆曲线其实跟椭圆关系不大,也不像圆锥曲线那样,是有圆锥的物理模型为基础的。在计算椭圆曲线的周长时,需要用到椭圆积分,而椭圆曲线的简化通式: ,周长公式在变换后有一项是这样的:,平方之后两者基本一样。我们大体了解了椭圆曲线,就会有一个疑问,这个东西怎么加密的呢?也就是说椭圆曲线是基于怎样的数学难题呢?在此之前还得了解一些最少必要知识:椭圆曲线加法,离散型椭圆曲线。椭圆曲线加法数学家门从普通的代数运哪陵罩算中,抽象出了加群(也叫阿贝尔群或交换群),使得在加群中,实数的算法和椭圆曲线的算法得到统一。数学中的“群”是一个由我们定义了一种二元运算的集合,二元运算我们称之为“加法”,并用符号“+”来表示。为了让一李闹个集合G成为群,必须定义加法运算并使之具有以下四个特性: 1. 封闭性:如果a和b是集合G中的元素,那么(a + b)也是集合G中的元素。 2. 结合律:(a + b) + c = a + (b + c); 3. 存在单位元0,使得a + 0 = 0 + a =a; 4. 每个元素都有逆元,即:对于任意a,存在b,使得a + b = 0. 如果我们增加第5个条件: 5. 交换律: a + b = b + a 那么,称这个群为阿贝尔群。[1] 运算法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。我们规定P+Q=R。(如图)[2]特别的,当P和Q重合时,P+Q=P+P=2P,对于共线的三点,P,Q,R’有P+Q+R’=0∞. 这里的0∞不是实数意义的0,而是指的无穷远点(这里的无穷远点就不细说了,你可以理解为这个点非常遥远,遥远到两条平行线都在这一点相交了。具体介绍可以看参考文献[2])。注意这里的R与R’之间的区别,P+Q=R,R并没有与P,Q共线,是R’与P,Q共线,不要搞错了。 法则详解: 这里的+不是实数中普通的加法,而是从普通加法中抽象出来的加法,他具备普通加法的一些性质,但具体的运算法则显然与普通加法不同。 根据这个法则,可以知道椭圆曲线无穷远点O∞与椭圆曲线上一点P的连线交于P’,过P’作y轴的平行线交于P,所以有无穷远点 O∞+ P = P 。这样,无穷远点 O∞的作用与普通加法中零的作用相当(0+2=2),我们把无穷远点 O∞ 称为零元。同时我们把P’称为P的负元(简称,负P;记作,-P)。(参见下图) 离散型椭圆曲线 上面给出的很好看的椭圆曲线是在实数域上的连续曲线,这个是不能用来加密的,原因我没有细究,但一定是连续曲线上的运算太简单。真正用于加密的椭圆曲线是离散型的。要想有一个离散型的椭圆曲线,先得有一个有限域。 域:在抽象代数中,域(Field)之一种可进行加、减、乘、除运算的代数结构。它是从普通实数的运算中抽像出来的。这一点与阿贝尔群很类似。只不过多了乘法,和与乘法相关的分配率。 域有如下性质[3]: 1.在加法和乘法上封闭,即域里的两个数相加或相乘的结果也在这个域中。 2.加法和乘法符合结合律,交换率,分配率。 3.存在加法单位,也可以叫做零元。即存在元素0,对于有限域内所有的元素a,有a+0=a。 4.存在乘法单位,也可以叫做单位元。即存在元素1,对于有限域内所有的元素a,有1*a=a。 5.存在加法逆元,即对于有限域中所有的元素a,都存在a+(-a)=0. 6.存在乘法逆元,即对于有限域中所有的元素a,都存在a*=0. 在掌握了这些知识后,我们将椭圆曲线离散化。我们给出一个有限域Fp,这个域只有有限个元素。Fp中只有p(p为素数)个元素0,1,2 …… p-2,p-1; Fp 的加法(a+b)法则是 a+b≡c (mod p);它的意思是同余,即(a+b)÷p的余数与c÷p的余数相同。 Fp 的乘法(a×b)法则是 a×b≡c (mod p); Fp 的除法(a÷b)法则是 a/b≡c (mod p);即 a×b∧-1≡c (mod p);(也是一个0到p-1之间的整数,但满足b×b∧-1≡1 (mod p); Fp 的单位元是1,零元是 0(这里的0就不是无穷远点了,而是真正的实数0)。 下面我们就试着把 这条曲线定义在Fp上: 选择两个满足下列条件的小于p(p为素数)的非负整数a、b,且a,b满足 则满足下列方程的所有点(x,y),再加上无穷远点O∞ ,构成一条椭圆曲线。 其中 x,y属于0到p-1间的整数,并将这条椭圆曲线记为Ep(a,b)。图是我手画的,大家凑合看哈。不得不说,p取7时,别看只有10个点,但计算量还是很大的。Fp上的椭圆曲线同样有加法,法则如下: 1. 无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P 2. P(x,y)的负元是 (x,-y),有P+(-P)= O∞ 3. P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系: x3≡-x1-x2(mod p) y3≡k(x1-x3)-y1(mod p) 其中若P=Q 则 k=(3+a)/2y1 若P≠Q,则k=(y2-y1)/(x2-x1) 通过这些法则,就可以进行离散型椭圆曲线的计算。 例:根据我画的图,(1,1)中的点P(2,4),求2P。 解:把点带入公式k=(3*x∧2+a)/2y1 有(3*2∧2+1)/2*4=6(mod 7). (注意,有些小伙伴可能算出13/8,这是不对的,这里是模数算数,就像钟表一样,过了12点又回到1点,所以在模为7的世界里,13=6,8=1). x=6*6-2-2=4(mod 7) y=6*(2-4)-4=2 (mod 7) 所以2P的坐标为(2,4) 那椭圆曲线上有什么难题呢?在模数足够大的情况下,上面这个计算过程的逆运算就足够难。 给出如下等式: K=kG (其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数)不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。 这就是椭圆曲线加密算法采用的难题。我们把点G称为基点(base point),k称为私钥,K称为公钥。 现在我们描述一个利用椭圆曲线进行加密通信的过程[2]: 1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。 2、用户A选择一个私钥k,并生成公钥K=kG。 3、用户A将Ep(a,b)和点K,G传给用户B。 4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。 5、用户B计算点C1=M+rK;C2=rG。 6、用户B将C1、C2传给用户A。 7、用户A接到信息后,计算C1-kC2,结果就是点M。因为 C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M 再对点M进行解码就可以得到明文。 整个过程如下图所示:密码学中,描述一条Fp上的椭圆曲线,常用到六个参量: T=(p,a,b,G,n,h),p 、a 、b 用来确定一条椭圆曲线,G为基点,n为点G的阶,h 是椭圆曲线上所有点的个数m与n相除的整数部分 这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件: 1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求; 2、p≠n×h; 3、pt≠1 (mod n),1≤t<20; 4、4a3+27b2≠0 (mod p); 5、n 为素数; 6、h≤4。200位位的一个数字,那得多大?而且还是素数,所以这种方式是非常安全的。而且再一次交易中,区块被记录下来只有10分钟的时间,也就是说要想解决这个难题必须在10分钟以内。即便有技术能够在10分钟以内破解了现在这个难度的加密算法,比特币社区还可以予以反制,提高破解难度。所以比特币交易很安全,除非自己丢掉密钥,否则不存在被破解可能。 第一次写一个完全陌生的数学领域的知识,也许我有错误的地方,也许有没讲明白的地方,留言讨论吧。总之写完后对比特比系统的安全性表示很放心。参考文献 [1] 椭圆曲线密码学简介 [2] 什么是椭圆曲线加密(ECC) [3] 域(数学)维基百科 区块链研习社源码研读班 高若翔
一、首先要了解加密货币是什么?加密货币 (Cryptocurrency) 是在加密安全对等经济系统中作为交易媒介而形成的一种数码资产产产品。使用加密技术来验证和保护交易并控制其他单位的创建。与我们认知的中心化银行系统不同,大部分的加密货币是以非中心化的形式进行,分布式地散播运行在世界各地的电脑系统网络(也称为节点)。任何拥有互联网的使用者或者是微弱的无线电信号都能轻易的通过点击按钮跟世界各地的人进行交易。与跨国银行转账相比,加密货币的转帐手岁喊掘续费较低,而且交易是不可逆转,与信用卡公司允许的退款交易不一样。加密货币单位的发行和管理架构是根基于编程机算法和加密证据来决定的。这些都被视为一组自定义的规则,也称为协议。用于定义在加密货币世界的运行方式。非中心化机制意味着加密货币不能由单一个体控制,用户之间的交易中亦不能在没有依赖第三方中介情况下进行。然而,亦有部分私营公司和基金管理公司开发不同程度属性的非中心化加密货币技术。根据网络结构和节点分布,有些加密货币要比其他加密货币相对的中心化的。加密货币的核心是建设于一种名为区块链的技术。它由多个加密安全的区块链接成的。每个区块都包含最近的所有交易详细和该区块交易前的记录列表。区块链负责保存所有已确认交易和永久记录,作为非中心化数据分类账。该分类帐渗郑分布在所在网络中的所有节点上,具有防止修改的能力。第一个非中心化的加密货币 - 比特币是由匿名开发者Satoshi Nakamoto于2009年创建的。其主要目的是建立一个利用机算认证和加密安全的独立和非中心化数码支付系统。跟大多数加密货币一样,比特币的供应也是有限制,这意味着在达到最大供应值需求量后系统不会再自动生成比特币。通常在新的加密货币发布时会分报制定好的最大供应量信息。比特币以外,现在有超过一千种不乎核同的加密货币- 也称为山寨币或代币。所具有的属性和用处也不一样。二、工作原理:加密货币依赖于我们称为区块链或者分布式账簿技术。每个钱包地址都有一个称为私钥的唯一密码。该私钥使用密码学技术或者特殊的代码或者暗号,可以为该钱包发出的每一笔交易生成一个独特的签名。这类似于每一个人都有一个独特的指纹或者签字签名,可以用来证明自己的身份。好消息是比特币钱包会自己生成这个私钥,并为您的交易进行加密。更好的消息是没有人能复制您的数字签名。所有的这些在今天看来可能比较难以理解,以致于您想避免使用加密货币。
版权声明:本文标题:比特币的密码原理是什么|比特币的生产原理是什么内容由互联网整理发布,该文观点仅代表作者本人,转载请联系作者并注明出处:http://www.0792jiaju.com/post/2449.html,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发表评论