区块链研习社 区块链行研

泰达币 154 0

今天给大家聊到了区块链研习社,以及区块链行研相关的内容,在此希望可以让网友有所了解,最后记得收藏本站。

比特币源码研读一:椭圆曲线在比特币密码中的加密原理

参加比特币源码研读班后首次写作,看到前辈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(rn)。

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≤t20;

4、4a3+27b2≠0 (mod p);

5、n 为素数;

6、h≤4。

200位位的一个数字,那得多大?而且还是素数,所以这种方式是非常安全的。而且再一次交易中,区块被记录下来只有10分钟的时间,也就是说要想解决这个难题必须在10分钟以内。即便有技术能够在10分钟以内破解了现在这个难度的加密算法,比特币社区还可以予以反制,提高破解难度。所以比特币交易很安全,除非自己丢掉密钥,否则不存在被破解可能。

第一次写一个完全陌生的数学领域的知识,也许我有错误的地方,也许有没讲明白的地方,留言讨论吧。总之写完后对比特比系统的安全性表示很放心。

参考文献

[1] 椭圆曲线密码学简介

[2] 什么是椭圆曲线加密(ECC)

[3] 域(数学)维基百科

区块链研习社源码研读班 高若翔

社群为个体赋能

本文由【区块链研习社】优质内容计划支持,更多关于区块链的深度好文,请点击[区块链研习社]()

想要入门区块链,可以到区块链研习社转一转,想要精进,更要到区块链研习社。

社长Higer提出, 社群为个体赋能 。说一说个人 被赋能 的经历。

我是在2017年年初研习社刚建立时加入的,加入研习社是为了学习区块链知识,也因为那时候没有合适的学习渠道,回想起来,运气好。

一年多下来,发现有了很多进步,进步是积累的结果,但是也有关键节点。

进群不久,Higer开始讲课,那时候的一字一句都是金子,信息量特别大,如饥似渴的吸收。有一天,Higer问有没有人愿意付费进精英群,当时已经有了 付费就是捡便宜 的观念,就付费加入了精英群,一个当初看起来不起眼,日后百倍收益的决定。社长管理社群有方,群里氛围很好,大家互相交流知识和经验。

经过一段时间的线上学习,自己对区块链有了初步的了解,可发现一个问题, 见秋毫之末,不见积薪。 只了解技术,对于行业,币圈链圈等不太懂,或者当初选择了无视。线下交流会上,我见到了许多小伙伴,印象最深的是小天下,他滔滔不绝,说的都是书上的,那些书我也买了,也看了,就是没他那种心得。这让我心头一颤, 莫非知识真的在书里? 我把书读死了。

渐渐的,社群出了一些神级人物,都不知道从哪里冒出来的,开始发挥投资,挖矿,教育,社群的优势,还愿意和大家分享自己的经历,从他们的分享中,我意识到 世界并非我想象 ,有许多我不了解的人存在,在进步,在更快的迭代。

这个人的出现就像小李飞刀的阿飞,一鸣惊人,提出了跨学科学习来理解区块链,量子理论,经济学,金融学,密码学等等吧,总之是什么都懂,这么年轻的一个人,不会是唬人的吧?这是我的第一反应,而且他总说大词,什么涌现,第一性原理,多元宇宙。。。过年时找到李善友的《第一性原理》,看完视频,不禁感叹, 原来剑辰所讲的一个词有这么多的含义,瞬间感受到了Peer Pressure。

有幸加入了数字货币研究小组,这让写作有了方向和中心,我选择的是EOS,持有的也是EOS。成都线下周年庆上,小组合影,见到了奔跑的小麦,河南味儿的才子丁昆朋,帅气的晓东。在定期输出的过程中,和小组成员有了更多的交流,关于写作,关于如何查找资料等等。回看自己几个月的输出,不管多烂,分明的看到些许的进步,颇感欣慰。

我从笨的读书方法中走出来了,从本行业的短视中走出来了,从穷日子的循环中走出来了,研习社还有很多值得说道的地方,需要慢慢体会,我现在都不敢相信自己,都怕了自己,照这样下去,2018年跃迁,2019年财富自由已是看得见的光明。

附上QYB地址,欢迎打赏:

QSymsdGRp4TSoeyAiwMhfAYonWa3XdCgfQ

交易是如何打包进区块的

一直以来有困惑

1.私钥确定是完全不能重复的吗?虽然是256位二进制。

2.节点说的是矿工节点吗,还是所有的节点

3.矿工是如何一边打包交易一边破解随机数的,交易被确认的过程不是在网络中广播的过程吗?

