区块链中的密码学(三)-椭圆曲线加密算法分析

在目前密码学的非对称加密算法中,RSA算法依然是一种主流,但是随着比特币中对于一种之前不太流行的算法:椭圆加密算法(ECC)的成功应用后,这种算法得到了很大的关注和普及。有一种说法是中本聪不信任RSA算法,认为美国人在其中留有后门,而据斯诺登的爆料也确实如此。相较RSA,ECC不仅在某种程度上杜绝所谓留有后门的情况,而且加密性能/安全性都有提高。本文就带大家一窥ECC算法的天地。

鉴于ECC算法对数学知识要求比较高,不像RSA依赖于中学数学的水平,ECC用到了许多《近世代数基础》,《初等数论》的知识,本文将从一个密码学爱好者并区块链的角度,讲述一下ECC在区块链中的应用。

什么是椭圆曲线加密(ECC)?

椭圆曲线可以简单的理解为公式:

这是一个数学公式,它的理论基础要从平行线谈起。数学上人们认为的平行线永不相交,这在某种程度上是无法验证的,因为没有一个无限远处的概念,假设平行线在无限远处相交,这样的好处是所有的直接都有且只有一个焦点,那么基于这个事实,我们中学学过的笛卡尔平面直角坐标系可以映射出另外一个平面坐标系:

假设平面直角坐标系中有点A(x,y),我们定义 X= x/z,Y = y/z,Z=z;那么联立方程:aX+bY+c1Z =0; aX+bY+c2Z =0 可以计算出z=0;所以我们新的坐标系中的点可以表示为:(X:Y:0);这是椭圆曲线建立的坐标系基础。

下面在看椭圆曲线的定义:数学把满足Weierstrass方程的曲线称为椭圆曲线

这个方程的曲线生成的图像有很多,基于文章的目的,这里指介绍形如:y2=x3+ax+b的公式,因为这种情况下的椭圆曲线才适合加密,例如y^2=x^3-10x+12的曲线如下:

感兴趣的读者可以去https://www.desmos.com/calculator/0mnue7w8lk 模拟一下,通过修改a,b的值观看曲线变化。需要注意的是并不是所有椭圆曲线都是关于X轴对称的。读者可以改变多改变a1的值来发现。

数学家在这个曲线上定义了一种椭圆曲线的加法,在上面定义的公式曲线图中:

显然这并不是传统的数学上的加法,运算法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R,过R做y轴的平行线交于R’。我们规定P+Q=R’。所以很容易理解nP的值,就是P经过n次加法(对P做切线,取得另一个交点的关于X轴的对称点)。

椭圆曲线算法在比特币中的应用

比特币公钥加密中使用的椭圆曲线参数是依照secp256k1标准。在比特币流行之前很少有人使用过secp256k1,但现在由于它的几个不错的属性越来越受到欢迎。比特币官网这么讲到:Most commonly-used curves have a random structure, but secp256k1 was constructed in a special non-random way which allows for especially efficient computation. As a result, it is often more than 30% faster than other curves if the implementation is sufficiently optimized。secp256k1标准通过特别的算法,使得生成的曲线比别的曲线快30%。这在移动端等小型设备上是非常重要的。椭圆曲线中还有一个有限域Fp的概念,以素数p为模数的数的集合。它定义椭圆曲线中x,y的范围,同时它也有自己的加法、乘法、除法、单位元(1),零元(0),并满足交换率、分配率。列如F23(p的值是23,要求p是素数),它是数据 0到22的集合,关于它的算法:

加法:(18 + 9)mod 23 = 4 减法:(7 - 14) mod 23 = 16 乘法:4 * 7 mod 23 = 5 加法逆元: x + 5 = 0 mod 23 => x= 18 乘法逆元: x *9 = 1 mod 23 => x= 18 。

