一、椭圆曲线的基本概念

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

对密码学比较有意义的是基于素数域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. Linux下读取RFID卡号(C串口编程)

    由于项目需要用到RFID.GPRS.摄像头等模块所以便看了一下,整理了一下学习思路,本篇先是整理一下串口读取RFID卡号的程序思路,后面还会更其他的 RFID模块: 本次采用的是125K的RFID读卡 ...

  2. docker仓库操作

    1.登陆注册 docker login 2.搜索镜像 docker search xxx 3.上传镜像 docker push 镜像名:标签或者镜像ID 4.下载镜像 docker pull 镜像名: ...

  3. Fisheye projections from spherical maps [转]

    Fisheye projections from spherical maps Written by Paul Bourke May 2003, software updated January 20 ...

  4. echarts使用技巧(一)echarts的图表自适应resize问题、单选、缩放等

    这些东西要是有精力和时间可以通读echarts文档,里面都有配置详细介绍.该博客只是把自己使用echarts遇到的问题记录下,并不全,加深印象,抛砖引玉而已,完整学习的请移步官方文档 1.legend ...

  5. luigi框架--关于python运行spark程序

    首先,目标是写个python脚本,跑spark程序来统计hdfs中的一些数据.参考了别人的代码,故用了luigi框架. 至于luigi的原理 底层的一些东西Google就好.本文主要就是聚焦快速使用, ...

  6. [C++基础]那些容易被混淆的概念:函数/数组指针-指针函数/数组,类/函数模板-模板类/函数

    函数指针-指针函数 函数指针的重点是指针.表示的是一个指针,它指向的是一个函数.eg: int (*pf)(); 指针函数的重点是函数.表示的是一个函数,它的返回值是指针.eg: int* fun() ...

  7. 从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?

    这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { pub ...

  8. Tomcat 之 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099;

    错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099; nested exception is:  java. ...

  9. JavaWeb 发送get请求

      JavaWeb 发送get请求 CreationTime--2018年6月20日15点27分 Author:Marydon 1.前提 通过HttpClient来实现 2.具体实现 客户端如何发送请 ...

  10. JDBC JdbTemplate&NamedParameterJdbcTemplate(Spring工具类)

    使用该工具类需要从spring开发包中导入spring.jar和commons-logging.jar,这个模板是线程安全的.   JdbcTemplate: public class JdbcTem ...