比如,我在打包,你也在打包,咱们俩是打的同一个吗?

还是各自打包各自的,谁破解谜题了谁的区块就得到认可。

或者说咱们面对的是同一个交易池吗?

我不能理解的是交易是如何被打包进区块的,比如有一万笔交易,只有1000笔被确认,但是这一万笔都被广播了,莫非会有一些处于“未确认”的状态?等待着被打包进下一个区块?

在区块链研习社咨询后,思路清晰了许多。

1、私钥并不是完全不重复,只是说在地球上,这种重复的概率几乎为0 ;

私钥是程序生成的256位二进制的随机数。他的大小是10^76这个量级的。宇宙所有原子的量级大概是10^80。重复的概率微乎其微。

2、节点就是矿工,你的电脑也可以作为一个节点,虽然算力很小;

3、交易在一个内存池(队列)里,矿工尝试打包,取出交易,计算难题,计算出来了,于是加上自己的签名,完成确认过程。没有准确的时间先后的问题。

但是我还有疑惑,是不是可以这样理解,在未找到答案之前,有许多区块,谁找到答案,谁的区块就被打到区块链中,进而区块中的交易被确认,并且可以进行下一步的交易。

接着就有了下面的回答:

一个交易可能在不同的节点上的队列里 ,就像你在一班排第三,在三班可能排第九。

然后有一个区块打包会包含这个交易,其他节点处理是会把交易抛弃掉。所以,一个交易只能被包含到一个区块里。

区块提交后,其他节点进行同步,同步该区块,并对区块中的每个交易进行验证,如果发现有交易是本地队列已经有的,就将该交易从自己的队列里剔除。

又有了新的困惑,不是说验证只需要查默克尔树吗,为何要对每笔交易都验证?按理说是需要验证每笔交易,这样才能有效剔除自己队列中的交易。那么,是不是在后期查询中需要默克尔树呢?

下一步的解惑。

数字货币与法币之间的桥梁币问题研究

本文由【区块链研习社】优质内容计划支持,更多关于区块链的深度好文,请点击[区块链研习社]()

看到有关黄世亮写的标题为" 给支付宝一点压力——我们需要一种稳定和法币有效锚定的加密数字货币"写的好,我就信用如下:

第0章 引言

我注册有两个支付宝账号,前天都被马云爸爸限制了收款功能,180天内我身份证下任何一个支付宝账号都无法收款,连抢红包功能都被禁止了。客服给的理由是我这个账号参与了虚拟货币交易。我问客服要来执法依据,客服给了一个支付宝服务协议,叫我看哪一条,不过我没看。

今天看到微信朋友圈,有人微信收款功能被限制30天。

这种情况会严重影响我们的生活,我希望有一个去中心化的第三方法币支付系统来和支付宝微信支付竞争。

第1章 我们没做坏事封我们的卡是不对的

首先要知道的是我们买卖比特币这不是干什么坏事,相反我们是在做伟大的事,我们是在探索人类文明的边疆,是在推动人类往更高级文明进化。银行、支付宝、微信支付这些因为我们参与了虚拟货币的交易就封我们的账号这是不对的,是他们犯了错误。

我们是好人,它们是坏人。支付宝他们在欺负我们好人。需要有人来主持正义。

第2章 我们需要一种什么样的价格稳定的数字货币?

我们先给这种和法币有效实现价格锚定的加密数字货币称为“稳定币”。

稳定币要能有效和法币(如人民币)进行1:1锚定,价格波动不能超过0.5%。

稳定币是一种去中心化的货币,不需要担心服务器会被关掉,不依赖于某个机构的自律。

稳定币的矿工费等损耗越低越好,每次转账不应该超过0.1¥,最好能做到0.01¥。

稳定币可以安全地使用手机钱包。

稳定币的转账要非常快,最好能实现秒到。

购买稳定币要能很容易,要实现和现在购买比特币这样级别的便利性。

稳定币的流动性很高,比如日交易量达到千亿美元。

如果能实现以上目标的话,那我们平时就可以直接将部分工资变成稳定币了,以后买虚拟币什么的都直接使用稳定币就好了。

有没有可能实现呢?让我们先来看下现在的这一类锚定法币的数字货币的解决文案。

第3章 锚定美元的USDT

目前和法币价格稳定的数字货币,被使用的最广泛的就是USDT了。

USDT实现和美元1:1锚定的原理是非常简单的,就是每发行1USDT则将1$存入银行。只要发行USDT的这家公司Tether老老实实做生意,有多少美元抵押就发行多少USDT,那大体上USDT就能稳定价格。