所以对于比特币中的椭圆曲线算法,需要明确知道的是(p,a,b,G,n,h)。p是Fp的模的范围,比特币中定义的是:

  • p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
  • = 2256 - 232 - 29 - 28 - 27 - 26 - 24 - 1。a,b是椭圆曲线的参数,分别是a=0,b=7。G是基点,可以理解为椭圆曲线中第一个点,列如前面的P。比特币中定义的点G 为 (02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798,483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8)。n 是基点G的可倍积阶数,定义为能够使得点倍积nG 不存在的最小的整数n,比特币中它的值为:FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141。h是一个整数常量,它跟椭圆曲线运算中得到点的集合以及 n 有关,h 一般取值为1。比特币中也是1。

    比特币中的椭圆曲线如下:

加密流程:以一个随机生成的私钥k为起点,我们将其与曲线上预定的生成点G相乘以获得曲线上的另一点,也就是相应的公钥 K。生成点是secp256k1标准的一部分,比特币密钥的生成点都是相同的:{K = k * G}。

这就是比特币中秘钥的生成过程,也就是比特币中安全性依赖的根本。

椭圆曲线算法安全性,现状,运用

目前椭圆曲线应用的范围越来越广,在BTC,ETH,EOS,莱特币,DASH等都有使用。密码学中把正向计算是很容易的,但若要有效的执行反向则很困难的算法叫做陷门函数。在RSA的章节中已经介绍过,RSA会随着因式分解的数字变大而变得越有效率,对于私钥增长的需求决定了RSA并不能算作一个完美的陷门函数。事实证明在椭圆曲线中如果你有两个点,一个最初的点乘以K次到达最终点,在你只知道最终点时找到n和最初点是很难的,这就是一个非常棒的trapdoor函数的基础,最近三十年的研究,数学家还没有找到一个方法证实。密码学家Lenstra引进了“全球安全(Global Security)”的概念:假设破解一个228字节的RSA秘钥需要的能量少于煮沸一勺水的能量。那么破解一个228字节的椭圆曲线秘钥需要煮沸地球上所有水的能量。如果RSA要达到一个同样的安全水平,你需要一个2,380字节的秘钥。就像前面文章中讲到的,ECC能够使用较小的资源而产生安全性较高的效果。

原文地址:https://www.cnblogs.com/gzhlt/p/10270913.html

时间: 2024-11-05 20:46:06

区块链中的密码学(三)-椭圆曲线加密算法分析的相关文章

1.3.2 区块链中的密码学——Merkle 树

在计算机领域,Merkle树大多用来进行完整性验证处理.在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,Merkle树会大大减少数据的传输量以及计算的复杂度. Merkle哈希树是一类基于哈希值的二叉树或多叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值是将该节点的所有子节点的组合结果的哈希值. 如下图所示为一个Merkle哈希树,节点A的值必须通过节点C.D上的值计算而得到.叶子节点C.D分别存储数据块001和002的哈希值,而非叶子节点A存储的是其子节点C.

1.3.2 区块链中的密码学——椭圆曲线密码算法(ECC)

今天在学椭圆曲线密码(Elliptic Curve Cryptography,ECC)算法,自己手里缺少介绍该算法的专业书籍,故在网上查了很多博文与书籍,但是大多数博客写的真的是...你懂的...真不愧是 '天下文章一大抄' 啊! 雷同不说,关键是介绍的都不是很清楚,是我在阅读过程中.产生的很多疑问无法解决!例如:只来句'P+Q=R',但是为什么等于呢?是根据什么计算出来的呢? 后来查了好久,才发现:这是规定的.是定义!瞬间很是无语! 好了,不吐槽了,为了方便大家对椭圆曲线密码算法有系统的了解,

区块链中的密码学

区块链概念 区块:可以看做是一页一页的账单,上面记录若干条数据 区块链:可以看做是账本,里面按照时间顺序将若干个账单 每个区块中包含两个最重要的值,自己的hash值,和上一个区块的hash值 详解: 区块链是一串使用密码学方法相关联产生的数据块,每一个区块中包含上一个区块的hash值,用于验证其信息的有效性(防伪)和生成下一个区块 Hash算法 Hash算法:可以将任意数据 生成 固定长度的16进制字符串 常见算法:md5 , sha1 , sha256 , sha512等,都是摘要算法 密码学

