一、椭圆曲线的基本概念

简单的说椭圆曲线并不是椭圆,之所以称为椭圆曲线是因为他们是用三次方程来表示,并且该方程与计算椭圆周长的方程相似。

对密码学比较有意义的是基于素数域GF(p)和基于二进制域(GF(2^m))上的椭圆曲线。

下面重点介绍基于GF(p)上的椭圆曲线:

y^2 º x^3 + a*x + b(modp)

其中p是素数,a和b满足:4a^3 + 27b^2 (mod p) ¹ 0

满足上述方程的整数对(x, y), 就叫椭圆曲线上的点。

素数域

其实域就是一个集合,在其上面进行加,减,乘,除运算而封闭。比如有理数集合,实数集合,复数集合,这些都是无限域,在密码学中没有什么实际意义,所以考虑与整数有关的域,对密码学有实际意义。

研究最多的就是素数域GF(p)。我的理解就是一个素数p,在集合[0…p-1]上定义一个模加,一个模乘,就构成了一个有限素数域,比如取p = 5,定义如下模加, 模乘:

模加

+

0

1

2

3

4

0

0

1

2

3

4

1

1

2

3

4

0

2

2

3

4

0

1

3

3

4

0

1

2

4

4

0

1

2

3

模乘

+

0

1

2

3

4

0

0

0

0

0

0

1

0

1

2

3

4

2

0

2

4

1

3

3

0

3

1

4

2

4

0

4

3

2

1

下面以连续的椭圆曲线为例介绍一下椭圆曲线上

的点的运算规则

椭圆曲线上点的加法定义

对于椭圆曲线上的任意两点P(x1, y1),

Q(x2, y2),R = (x3, y3), 其中R = P+Q

具体描述如下:

X3 = K^2 – X1 – X2(modp)

y3 = k(x1-x3) – y1 (modp)

其中

当P不等于Q时

K = (y2 – y1)/(x2 – x1) (modp)

当P等于Q时

k = (3*x1^2 + a)/2*y1 (modp)

  

零元

对椭圆曲线上的任意一点P(x1, y1), 有

P + O = O + P = P

如右图

负元

     -P = (x1, -y1)

P – P = O

O = -O

其中O为无穷远点,一条与Y轴平行的直线

只有一个无穷点O

纯量乘法

KP = P+P+P+…+P  K个P相加

基于GF(p)上的椭圆曲线举例

P = 23, a = 1, b = 0

方程:y^2 = x^3 + x(mod23)

椭圆曲线上的点:

(0,0) (1,5) (1,18) (9,5) (9,18) (11,10) (11,13) (13,5)

(13,18) (15,3) (15,20) (16,8) (16,15) (17,10) (17,13) (18,10)

(18,13) (19,1) (19,22) (20,4) (20,19) (21,6) (21,17)

和无穷远点O构成椭圆曲线上的加法群

其点运算规则和上面讲到的连续椭圆曲线

上的运算规则是相同的

二、椭圆曲线离散对数在密码中的应用

公钥密码算法总要基于一个数学难题,比如RSA的依据是给定两个数p, q很容易相乘得到N, 而对n进行因式分解则相对困难的多。椭圆曲线密码体制(ECC)采用的数学难题则是求椭圆曲线加法群的离散对数问题,具体描述如下:

Q = kG

其中Q为椭圆曲线上的点, G为椭圆曲线上的基点,k 为小于n的整数,n为G的阶即, nG = O

根据上节提到的纯量乘法知道k, G不难求出Q, 但是给定Q, G求k就相对困难了,这就叫椭圆曲线加法群上的离散对数问题。

上述整数k,就是ECC私钥, Q为公钥, 可以利用此密钥对进行加密,解密,签名,验证等公私钥运算。

根据上节提到的纯量乘法知道k, G不难求出Q, 但是给定Q, G求k就相对困难了,这就叫椭圆曲线加法群上的离散对数问题。

上述整数k,就是ECC私钥, Q为公钥, 可以利用此密钥对进行加密,解密,签名,验证等公私钥运算。

三、ECDSA简单介绍

下面简单介绍一下基于GF(p)的椭圆曲线数字签名算法(ECDSA)

预备数据: h(待签名Hash值),公钥Q,私钥d

签名过程:

1. 选取一个随机数k;

2. 计算k = kmodn, 如果k =0返回第1步重新选取;

3. 计算kG = (x1, y1);

4. 计算r = x1mondn;

5. 如果r = 0返回第2步;

6. 计算s = k^-1*(h+ dr )modn;

7. 如果s = 0, 返回第2步;

其中(r, s)为签名结果。

验证过程:

