现在很多基于区块链技术的数字货币系统,比如:比特币和以太坊,它们都使用了椭圆曲线密码学(ECC, Elliptic Curve Cryptography)来保证货币的安全性。

ECC 是一种公开密钥密码学,又称为非对称密码学。在这种密码学中,需要产生一对密钥。其中一个密钥称为私钥,需要保密;另一个密钥称为公钥,是可以公开让别人知道的。

私钥和公钥在数学上的关系是不可逆的,也就是通过某个数学函数,我们可以从私钥计算出公钥,但是不能从公钥反向推导出私钥(或者说从计算上是不可行的)。

椭圆曲线加密算法对应的数学函数是椭圆曲线乘法,而另一种广泛使用的非对称加密算法 RSA (由三个发明人姓氏的开头字母组成)对应的数学函数是极大整数的因式分解。

与对称密码学使用相同的密钥进行加解密不同,非对称密码学有一个很有用的特性:如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

一听说椭圆曲线,很多人会凭直觉认为这条数学曲线像个椭圆,其实不然。椭圆曲线因为用二元三次方程 y2 = x3 + ax + b 来表示,类似椭圆周长计算方程  而得名。以下是比特币的椭圆曲线图,是不是一点也不像椭圆:

椭圆曲线上点的加法定义:任意取椭圆曲线上两点 A、C (若 A、C 两点重合,则做 A 点的切线)做直线交于椭圆曲线的另一点 D',过 D'做 y 轴的平行线交于 D。在这里我们规定 A+C=D。

k 个相同的点 P 相加,我们记作 kP。如下图:P+P+P = 2P+P = 3P。

如果我们定义 K=kG, k 为整数,G 为椭圆曲线上的一个点,该等式就是表示 k 个 G 点相加或 k 乘以G 得到的结果为点 K,K 也为椭圆曲线上的一个点。

我们可以用这个等式中的 k 作为私钥,而结果点 K 作为公钥。G 为该椭圆曲线的基点,和参数 a,b 都是公开的。

已知整数 k 和基点 G,根据椭圆曲线加法法则,推算出点 K 是非常容易的,因为存在快速算法可以将计算复杂度降低到O(logk)

私钥推导出公钥的过程是不可逆的,即现在数学上还没有有效的方法可以从基点 G 和点 K 推算出整数 k。如果使用遍历法来寻找整数 k,其计算复杂度为O(k)。在实际使用时,整数 k 会取一个非常大的值。

比如: k 为一个78位的十进制数,由私钥推算出公钥的计算复杂度为 O(78),用遍历法从公钥找出私钥的计算复杂度为 O(1078),而宇宙中已知的原子总数大概为 1080,所以采用暴力破解法破解私钥是根本不可行的。

为了让椭圆曲线更形象易理解,我们上面画的曲线都是连续的,实际用于加密的曲线都是有限域上定义的离散曲线。

随着椭圆曲线参数 a、 b,基点 G 的不同,椭圆曲线的加密性能也不一样。为了获得更高的安全性,对这些参数也有一些特定的要求。

我们会给一些常用的使用特定参数的椭圆曲线取一个名字。比如:美国国家标准与技术研究院(NIST)和美国国家安全局(NSA)推荐过的 secp256r1、secp521r1 等椭圆曲线(有些开源社区怀疑这些曲线中参数有可能被精心选取,导致曲线加密性能弱化),中国国家密码局认定的 SM2 国产密码算法。

比特币和以太坊使用的椭圆曲线是 secp256k1。该曲线的参数非常简单(人们相信不是为了设计一条弱曲线而被精心构造的):

( secp256k1 的 a、b 以及基点 G)

与传统的 RSA 算法相比,严格选定参数的 ECC 有更强的安全性,不易被攻击。

1)破解相同位数密钥所需能量:

有科学家通过计算攻破一个密码学算法需要多少能量并把它与水沸腾需要多少能量对比来衡量一个加密算法的安全性。

经过他的分析,破解一个228位的 RSA 密钥需要的能量少于煮沸一汤勺水的能量。而破解一个228位的椭圆曲线密钥需要足够煮沸地球上所有水的能量。

RSA 要达到一个安全的水平,需要一个至少2380位的密钥。此外 RSA 算法还有一个缺点就是随着密钥长度的增加,其安全性的增益是减少的。这意味着我们无法通过不断增加密钥长度来获得更高的安全性。

2)性能对比:

另一方面,使用椭圆曲线签名算法(ECDSA)做签名的性能也比 RSA 签名算法高很多。根据某些研究结果,在获得相同的安全性时,前者要比后者快20多倍。

椭圆曲线加密算法能够以更短的密钥获取与其他加密算法相同的安全性及更快的运算速度,所以 ECC 正在快速成为网络隐私和安全的首选解决方案。比特币等数字货币系统也纷纷使用 ECC 作为其安全性的基石。

