BTC 比特币 内涵
1、区块链和比特币的概念、内涵、本质等。
2、区块链相关法律法规、规定规划、通知公告等。
第一,笔者眼中的区块链:
如同它名字一般,是指一个区域连接成一块,最终形成很多区块的拼接,而每一个区块都有一个节点可以承载不同的事物,比如说你买一箱苹果在这个节点上销售者给你卖100块,你就可以通过这个链条知道上一个种苹果的农户是50块卖给销售者的,信息公开并且透明化,可以揭开交易、服务、沟通过程中的层层面纱;个人认为区块链不是去中心化,而是所有中心化的联合,因为每一个节点就是一个小中心,将所有中心连接起来形成一整个区块链数据库,而不是传统的将一个事物孤立为一点从而发散,是需要每一个节点配合联动,是一种思想模型,一种载体建立在分布式核算和存储上,只是不存在中心化的硬件或管理机构,任意节点的权利和义务均等,一个系统中的数据块由整个系统中具有维护功能的节点来共同维护。
百度百科和360百科的解释,和根据我国工业和信息化部《中国区块链技术和应用发展白皮书(2016)》的定义:其是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
2018年3月31日,《区块链技术原理与开发实战》正式引入高校讲堂,首次课程在西安电子 科技 大学南校区开讲。2018年4月,一群来自牛津大学的学者宣布创办世界上第一所区块链大学——伍尔夫大学。5月29日,百度百科上线区块链新功能,以保证词条编辑公正透明。
...
第二.笔者眼中的比特币:
基于区块链技术应用发展起来的数字货币,非法定货币,向法律规则发起了挑战,引发诸多 社会 和财产风险。需要我们慎重评估区块链技术应用可能存在的法律问题,思考对策。监管问题...
...
...
狭义区块链,是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成数据层封装了底层数据区块以及相关的数据加密和时间戳等技术;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约是区块链可编程特性的基础(区块链技术的广泛应用,离不开智能合约,所谓的智能合约就是以数字编码的形式定义承诺。交易的双方无须彼此信任,一切交易都由代码强制执行。但智能合约的形式及其内容的效力,还没有得到法律和司法的正式认可,其作为数字编码的形式体现出来的合同文本,尚无法确知,是否可以构成生效合同的要件,是否可以符合司法拟采信证据的真实性、合法性、有效性。);应用层则封装了区块链的各种应用场景和案例。
区块链已经从区块链1.0——数字货币到2.0——数字资产与智能合约,发展到现在区块链3.0——DAO、DAC(区块链自洽组织、区块链自洽公司)-->区块链大 社会 (科学,医疗,教育,区块链+AI)。从比特币等加密货币到追踪中国放养肉鸡。专门跟加密货币相关的专利申请——不包括在区块链专利类别中——在2017年增长了16%,达到602项。中国2017年申请了225项区块链项专利,而2016年为59项,
其次是美国(去年为91项,2016年为21项)。其体系结构的核心优势:任何节点都可以创建交易,在经过一段时间的确认之后,就可以合理地确认该交易是否为有效,区块链可有效地防止双方问题的发生。对于试图重写或者修改交易记录而言,它的成本是非常高的。
区块链实现了两种记录:交易以及区块。交易是被存储在区块链上的实际数据,而区块则是记录确认某些交易是在何时,以及以何种顺序成为区块链数据库的一部分。交易是由参与者在正常过程中使用系统所创建的(以加密数字货币为例,一笔交易是由b将代币发送给a所创建的),而区块则是由我们称之为矿工的单位负责创建。
...
(部分)区块链的特点:
1. 去中心化:使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。
2. 开放性:系统开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。(私有物被加密,公有物透明)
3. 自治性:区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预不起作用。
4. 信息不可篡改:一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。
5. 匿名性:由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方自己产生信任,对信用的累积非常有帮助。
综上笔者认可的观点是区块链是一种系统,是一种算法技术的创新应用,只要不涉及伦理问题和道德风险,本不存在国家监管与法律规制问题。
...
参考文献
1. 郑惠敏:《区块链法律:部分国家对虚拟货币、数字代币的性质认定》大风号自媒体。
2. 曹磊:《区块链,金融的另一种可能》.首席财务官.2015年24期。
3. 王文嫣:《安全透明的公共账本——区块链》.上海证券报·中国证券网.2016年2月26日。
4. 蒋润祥;魏长江:《区块链的应用进展与价值探讨》.金融视界.2016年Z2期。
5. “区块链”到底是什么?和普通人有什么关系?.网易 科技 .2016年8月5日。
6. 刘晋豫:《 香港证监会发布公告提醒数字货币风险 称其会在必要时采取执法行动》凤凰网 财经 金色 财经 .2018年2月9日。
7. 苏德栋:试论区块链法律规制与风险.中华全国律师协会.
为什么比特币的私钥无法被攻破?
关于:为什么比特币的私钥无法被破解?
以下为正文:
破解比特币私钥,实际上就是要在 1 到 2??? 之间找到一个数,这个数对应的钱包里面有比特币。
2??? 约等于 10??,这是个巨大的数字,对比的话,人类可观测宇宙的基本粒子也就是在 10?? 这个数量级上。
人类现有的超级计算机,前 500 强加起来的算力,大约是每秒进行 10?? 次浮点运算,有兴趣的人可以算一算,就算每次浮点运算能完成一次破解比特币的尝试,那完成破解需要多少时间。简单说,一年约有 3.1536 × 10? 秒,按上文的假设,破解一个比特币需要的时间在 10?? 年这个数量级上。
实际上要花的时间比这多的多,比特币网络计算的是哈希值,现在比特币全网每秒可以做约 1.51 × 10?? 次哈希运算,这差不多相当于每秒做 1.91 × 10?? 次浮点运算,这远超过现有的超级计算机的算力(换句话说就是超级计算机没法对比特币网络进行攻击,能力差距太大,这和比特币网络解决的是一个专门问题,超级计算机要解决的是各种不同问题有关系)。
无论如何,我觉得超过 10? 年(也就是一万年)的时间对我们的意义都不大了,甚至超过 10? 年(也就是一百年)的时间对我们都没有多大意义。想想,要花那么多年,只是破解一个钱包的私钥,还不知道这钱包里有多少比特币,这事情实在没有做的意义,就算是知道某个钱包里有很多比特币,投入产出也不可能合算。
这些年间,被盗的比特币都是从人类这边搞的,都是什么从持币人手里盗取了私钥之类的事情,直接攻击比特币网络尝试破解私钥的,闻所未闻,未来估计也不可能有了。
有些人担心量子计算机,首先,量子计算机现在还是早期,解决的都是特定问题,没有针对处理比特币网络的问题,其次,量子计算机的算力现在还是比较低的,远远威胁不到比特币网络,第三,就算量子计算机将来发展起来了,比特币网络也会一并演进的,到时肯定会有针对性的升级。总之,量子计算机并不是比特币的一个威胁。
以下为该文的参考文献;
How Hard Is It to Brute Force a Bitcoin Private Key?
超级计算机 500 强
https://en.wikipedia.org/wiki/TOP500
PetaFLOPS and how it relates to Bitcoin
https://bitcointalk.org/index.php?topic=50720.0
Bitcoin Total Hash Rate(比特币全网算力)
https://www.blockquanchain.com/charts/hash-rate
Observable universe(可观测宇宙)
https://en.wikipedia.org/wiki/Observable_universe
POA(Proof of Activity)区块链共识算法
POA(Proof of Activity)算法是一个区块链的共识算法,基本原理是结合POW(Proof of work)和POS(Proof of stake)算法的特点进行工作,POW算法和POS算法的具体内容可以参考:
POW算法 :
POS算法 : https://blog.csdn.net/wgwgnihao/article/details/80635162
POA算法相比于其他算法可以改进网络拓扑,维持在线节点比例,需求更少的交易费同时减少共识算法过程中的能量损耗。
POA算法需求的网络中同样包含两类节点,矿工和普通参与者,其中普通参与者不一定一直保持在线。POA算法首先由矿工构造区块头,由块头选出N个币,这N个币的所有者参与后续的校验和生成块的过程。
从这里可以看到POA算法不仅与算力有关,后续的N个参与者的选举则完全由参与者在网络中所拥有的币的总数量决定。拥有越多币的参与者越有机会被选为N个后续的参与者。而后续N个参与者参与的必要条件是这N个参与者必须在线,这也是POA命名的由来,POA算法的维护取决于网络中的活跃节点(Active)。
POA算法的一个理想的基本流程是,类似于POW协议,矿工构造出一个符合难度要求的块头,通过矿工得到的块头计算衍生出N个币的编号,从区块链中追溯可以得到这几个币目前所述的参与者。矿工将这个块头发送给这N个参与者,其中前N-1个参与者对这个块进行校验和签名,最后第N个参与者校验并将交易加入到该块中,将这个区块发布出去,即完成一个区块的出块。
一个理想过程如下图所示:
在实际运行中,无法保证网络上所有参与者都在线,而不在线的参与者则无法进行校验和签名,这个无法被校验和签名的块头则会被废弃。
即在实际运行中,应该是一个矿工构造出块头后广播给各个参与者签名,同时继续重新构造新的块头,以免上一个块头衍生的N个参与者存在有某一个没有在线,而导致块头被废弃。
因此,在这种情况下,一个块是否被确认不仅与矿工的计算能力有关同时也与网络上的在线比例有关。
与纯POW相比,在与比特币(POW)同样10分钟出一个块的情况下,POA由于会有参与者不在线而产生的损耗,因此,10分钟内矿工可以构造的块的数量会更多,即块头的难度限制会降低,那么矿工在挖矿过程中会造成的能量损耗也会降低。
与纯POS相比,可以看到POA的出块流程并不会将构造区块过程中的相关信息上链,可以明显减少区块链上用于维护协议产生的冗余信息的量。
本节对上诉协议中一些参数设置进行分析
在矿工构造出块头后对块头进行校验和区块构造的N个参与者的数量选定比较类似于比特币中每一个块的出块时间的选取。比特币中选择了10分钟作为每一个块的期望出块时间并通过动态调节难度来适应。
这里N的取值同样可以选择选定值或者动态调节。动态调节需要更加复杂的协议内容,同时可能会带来区块链的数据膨胀,而复杂的协议也增加了攻击者攻击的可能性。另外暂时没有办法证明动态调节可以带来什么好处。静态调节在后续的分析(4 安全分析)中可以得到N=3的取值是比较合适的。
从上面的描述可以看到,构造新的区块的除了矿工还有从块头中衍生出来的N个币所有者。在构造出一个新的区块后,这些参与者同样应该收到一定的激励,以维持参与者保持在线状态。
矿工与参与者之间的非配比例与参与者的在线状态相关。给予参与者的激励与参与者保持在线状态的热情密切相关,越多参与者保持在线状态,能更好地维持网络的稳定。因此,可以在网络上在线参与者不够多的时候,提高参与者得到的激励分成比例,从而激发更多的参与者上线。
如何确定当前参与者的在线情况呢?可以最后第N个参与者构造区块时,将构造出来但是被废弃的块头加入到区块中,如果被丢弃的块头数量过多,说明在线人数过低,应当调节分成比例。
同时最后第N个参与者与其他参与者的分成同样需要考虑,第N个参与者需要将交易加入区块中,即需要维护UTXO池,同时第N个参与者还需要将被丢弃的块头加入新构建的区块中。
为了激励其将废弃区块头加入新构建的区块中,可以按照加入的区块头,适当增加一点小的激励。虽然加入更多的区块头,可以在下一轮的时候增加分成的比例,应当足够激励参与者往区块中加入未使用的块头了(这里参与者不可能为了增加分成而更多地加入区块头,每一个区块头都意味着一位矿工的工作量)。
一个参与者如果没有维护UTXO池则无法构造区块,但是可以参与前N-1个的签名,因此为了激励参与者维护UTXO池,作为最后一个构造区块的参与者,必须给予更多的激励,比如是其他参与者的两倍。
从3.2的描述中可以知道一个用户必须在线且维护UTXO池才可能尽可能地获得利益。这种机制势必会导致一些用户将自己的账户托管给一个中心化的机构。这个机构一直保持在线,并为用户维护其账户,在被选为构造区块的参与者时参与区块的构建并获取利益。最后该机构将收益按照某种形式进行分成。
上面说到参与者必须用自己的密钥进行签名,而托管给某个机构后,这个机构在可以用这个密钥签名构造区块的同时,也有可能使用这个密钥消费用户的财产。这里可以采用一种有限花销的密钥,这个密钥有两个功能,一个是将账户中的部分财产消费出去,另一个是将所有财产转移到一个指定账户。在托管的时候可以使用这个密钥,在被通知部分财产被花费后可以立即将所有财产转移到自己的另一个账户下,以保证财产的安全。
从上面的分析可以看到,POA的安全性与攻击者所拥有的算力和攻击者所拥有的股权有关。假设攻击者拥有的在线股权占比为 ,则攻击者的算力需要达到其他所有算力的 倍才能达成分叉。假设攻击者股权总占比为 ,网络中诚实用户的在线比例为 ,则攻击者的算力需要达到其他所有算力的 倍才能达成攻击。
攻击的分析表格如下:
从上文的分析可以看到,POA算法相比于其他算法可以改进网络拓扑,维持在线节点比例,需求更少的交易费同时减少共识算法过程中的能量损耗。同时,PoA协议的攻击成本要高于比特币的纯PoW协议。
参考文献:Proof of Activity: Extending Bitcoin’s Proof of Work via Proof of Stake
比特币与我们的世界(下)
文接《比特币与我们的世界(上)》
理想与现实
随着比特币的不断发展,比特币的技术联盟也在逐步完善整个体系的构建。轻量化钱包,正是他们的一种改良试验。轻量化钱包本身并不会保存全部账本,而是仅仅保留与自己相关的交易,这样就极大减轻了自己的体量,非洲酋长也就不再需要记录我去超市买羽绒服这件事了~。
埃森哲发明的一种采用“变色龙散列”(Chameleon Hash)密钥的可编辑区块链技术也在试图解决我们少年时留下的放荡不羁的交易记录。
各个国家都在陆续出台监管沙盒相关政策(图片来自网络)
世界各国也在积极探讨建立相关的监管体系。美国已对比特币等采用区块链技术的数字证券、数字基金建立了明确的市场准入机制,并纳入到监管和反欺诈的相关法规中,英国、澳大利亚、新加坡的“监管沙盒”制度,也开始尝试对这种新兴金融应用模式建立“监管试验区”,这里面既包含了汇丰银行这样的传统金融机构,也包含了BitX(主营区块链跨境支付)这类初创企业。
但是,无论是轻量化钱包,还是世界各国正在建立的监管体系,似乎都违背了比特币支持者们的初衷——“去中心化”。一个放弃了自己记账的钱包就需要另一个记账的钱包来保证它交易的真实和准确,多个轻量化钱包必须至少依赖于一个非轻量化钱包,这实际上是通过技术手段在一个理论上没有“中心”的体系里再造“中心”。而监管和相应的立法准入制度,则将比特币当做普通货币或者商品,纳入到各个国家或地区的政府管辖之内。
这不禁让人怀疑,抛开比特币交易体系在未来可能遇到的种种问题,比特币交易体系本身所坚持的理想——“去中心化”的概念,真的可以实现吗?
首先,让我们来思考一个经常被大家忽略的问题,互联网是没有中心的吗?
互联网的物质基础是处理数据的各种应用服务器和数据库、交换信息的网络设备和负责传输信息的网线、光纤。以我们国家互联网用户为例,他们所有的互联网信息传递都要经过网络服务提供商的服务器,再通过电信运营商的网络才能实现互相传递。说得更准确一些,便是都要通过三大运营商主节点机房中的几条光纤才能实现信息的传递。对于一个省来说,三大运营商设立的省级主机房就是信息处理的中心。而我们同美国的网络连接,依靠的也仅仅是海底有数的几条光缆,以及太空中的几颗通讯卫星。
2009年中国互联网主干网拓扑图(图片来自网络)
互联网并不是一团模糊的云,而是由层层汇聚的网络节点构筑起来的层次分明的星型结构。当其中任何一个节点丧失功能,那么在这个节点下面的各个叶子节点的比特币钱包便会同网络断开。而这些网络基础设施是不可能脱离政府监管的。从这一方面来说,完全的“去中心化”在现阶段是不可能实现的。
第二,抛开互联网的物质基础,在比特币的体系里实现了“去中心化”吗?
在比特币的世界中,新的比特币是由所谓的“挖矿”产生的。其理论简单来说就是要比网络上的其他人更快造出账本上的新账页(新区块),而每一个新账页的生成,都会伴随着一定数量的比特币奖励。
内蒙某比特币矿场(图片来自网络)
正所谓有人的地方就有江湖,因为只要比别人更快就能得到更多的比特币,于是一个又一个庞大的算力中心(比特币矿场或矿池)逐渐成型。在各个偏远省份的农村、类似四川葛洲坝一样的大型发电站附近,因为电费便宜已经形成了算力惊人的比特币矿池。而世界前十五大比特币开采矿池控制着比特币80%的产出,如果比特币成为世界货币,那么这些矿池就是今天各个国家的央行。
在一个“去中心化”的体系中却演变出了数十个超级算力中心,这不能不说是现实同理想开的最讽刺的玩笑。即使比特币或与其拥有类似结构的虚拟货币成为全球货币,它的发行和流通依然掌握在拥有庞大算力资源的国家和政府手中,而基于当今世界的比特币算力分布来判断,这种架构的虚拟货币如果成为全球统一货币,那么它的中心化现象恐怕要比现在的货币体系更加严重。
第三,一个“去中心化”的虚拟货币,对于中国真的好吗?
美元通过美国的对外战争实现了同石油的绑定,成为世界结算货币。人民币同美元在各类国际金融市场的“摩擦”每时每刻都在进行。虽然美国政府正在逐步失去对互联网的控制力,但美国依然掌握着世界上大多数互联网数据中心,也掌握着大量如永恒之蓝一样的网络战武器,只要还有国家这个概念存在,货币霸权在比特币的世界里就不会消失。
美军网络作战部队(图片来自网络)
而在比特币的世界里一旦爆发“货币战争”,我们的国内金融市场将会失去现在的一切保护措施,而我们面对的,将是一个掌握着我们同世界大多数国家信息交换通道的对手。在这里笔者开了一个小脑洞,一旦美国和北约切断了我们同世界大多数国家的网络连接,并开始伪造大量的虚假交易发布到互联网上,那么基于比特币的51%客户端即可确认交易的共识机制,即使我们再次恢复同互联网的连接,我们是否也要承受不可逆的虚假交易损失。何况我们的计算机操作系统、主板上的核心处理器,亦或是网络设备的主要芯片它们的大部分均来自美国厂商。
目前比特币还处于初步发展阶段,大规模应用对系统资源和硬件投入要求很高,运营成本也不经济,对隐私保护的有效性也不确定。若在金融领域广泛应用,将对现在的商业模式、支付清算体系以及基础设施(如网络设备、服务器等)产生根本性影响,甚至会彻底颠覆当前金融市场的稳定。
可以说,目前的比特币距离真正的虚拟货币路还很遥远。但不可否认,它构建了一个世界上到目前为止,最完备、最安全、也最具实用性的虚拟货币体系。以它为代表的区块链技术,正得到全世界越来越多的关注。也许它并不能发展成最终的虚拟货币,但它却为我们展示了货币发展的新方向、社会和经济的全新运行方式。随着对比特币体系或其他采用区块链技术的虚拟货币体系的不断发展和探索,相信第一代真正的虚拟货币在不远的未来就会诞生,而正是比特币,让我们看到了这样的未来。
未来属于虚拟货币(图片来自网络)
----------------------------------
参考文献:
1长铗等,区块链:从数字货币到信用社会,中信出版集团,2016年
2工信部,中国区块链技术和应用发展白皮书,中国区块链技术和产业发展论坛,2016年
3刘瑜恒等,证券区块链的应用探索、问题挑战与监管对策,金融监管研究,2017年4月
4李文红等,金融科技发展与监管:一个监管者的视角,金融监管研究,2017年3月
5林睿嘉等,区块链技术适应不完美的世界,埃森哲研究报告,2016年
6怒马哥,比特币背后的密码学原理,http://www.jianshu.com/p/225ff9439132
7申屠青春,比特币块链和挖矿原理,http://www.8btc.com/bitcoin_blockquan_chain
8小蒙牛,揭秘世界上最大的比特币矿场之一,http://www.8btc.com/inside-one-worlds-largest-bitcoin-mines
比特币源码研读一:椭圆曲线在比特币密码中的加密原理
参加比特币源码研读班后首次写作,看到前辈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
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
4、4a3+27b2≠0 (mod p);
5、n 为素数;
6、h≤4。
200位位的一个数字,那得多大?而且还是素数,所以这种方式是非常安全的。而且再一次交易中,区块被记录下来只有10分钟的时间,也就是说要想解决这个难题必须在10分钟以内。即便有技术能够在10分钟以内破解了现在这个难度的加密算法,比特币社区还可以予以反制,提高破解难度。所以比特币交易很安全,除非自己丢掉密钥,否则不存在被破解可能。
第一次写一个完全陌生的数学领域的知识,也许我有错误的地方,也许有没讲明白的地方,留言讨论吧。总之写完后对比特比系统的安全性表示很放心。
参考文献
[1] 椭圆曲线密码学简介
[2] 什么是椭圆曲线加密(ECC)
[3] 域(数学)维基百科
区块链研习社源码研读班 高若翔