1. 验证1=<r<=n-1, 若不成立返回false

2. 验证1=<s<=n-1, 若不成立返回false

3. 计算c = s^-1modn

4. 计算u1 = e’*c modn, u2 = r*c mon n

5. 计算u1*G+u2*Q = (x1, y1), 如果(x1, y1)为O 返回false

6. 计算v = x1modn;

7. 如果r != v 返回false

8. 返回true

四、 ECC与RSA的比较

椭圆曲线加密技术(ECC)是建立在单向函数(椭圆曲线离散对数)得基础上,由于它比RAS使用得离散对数要复杂得多。而且该单向函数比RSA得要难。

如160位ECC与1024位RSA有相同的安全强度。而210位ECC则与2048bitRSA具有相同的安全强度

计算量小,处理速度快虽然在RSA中可以通过选取较小的公钥(可以小到3)的方法提高公钥处理速度,即提高加密和签名验证的速度,使其在加密和签名验证速度上与ECC有可比性,但在私钥的处理速度上(解密和签名),ECC远比RSA、DSA快得多。因此ECC总的速度比RSA、DSA要快得多。

存储空间占用小ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小

椭圆曲线密码体制(ECC)简介的更多相关文章

  1. 椭圆曲线密码学ECC

      椭圆曲线密码学(Elliptic curve cryptography),简称ECC,是一种建立公开密钥加密的算法,也就是非对称加密.类似的还有RSA,ElGamal算法等.ECC被公认为在给定密 ...

  2. Openssl编程--源码分析

    Openssl编程 赵春平 著 Email: forxy@126.com 第一章 基础知识 8 1.1 对称算法 8 1.2 摘要算法 9 1.3 公钥算法 9 1.4 回调函数 11 第二章 ope ...

  3. 《openssl编程》:第一章基础知识

    第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...

  4. 椭圆曲线ECC基本概念

    椭圆曲线的曲线方程是以下形式的三次方程: y2+axy+by=x3+cx2+dx+e a,b,c,d,e是满足某些简单条件的实数.定义中包含一个称为无穷点的元素,记为O 如果其上的3个点位于同一直线上 ...

  5. 关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商)

    关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商) 来源: https://blog.csdn.net/xueyepiaoling/article/details/6243337 ...

  6. C/C++大数库简介

    在网络安全技术领域中各种加密解密算法的软件实现上始终有一个共同的问题就是如何在普通的PC机上实现大数的运算.我们日常生活中所应用的PC机内部字长多是32位或64位,但是在各种加密解密的算法中为了达到一 ...

  7. NAND FLASH ECC校验原理与实现

    ECC简介 由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,因此,在NAND的生产中及使用过程中会产生坏块.为了检测数据的可靠性,在应用NAND  ...

  8. ECC 构筑安全可靠的区块链

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

  9. DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱.不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬.(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...).已经上班两天了,公司大部分人还在休假,而我早已上班, ...

随机推荐

  1. [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  2. SQL OUTER JOIN

    When we want to select out all the record from two table, no matter it's present at second table or ...

  3. 吐槽win7

    在纠结了N次后,终于重装win7了.其间还是不死心,又找了新的xp版本来装了一下,确实不行,才心不甘情不愿地再次回到win7下. 说实话,Win7的各种新功能,我没有感觉到有多好,只有不适应,如: 资 ...

  4. vue 表单 验证 async-validator

    1.使用插件async-validator async-validator 地址:https://github.com/yiminghe/async-validator 2.示例(vue+elemen ...

  5. 页面刷新 vuex 数据重新被初始化

    1.原因 vuex里用来存储的也只是一个全局变量,当页面刷新,该全局变量自然不存在了. 2.解决 使用localStorage存储一份 (1)storage.js /** * vuex localSt ...

  6. 在 HTML 中使用JavaScript

    <script>元素 属性     async:可选.async 属性规定一旦脚本可用,则会异步执行,表示应该立即下载脚本,但不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.a ...

  7. PHP项目的“苦逼”经历与思考

    PHP项目的"苦逼"经历与思考 PHP零基础.但因为项目人手不够的原因,被安排到一个用户"定制"项目. 该项目是用PHP生成的统计数据报表. 而用户又有新的3个 ...

  8. CSS border 生成三角

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  9. Oracle 正则 整词匹配 \b 不行

    在oracle中用整词匹配\b来包裹想要匹配的词并不可行, 正确的做法应该是这样: FROM DUAL WHERE REGEXP_LIKE('1 2 3 14','(^|\s|\W)3($|\s|\W ...

  10. JDBC 滚动和分页

    public class ScrollTest {     /**      * @param args      * @throws SQLException      */     public ...