但USDT这种是实现不了“稳定币”的要求的。首先USDT需要信任Tether这种公司,我们时刻要担心Tether会不会倒闭,会不会作恶超发。我们不可能将真正的美元换成USDT长期存着。

USDT和美元的锚定大体上还算是成功的,但还达不到+-0.5%的目标。

USDT的矿工费也是非常高的,因为USDT是寄生在BTC网络上的,实际上就是比特币的矿工费,目前来说是非常高的。

USDT的转账时间太长了。

获得USDT太难了,直接向Tether公司买需要严格的KYC,对于绝大多数人来说是无法做到的。

。。。。

反正USDT虽然是目前最好用的“稳定币”,但离“好用”实在是差的太远了。

第4章 锚定人民币的bitcny

比特股这套系统提供了一套去中心化的实现锚定法币的文案,抵押BTS来发行锚定法币的数字货币。bitcny就是和人民币理论上1:1锚定的数字货币。

bitcny的原理也很简单,任何人都可以拿BTS去比特股钱包里抵押发行bitcny,每发行1bitcny,需要至少抵押价值为1.75¥的BTS,这个1.75倍已经是最低保证金比例。

bitcny的实际运行的结局是锚定失败的,bitcny动不动就要溢价10%。

bitcny的好处就是如果你持有bitcny,只要比特股区块链不出问题,你就不用担心你手里的bitcny会有多大的损失,基本上是可以保证你想换真正的人民币时是可以保本的。

bitcny的缺点也很明显,锚定失败就是最大的缺点。其它的都免谈了,最重要的目标你都实现不了。

第5章 bitcny的改进型

bitcny锚定失败的最大根源在于BTS本身的市值太小,流通量小,价格波动大。BTS在数字货币市场份额排名中要排到30名以后去了,目前在38名,实在是太落后了。本身比特股的锚定设计其实也不科学,属于经济学没学好的人设计出来的,只要设计者稍为思考下房产抵押贷的实际运作方式就能够有所改善。

如果将bitcny的抵押品改成BTC,那就会好很多。目前BTC是数字货币里波动性比较小的,至少下跌风险往往是最小的。

如果bitcny的抵押品还可以扩大到其他币,如ETH、BCH这些市值排在前面的币,这样可以让任何持有BTC、ETH、BCH的人都可以去抵押发行bitcny这一类锚定法币的数字货币,那发行量就可以大大提升,流动性也可以大大改善。

目前在技术上实现上述改进应该是可以做到的,最重要的技术是去中心化的交易所、和原子跨链技术。只需要在比特股系统的基础上加上能读懂BTC、ETH、BCH这些抵押币的交易的设计,并能实现原子跨链交易,我觉得就可以实现。

闪电网络这种跨链技术如果成熟,我觉得就离实现这种多币种抵押发行bitcny这一类锚定货币就不远了。

侧链技术也可以做到使用BTC来充值发行bitcny的抵押品,RSK侧链就是一套智能合约平台,可以非常方便实现BTS的去中心化交易所和抵押资产发bitcny的功能。

另外BCH目前在热议的染色币也是可以实现类似的想象,不过目前还有待证实。

不过这只是我在逻辑上的思考,或者上理论上以上技术是可以实现bitcny的更换成BTC等抵押品的,虽然我不懂如何实现这种技术,这需要产品经理。

第6章 使用期货来实现稳定币

在知乎上有个叫许哲的人发表了这一观点。我觉得写的比我能写出来的好多了,直接引用如下:

我先设定一个智能合约,A和B 同时充10个 BTC 到智能合约账户里,然后对赌BTC的价格。这个智能合约的预言机读取的是CME比特币期货的追踪指数(一个代表主流交易所比特币报价的指数,也是CME比特币期货的交割价格)。

(a)比如充入BTC的时候,BTC价值$10000,到期后BTC的价格上涨一倍了到$20000,则A获得5个BTC,而B获得15个BTC。对于A来说虽然BTC少一了一半,但依然是价值$10000的数字加密货币资产。

(b)如果BTC的价格跌了一半,跌到$5000,则A获得10个BTC,B 失去所有BTC,A此时拥有20个BTC。这样BTC价格是下跌了,A的数字货币资产价值依然是$10000。

无论BTC的价格怎么变化,A拥有的BTC价值都恒定$10000。把A的权益做成一个token,允许区块链上交易,我姑且叫 StableCoin 吧。

链接:

第7章 结束语

如果能实现有效的和法币锚定的数字货币,那很多区块链项目就不需要去发代币割韭菜了。

关于区块链研习社和区块链行研的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签: #区块链研习社

  • 评论列表

留言评论