下面我们简单说说椭圆曲线密码学在比特币中的用法。

另:在生成私钥 k 的过程中,确保 k 是真正随机生成的非常重要。曾经有些厂商的随机数生成算法因为有漏洞或者故意留有后门,造成了巨大的安全隐患。

http://toutiao.manqian.cn/wz_aJj096BV3Mx.html

ECC 构筑安全可靠的区块链的更多相关文章

  1. 深入解读EOS源代码之——区块链内核

    EOS进入大众视野并且受到热议已经有一段时间了,各种热捧和争议过后,是时候让我们静下来搞清楚EOS到底是一个什么样的产品.本文从技术角度深入的分析EOS底层设计,从源代码入手,一层层揭开EOS区块链底 ...

  2. [区块链] 密码学——椭圆曲线密码算法(ECC)

    今天在学椭圆曲线密码(Elliptic Curve Cryptography,ECC)算法,自己手里缺少介绍该算法的专业书籍,故在网上查了很多博文与书籍,但是大多数博客写的真的是...你懂的...真不 ...

  3. Factom(公证通)--基于区块链的存证系统

    Factom这个Solution在2014年的时候就已经推出了,现在已经2018年了,我才来写这一篇分析文章可能有些迟了,但是它是十分具有参考价值的.因为现阶段来开区块链虽然炒得火热--养猫.养狗.草 ...

  4. 非对称加密技术中,iFace [ 爱妃链 ]人脸密钥技术排名第三,将弥补区块链现有不足

    最近,区块链领域,出现了一个比较热门技术的讨论,人脸密钥技术,可能大家还对这个名词感到很陌生,但是熟悉加密技术的技术大牛可能一听就能够明白大体的意思了,但是也正是这一熟悉而陌生的技术名词,掀起了区块链 ...

  5. 一、Bitcoin比特币与BlockChain区块链技术

    一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...

  6. 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识

    给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...

  7. 001-Bitcoin比特币与BlockChain区块链技术

    一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...

  8. 醒醒吧!互联网的真正未来不是AI,更不是VR,AR,而是区块链

    这些力量并非命运,而是轨迹.他们提供的并不是我们将去向何方的预测,而是告诉我们,在不远的将来,我们会向那个方向前行,必然而然. ---凯文•凯利 文字与货币 人类在演化过程中,凭借智慧创造了无数事物, ...

  9. HyperLedger Fabric Introduction——区块链超级账本介绍

    介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...

随机推荐

  1. 利用Clojure统计代码文件数量和代码行数

    ;; 引入clojure的io包 (use '[clojure.java.io]) ;; 遍历目录将所有符合要求的文件做为列表返回 (defn walk [dirpath pattern] (doal ...

  2. 【CV论文阅读】action recognition by dense trajectories

    密集轨迹的方法是通过在视频帧上密集地采样像素点并且在追踪,从而构造视频的局部描述子,最后对视频进行分类的方法依然是传统的SVM等方法. 生成密集轨迹: (1)从8个不同的空间尺度中采样,它们的尺度差因 ...

  3. 开源软件Review Board

    开源软件, Review Board 代码审查的. https://www.reviewboard.org/

  4. PowerDesigner12.5和15.1的破解

    不要相信网上盛传的powerdesigner的 license key注冊码,试了好多都无论用,不废话了,直接献上PowerDesigner12.5.PowerDesigner15.1的破解方法. P ...

  5. JS执行环境栈及事件循环机制—简洁明了的讲解

    JavaScript解释器在浏览器中是单线程的,这意味着浏览器在同一时间内只执行一个事件,对于其他的事件我们把它们排队在一个称为 执行栈(调用栈) 的地方.下表是一个单线程栈的抽象视图: 我们已经知道 ...

  6. C#之选择排序

    算法描述 1.假定未排序序列中第一位为数组最小值,通过与后面的数值进行比较,找到未排序序列中最小值,与未排序序列第一位交换位置: 2.重复步骤一,对剩余未排序序列进行比较找出最小值,与未排序序列中第一 ...

  7. Android利用Volley异步载入数据完整具体演示样例(二)

    MainActivity例如以下: package cc.y; import android.app.Activity; import android.content.Context; import ...

  8. Ubuntu下安装C/C++开发环境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C语言开发环境】

    (1)第一步安装Eclipse,有两种方法,使用软件市场搜索就可以得到,安装就可以 另外一种是使用终端安装,命令例如以下: sudo su进入root模式 输入password 然后 输入:sudo ...

  9. 修改this指向(bind、call 和 apply)

    一.bind 首先: var alertWrite = document.write; alertWrite('who am I?'); 这两行代码的运行结果是什么呢?不要急着回答,看完下面的内容再回 ...

  10. mysql20170407代码实现

    今天用了一会儿sqlyog,感觉还是会让人懒惰,所以选择了ms-dos环境,感觉不错,原生态,敲着很爽; | test01 | | tree | | world | +---------------- ...