区块链中的密码学之数字证书体系(十四)

1. 前言 数字证书用来证明某个公钥是谁的,并且内容是正确的. 对于非对称加密算法和数字签名来说,很重要的一点就是公钥的分发.一旦公钥被人替换( 典型的如中间人攻击) ,则整个安全体系将被破坏掉. 怎么确保一个公钥确实是某个人的原始公钥?这就需要数字证书机制. 顾名思义,数字证书就是像一个证书一样,证明信息的合法性.由证书认证机构( Certification Authority,CA) 来签发,权威的 CA 包括 verisign 等. 数字证书内容可能包括版本.序列号.签名算法类型.签发者信

区块链中的密码学之数字签名方案(十二)

1. 前言 类似在纸质合同上签名确认合同内容,数字签名用于证实某数字内容的完整性( integrity)和来源( 或不可抵赖,non-repudiation). 一个典型的场景是,A 要发给 B 一个文件( 一份信息) ,B 如何获知所得到的文件即为 A 发出的原始版本?A 先对文件进行摘要,然后用自己的私钥进行加密,将文件和加密串都发给B.B 收到文件和加密串后,用 A 的公钥来解密加密串,得到原始的数字摘要,跟对文件进行摘要后的结果进行比对.如果一致,说明该文件确实是 A 发过来的,并且文件

区块链中的密码学之默克尔树(十五)

目录 1. 前言 2. 默克尔树 3. 布隆过滤器 什么情况下需要布隆过滤器? 常规思路 布隆过滤器介绍 布隆过滤器原理 布隆过滤器添加元素 布隆过滤器查询元素 4. 同态加密 4.1 概览:同态加密的概念 4.2 同态加密的定义.安全性和简单实例 5. 零知识证明 零知识证明的提出 零知识证明的形式化定义 零知识证明满足的性质 基本的零知识协议 非交互式零知识证明 零知识证明的应用 1. 前言 2. 默克尔树 默克尔树( 又叫哈希树) 是一种二叉树,由一个根节点.一组中间节点和一组叶节点组成.

1.3.1 区块链中的加密算法——Hash算法(更新)

为了为保证存储于区块链中的信息的安全与完整,区块链中使用了包含密码哈希函数和椭圆曲线公钥密码技术在内的大量的现代密码学技术,同时,这些密码学技术也被用于设计基于工作量证明的共识算法并识别用户. 在前边的文章中已经系统的讲述了密码学中的哈希算法,在本节,将会给大家介绍Hash算法在区块链中的应用! 概念回顾: 哈希函数:是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为固定长度的二进制串,其输出值称为哈希值,也称为散列值. 以哈希函数为基础构造的哈希算法,在现代密码学中扮演着重要的角色

区块链快速入门(三)——CFT(非拜占庭容错)共识算法

区块链快速入门(三)--CFT(非拜占庭容错)共识算法 一.CFT简介 CFT(Crash Fault Tolerance),即故障容错,是非拜占庭问题的容错技术.Paxos 问题是指分布式的系统中存在故障(crash fault),但不存在恶意(corrupt)节点的场景(即可能消息丢失或重复,但无错误消息)下的共识达成问题,是分布式共识领域最为常见的问题.最早由Leslie Lamport用 Paxon 岛的故事模型来进行描述而得以命名.解决Paxos问题的算法主要有Paxos系列算法和Ra

区块链中的RESTFUL链码调用API原理详解

本文适合于熟悉开源区块链技术Hyperledger Fabric,以及希望更高效地使用华为云区块链服务的读者.当然,也欢迎任何对区块链技术有兴趣的读者阅读本文,相信读者们都能从中受益. 2018年2月1日 华为云发布企业级区块链开放平台区块链服务BCS(Blockchain Service),是基于开源区块链技术和华为在分布式并行计算.数据管理.安全加密等核心技术领域多年积累基础上推出的企业级区块链云服务产品,旨在帮助各行业.企业在华为云上快速.高效的搭建企业级区块链行业方案和应用. 如前所述,