椭圆曲线加密算法及实例分析
椭圆曲线密码算法详解
密钥对生成
输入:椭圆曲线参数组(p,E,P,n) 输出:公钥Q和私钥d 1. 选择d[1,n] 2. 计算Q=dP 3. 返回(Q,d)
基本椭圆曲线加密
输入:椭圆曲线参数组(p,E,P,n),公钥Q,明文m
输出:密文(C1,C2) 1. 将明文m表示为E(FP)上的点M 2. 选择k[1,n] 3. 计算C1=kP 4. 计算C2=M+kQ 5. 返回(C1,C2)
例5 条件同例4,若 P P 2P R (x3, y3) 则R = ?
解:
x3
x12
b x12
g 32 g 2 g 32
g 6 g11
g
y3
x12
x1
y1
x1
x3
x3
=g32 g3 g9 g 3 g g
g6 g3 g g5
2P R (g,g5)
E: y2 x3 ax b
其中4a3 27b2 0 模F2n下定义为椭圆曲线
E: y2 xy x3 ax2 b
其中b 0 ,此曲线称为nonsuper-singular。
椭圆曲线有一个特殊的点,记为O,它并 不在椭圆曲线E上,此点称为无穷远点
(the point at infinity)
基本椭圆曲线解密
输入:椭圆曲线参数组(p,E,P,n),私钥d ,
密文(C1,C2) 输出:明文m 1. 计算M=?,并从点M取出明文m 2. 返回(m)
g3
g
g8
g9
y3
y1 x1
y2 x2
(x1
x3 )
x3
y1
g9 g5 g3 g
密码学椭圆曲线的嵌入例题
密码学椭圆曲线的嵌入例题密码学中,椭圆曲线是一种常用的加密算法,它基于椭圆曲线上的离散对数问题,具有高度安全性和效率。
下面是一个关于椭圆曲线的嵌入例题,从多个角度进行全面的回答。
例题,假设我们有一个椭圆曲线E,其方程为y^2 = x^3 + ax + b,其中a和b是曲线的参数。
现给定曲线E的参数为a = 2,b = 3,求曲线E的所有点。
回答:从代数的角度来看,我们可以通过将参数a和b代入椭圆曲线方程来求解曲线E的所有点。
将a = 2,b = 3代入方程y^2 = x^3 + ax + b,得到y^2 = x^3 + 2x + 3。
然后我们可以使用数值计算的方法,例如穷举法或者使用计算机程序,来找到满足该方程的所有整数点或有理数点。
通过计算,我们可以找到曲线E的所有点。
从几何的角度来看,椭圆曲线是一个平面上的曲线,其点的集合形成了一个封闭的曲线。
曲线E的所有点包括无穷远处的一个特殊点O,以及其他有限个点。
这些点具有特定的几何性质,例如曲线上的两个点可以通过曲线的斜率来连接,得到曲线上的另一个点。
通过使用这些几何性质,我们可以逐步确定曲线E的所有点。
从密码学的角度来看,椭圆曲线的嵌入是指将曲线E定义在一个有限域上,以便在密码学中应用。
常用的有限域是有限素数域GF(p),其中p是一个素数。
在密码学中,曲线E的参数a和b以及有限域的素数p被选取为保密的参数,以确保曲线的安全性。
通过在有限域上定义椭圆曲线,我们可以进行各种密码学操作,例如点的加法、倍乘等,从而实现加密和签名等功能。
从计算机科学的角度来看,椭圆曲线的嵌入是指将曲线E的参数和点的坐标表示为计算机可以处理的格式。
通常,我们使用有限域上的二进制表示来表示椭圆曲线的参数和点的坐标。
例如,可以使用二进制位串来表示参数a和b,以及点的坐标x和y。
在计算机中,我们可以使用特定的算法和数据结构来实现椭圆曲线的各种操作,例如点的加法、倍乘等。
这样,我们可以在计算机系统中高效地进行椭圆曲线的计算和应用。
椭圆曲线密码学算法原理与实现
椭圆曲线密码学算法原理与实现椭圆曲线密码学算法是当前计算机安全领域中广泛使用的一种加密算法。
与传统的RSA算法相比,椭圆曲线密码学算法具有较高的安全性和更短的密钥长度,同时也更加适用于小型设备和无线通信领域。
本文将对椭圆曲线密码学算法的原理、优势以及实现进行介绍。
一、椭圆曲线密码学算法原理椭圆曲线密码学算法是基于椭圆曲线运算的一种加密算法。
在椭圆曲线上,可以定义加法和乘法等运算操作,从而构建出密钥系统。
具体来讲,椭圆曲线密码学算法使用的是离散对数问题,即找到一个整数k,使得G=kP,其中G和P是椭圆曲线上的点,k是密钥。
在使用椭圆曲线密码学算法时,有两个关键要素,分别是公钥和私钥。
公钥是任何人都可以获得的,而私钥只有信息发送者才能获得。
当信息发送者需要发送加密信息时,会使用接收者的公钥对信息进行加密,接收者收到信息后再使用自己的私钥进行解密。
这种方法可以保证信息在传输过程中不被他人窃取。
二、椭圆曲线密码学算法的优势椭圆曲线密码学算法相对于传统的RSA算法,有以下的优势:1. 更高的安全性。
使用椭圆曲线密码学算法时,需要使用的密钥长度较短,但是却具有比较高的安全性。
这是因为椭圆曲线操作比传统的大数因子分解更难以破解。
2. 适用于小型设备和无线通信领域。
使用传统的RSA算法时,需要较长的密钥,这在小型设备和无线通信领域会造成很大的问题。
而椭圆曲线密码学算法可以使用更短的密钥长度,可以在小尺寸的设备上使用,如智能卡和移动设备等。
3. 更高的运算速度。
相比传统的RSA算法,使用椭圆曲线密码学算法进行加密和解密的运算速度更快,可以更加高效地完成加密解密操作。
三、椭圆曲线密码学算法的实现椭圆曲线密码学算法的实现涉及到一系列的数学运算,包括椭圆曲线上的点的加法、乘法、求逆以及扩域操作等。
下面简单介绍一下椭圆曲线密码学算法的实现过程。
1. 密钥的生成。
在使用椭圆曲线密码学算法时,需要生成一对公钥和私钥。
生成公钥时,需要选择一个椭圆曲线和基点,然后随机选取一个整数作为私钥。
13椭圆曲线密码体系
Weierstrass方程被称为光滑的或非奇异的是指对所有适合 以下方程的射影点P=(X:Y:Z) ∈ P2(K)来说, F(X,Y,Z)=Y2Z+a1XYZ+a3YZ2-X3-a2X2Z-a4XZ2-a6Z3=0 F F F 在P点的三个偏导数 X , Y , Z 之中至少有一个不 为 0若否称这个方程为奇异的。 椭圆曲线E的定义: 椭圆曲线E是一个光滑的Weierstrass方程在P2(K)中 的 全部解集合。 Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3 注: a) 在椭圆曲线E上恰有一个点,称之为无穷远点。即(0:1:0) 用θ表示。
RSA/DS A ECC 512 106 768 132 1024 160 2048 211 2100 0 600
椭圆曲线基础知识
1 有关的基本概念
(1) 无穷远元素(无穷远点,无穷远直线) 平面上任意两相异直线的位置关系有相交和平行两 种。引入无穷远点,是两种不同关系统一。 L2 L1 A
Q
B
有限域上的椭圆曲线点集产生方 法
对每一x(0≤x<p且x为整数),计算x3+ax+b
mod p 决定求出的值在模p下是否有平方根,如果没有则 椭圆曲线上没有与这一x对应的点;如果有,则求 出两个平方根。
Ep(a,b)上加法
如果P,Q∈ Ep(a,b)
P+O=P 如果P=(x,y),则(x,y)+(x,-y)=O
3*. 全体无穷远点构成一条无穷远直线。 注:欧式平面添加上无穷远点和无穷远直线,自然构成射 影平面。 L1 L2 A P∞
(2) 齐次坐标 解析几何中引入坐标系,用代数的方法研究欧氏空 间。这样的坐标法也可推广至摄影平面上,建立平面摄影 坐标系。 平面上两相异直线L1,L2,其方程分别为: L1: a1x+b1y+c1=0 L2: a2x+b2y+c2=0
椭圆曲线加密算法的研究与实现
椭圆曲线加密算法的研究与实现椭圆曲线加密算法是目前应用最广泛的公钥加密算法,具有难以破解、高效快速、安全稳定等特点,是构建安全的密钥交换协议和数据传输机制的基础,目前在军事、政府、金融、电信等领域应用越来越广泛,因此,研究椭圆曲线加密算法具有重要的现实意义。
一、椭圆曲线加密算法的基础原理椭圆曲线加密算法是建立在参数检验上的一种数论函数的安全加密算法。
它的基本思想是,在一个高维空间,首先选定一条椭圆曲线,然后根据其参数定义一个数位函数,最后用这个函数来进行加密解密。
其参数包括椭圆曲线上的整数点、椭圆曲线的参数、离散对数求解器、变换矩阵、模量等。
椭圆曲线加密算法通过对椭圆曲线参数的不同构造出不同的密钥,每次传输都可以构造出不同的加密算法,保证了每次传输的安全性。
二、椭圆曲线加密算法的研究及实现(一)研究1.椭圆曲线原理的研究:研究椭圆曲线的定义,研究椭圆曲线参数的等价定义,研究椭圆曲线参数对密钥安全性的影响;2.椭圆曲线算法实现的研究:研究加密算法的矩阵变换过程,研究其实现中的算法、数据结构;3.椭圆曲线算法安全性的研究:研究不同的攻击策略,探究破解椭圆曲线加密算法的方法;4.椭圆曲线密钥的优化研究:探究优化椭圆曲线密钥的有效方法;(二)实现1.建加密编码结构:建立椭圆曲线参数的数据结构;2.写加密解密程序代码:编写算法实现加密解密程序,代码实现矩阵变换;3.试椭圆曲线加密算法:测试算法对密钥安全性、加密效率、传输安全性等的效果,并对结果做出评估;4.椭圆曲线加密算法进行优化:对椭圆曲线的参数进行分析,通过优化参数提高椭圆曲线算法的安全性。
三、结论椭圆曲线加密算法是目前应用最为广泛的公钥加密算法,对于建立安全的密钥交换协议和数据传输机制具有重要的现实意义。
研究者应该深入研究椭圆曲线加密算法的原理、实现、安全性和优化,为椭圆曲线加密算法的应用提供保障和支持。
椭圆曲线加密算法例题
椭圆曲线加密算法例题椭圆曲线加密算法(Elliptic Curve Cryptography,简称ECC)是一种基于椭圆曲线数学的公钥加密算法。
下面是一个简单的椭圆曲线加密算法的例题:假设Alice和Bob想要使用椭圆曲线加密算法进行通信。
他们首先选择一个合适的椭圆曲线参数,包括一个椭圆曲线方程和一个基点G。
1. 密钥生成:Alice选择一个随机数a作为她的私钥,并计算出她的公钥A=aG。
Bob选择一个随机数b作为他的私钥,并计算出他的公钥B=bG。
2. 加密过程:Alice想要发送一条消息M给Bob,她首先选择一个随机数k,并计算出点C1=kG和C2=M+kA,其中kA表示点A乘以k。
Alice将C1和C2一起发送给Bob。
3. 解密过程:Bob收到C1和C2后,使用他的私钥b计算出点C'=C2-bC1。
由于椭圆曲线上的点的加法运算具有群的性质,因此C'就等于M+kA-bkA=M+(k-bk)A。
由于A=aG,所以C'就等于M+(k-bk)aG。
由于k和b都是随机数,所以k-bk也是一个随机数,记为k'。
因此,C'就等于M+k'aG。
Bob再计算出M'=C'-k'A。
由于A=aG,所以M'就等于M+k'aG-k'aG=M。
因此,Bob成功解密出了Alice发送的消息M。
以上是一个简单的椭圆曲线加密算法的例题。
在实际应用中,椭圆曲线加密算法还需要考虑更多的安全性和效率问题,例如选择合适的椭圆曲线参数、防止重放攻击等。
此外,还需要使用合适的密码学哈希函数和随机数生成器等技术来保证算法的安全性。
ecc椭圆曲线加密算法原理
ecc椭圆曲线加密算法原理宝子们!今天咱们来唠唠一个超酷的加密算法——ECC椭圆曲线加密算法。
这玩意儿听起来就很神秘,对不对?咱先从基础概念说起哈。
椭圆曲线呢,可不是咱平常看到的椭圆哦。
在数学的奇妙世界里,它是由一个方程定义的曲线。
这个方程大概是这个样子的:y² = x³ + ax + b(这里的a和b是一些常数啦)。
不过呢,这个曲线不是随便画在平面上就行的,还有一些特殊的规则。
比如说,这个曲线得是光滑的,不能有尖尖的角或者奇怪的断点。
那这个椭圆曲线和加密有啥关系呢?这就很有趣啦。
想象一下,在这个椭圆曲线上有好多好多的点。
这些点就像是一个个小秘密的藏身之处。
我们在这个曲线上定义一种特殊的运算,叫做“点加”运算。
这个“点加”可不是简单的把两个点加起来哦。
它有一套自己独特的计算方法。
比如说,我们有两个点P和Q在椭圆曲线上。
要计算P + Q呢,我们得先画一条直线穿过P和Q(如果P和Q是同一个点的话,那这条直线就是曲线在这个点的切线哦,是不是很神奇?)。
这条直线会和椭圆曲线相交于另一个点,我们把这个点叫做R'。
然后呢,我们把R'关于x轴对称的点就是P + Q啦。
这个运算规则虽然有点复杂,但是很有规律呢。
好啦,现在我们来看看怎么用这个椭圆曲线来加密。
我们有一个发送者,比如说小明,和一个接收者,比如说小红。
首先呢,小红要在椭圆曲线上选一个秘密的点,这个点就像是她的小钥匙,只有她自己知道。
然后呢,她把椭圆曲线的一些公开信息,比如曲线的方程、一个公开的基点(这个基点就是曲线上一个大家都知道的点啦)发给小明。
小明要发送一个消息给小红。
他把这个消息变成一个椭圆曲线上的点M(这个转换过程也有一些小技巧哦)。
然后呢,小明随便选一个整数k,这个k就像是他临时想出来的一个小密码。
他计算C1 = k * 基点(这里的*就是我们前面说的点加运算,不过是重复k次啦),C2 = M + k * 小红的秘密点。
椭圆曲线加密算法及实例分析
The Application of Cryptographic Techniques in Secure Transmission of Streaming Media Chen Daomin1 Zhou Jinquan2 1PLA University ofForeign Languages, Henan 471003 2Kunming Military Academy, Yunnan 650207 Abstract:In this paper, after analyzing the encrypting features of streaming media, we deeply research on how to encrypt the streaming media data by using block cipher and stream cipher respectively. Keywords:Streaming Media;Encryption;Block Cipher;Stream Cipher
④依据 Bob 的公钥计算点(x , y )=kG(k 个 G 相加);
1
1
⑤计算点(x , y )=kQ,如果 x =0,则回到第③步;
2
2
2
⑥计算 C=m*x ; 2
⑦传送加密数据(x , y ,C)给Bob。
1
1
(2)Bob的解密过程
(阶)。经过计算得 n=223。 经过上面算法的验证,得知 n=223 是一个素数,所以点 v 可
1
1
(4)点 Q的倍数定义如下:在Q点作椭圆曲线的一条切线,设
切线与椭圆曲线交于点 S,定义 2Q=Q+Q=-S,类似的可定义 3Q=
(1)在椭圆曲线 E 上恰有一个点,称之为无穷远点。即(0: Q + Q + Q +,…,等。
椭圆曲线加密算法(一)
椭圆曲线加密算法(⼀)椭圆曲线加密和签名算法简述椭圆曲线密码学,简称ECC。
是⼀种建⽴公开加密的算法,也就是⾮对称加密。
和RSA类似。
被公认在给定密钥长度下最安全的加密算法。
应⽤范围很⼴,主要的三个技术TLS、PGP、SSH都在使⽤它,特别是以BTC为代表的数字货币。
椭圆曲线椭圆曲线并不是我们⾼中时学习的椭圆形状,其名字的由来是应为椭圆曲线的描述⽅程,类似于计算⼀个椭圆周长的⽅程。
这⾥⽤来加密的椭圆曲线的定义是⼀个特殊情况。
椭圆曲线暂时可以简单的理解为:其中:a和b决定了曲线在坐标系的不同形状。
举个例⼦:当b=1,a的取值从2到-3时,曲线的形状如下:特殊曲线:当a=b=0时(左),或a=-3,b=2时(右),这两条都不是符合标准的曲线。
阿贝尔群数学上,群是指定义了⼆元操作运算并且⽤符号“+”表⽰的⼀个集合。
则必须满⾜以下要求:封闭性:如果a和b都是群成员,那么a+b也是群成员。
组合性:(a+b)+c=a+(b+c)单位元:存在确切的⼀个值可以保证 a+0=0+a=a成⽴,我们称之为单位元逆元:每个成员都有⼀个相反数:对于任意值a必定存在b使得a+b=0这样的群我们称之为阿贝尔群。
另外阿贝尔群还应该满⾜交换律a+b=b+a我们所熟知的在整数范围内的加法运算(Z,+)就是阿贝尔群封闭性:a、b属于整数,a+b也属于整数组合性:(a+b)+c=a+(b+c)单位元:0值就是单位元逆元:a的逆元就是-a所以(Z,+)是⼀个阿贝尔群。
椭圆曲线的加法假设我们有这样⼀条椭圆曲线y2=x3-x,曲线上有两点P、Q,过P和Q做⼀条直线,交椭圆曲线于R'点,再过R'点做垂直于X轴的直线,交椭圆曲线于另⼀点R,我们定义P+Q=R。
当P=Q时候,则是过P点的切线交于椭圆曲线于R',此时R=2P,如图所⽰:当有k个相同的点P相加时,记做kP,如:P+P+P=2P+P=3P,如图:椭圆曲线密码利⽤上述“运算”中的“椭圆曲线上的离散多数问题”,就像RSA利⽤“⼤数质因数分解”⼀样。
椭圆曲线密码算法原理及其应用
椭圆曲线密码算法原理及其应用密码学是保障个人信息安全的重要领域,而椭圆曲线密码算法作为一种新的密码算法,在这方面扮演着越来越重要的角色。
本文将介绍椭圆曲线密码算法的基本原理、优势以及应用。
一、基本原理椭圆曲线密码算法是一种基于椭圆曲线数学理论而产生的密码算法,其基础理论是椭圆曲线离散对数问题。
所谓离散对数问题是指对于一个有限域$GF(q)$上的椭圆曲线$E$和其中的一个点$P$,在椭圆曲线上选择另一个点$Q$,求解在有限域$GF(q)$上,使得$Q=nP$的$n$的过程。
而这个过程是不可逆的,即求解$Q$到$P$的离散对数是困难的,因此椭圆曲线密码算法因此而诞生。
椭圆曲线密码算法可以参照传统公钥密码算法的框架设计,即包含公钥和私钥两部分。
一个椭圆曲线密码体制要求选择一个椭圆曲线$E$,再分别选择两个$E$上的点$P$和$Q$,称为基点和公钥点。
基点$P$作为私钥的一部分,而公钥点$Q$仅作为公钥的一部分,即:- 公钥:$(E,P,Q)$- 私钥:$P$发送者想对一条长为$m$的消息进行加密,首先选择一个小于$q$的整数$k$作为随机数,使得$P$乘以$k$所得到的点$K=kP$不能在椭圆曲线上表达为$Q$的$n$倍。
在此基础上,发送者计算:- 加密的密文:$c=(K,m+kn)$接收者收到密文$c$后,使用私钥$P$计算:- 解密后的明文:$m=\frac{c_2-k \cdot H(c_1)}{k}$其中$H(c_1)$是消息$c_1$的哈希值。
二、优势椭圆曲线密码算法相较于传统公钥密码算法,有以下优势:1. 可以使用短密钥长度其安全性和传统公钥密码算法一样好,但是它的密钥长度可以比传统的RSA或Diffie-Hellman密钥长度更短,API级别的椭圆曲线密码算法只需要32个字节密钥长度,远远低于传统算法的384位以上。
2. 速度较快相对于RSA或者Diffie-Hellman,椭圆曲线密码算法是一种更快速的密码算法,因为它不需要执行复杂且昂贵的模操作,而是直接在椭圆曲线上进行数学运算。
椭圆曲线加密算法的研究与实现
椭圆曲线加密算法的研究与实现椭圆曲线加密算法(Elliptic Curve Cryptography,简称ECC)是一种基于椭圆曲线数学原理的公钥加密算法,它可以在保证安全性的同时,大幅度缩短密钥长度,提高加密效率,并且具有抗量子计算攻击的特性,因此备受关注和应用。
本文就该算法的基本原理、优缺点和实现方案做一简单介绍。
一、基本原理。
椭圆曲线加密算法的基本原理是基于椭圆曲线离散对数问题(Elliptic Curve Discrete Logarithm Problem,简称ECDLP),其与RSA算法中大质数分解问题(Integer Factorization Problem,简称IFP)的关系类似。
椭圆曲线离散对数问题需要在椭圆曲线上求解离散对数,即找到一个整数k,使得Gk等于给定的点P,其中G是椭圆曲线上的一个基点,P是已知椭圆曲线上的一个点。
这个问题的复杂度是指用多少时间、空间和计算量解决问题,其中最常见的指数算法是Pollard Rho算法,时间复杂度是O(√n)。
二、优缺点。
与传统的RSA算法相比,椭圆曲线加密算法具有以下几个优点:1.密钥长度短。
公有参数长度可以设为160、192、224或256比特,相对于1024、2048比特的RSA密钥而言,密钥长度少了很多,这使ECC更适合于使用小型移动设备进行的加密通信。
2.运行速度快。
ECC加密和解密速度很快,通常可以达到RSA算法的2-4倍,可以在保障安全的前提下提高性能。
3.抵抗量子计算攻击。
在类经典计算机上很难攻击ECC,而椭圆加密是量子攻击下不易破解的加密算法之一。
三、实现方案。
ECC加密算法的实现主要涉及以下几个方面:1.选取椭圆曲线。
根据椭圆曲线参数的选择,设定基点、模数、参数a和b,还需考虑椭圆曲线的性质和安全性。
2.生成密钥对。
通过选取椭圆曲线上的随机整数k,生成一对密钥,其中一个私钥为k,公钥是基点G的k倍,即P=kG。
私钥必须妥善保管,公钥可公开。
椭圆曲线密码算法的设计与分析
椭圆曲线密码算法的设计与分析椭圆曲线密码算法(Elliptic Curve Cryptography, ECC)是一种基于椭圆曲线数学问题的公钥密码体制。
相比传统的RSA和DSA等公钥密码体制,ECC具有更短的密钥长度和更高的安全性,因此在现代密码学中被广泛应用。
本文将从椭圆曲线密码算法的基本原理、设计思想、应用领域以及安全性等方面进行分析和讨论。
一、基本原理1. 椭圆曲线椭圆曲线是由一组满足特定数学方程的点构成的曲线,其数学方程一般形式为:y^2 = x^3 + ax + b。
椭圆曲线上的点可以进行加法和乘法运算,构成一个代数结构。
椭圆曲线的加法运算有闭合性、交换律、结合律等性质,使得其成为构建密码体制的基础。
2. 椭圆曲线上的离散对数问题椭圆曲线上的离散对数问题(Elliptic Curve Discrete Logarithm Problem, ECDLP)是指找到满足P = kG的整数k,其中P和G分别为椭圆曲线上的点。
ECDLP是一种困难问题,即使在现代计算机条件下,也需要消耗大量的计算资源才能解决。
二、设计思想1. 基于硬问题的安全性与RSA和DSA等公钥密码体制不同,椭圆曲线密码算法是基于椭圆曲线上的离散对数问题的困难性而安全的。
目前来看,对于给定的椭圆曲线参数,没有已知的高效算法可以有效解决ECDLP问题。
因此,ECC可以提供较高的安全性,同时使用更短的密钥长度,减少了计算、存储和传输的开销。
2. 允许更短的密钥长度相比传统的RSA和DSA等公钥密码体制,ECC可以使用更短的密钥长度来达到相同的安全性。
例如,一个256位的椭圆曲线密钥可以提供与一个2048位RSA密钥相当的安全性。
这使得ECC在资源受限的环境下更加实用。
3. 高效的加密和解密运算椭圆曲线上的加法和乘法运算可以通过一些高效的算法来进行,使得密钥生成、加密和解密等运算更快速和高效。
这对于移动设备和无线网络等资源受限的环境来说,具有重要意义。
ECC椭圆曲线加密算法—加解密(SageMath实现)
ECC椭圆曲线加密算法—加解密(SageMath实现)简介ECC椭圆曲线加密,它的安全性基于椭圆曲线上的离散对数问题。
⽐特币和⽬前的⼆代居民⾝份证都采⽤了ECC作为加密算法。
ECC椭圆曲线函数为:y2=x3+ax+b (mod p)ECC算法如下:椭圆曲线Ep(a,b)(p为模数),基点(⽣成元)G(x,y),G点的阶数n,私钥k,公钥K(x,y),随机整数r,明⽂为⼀点m(x,y),密⽂为两点c1(x,y)和c2(x,y)(其中基点G,明⽂m,密⽂c1、c2都是椭圆曲线E上的点)选择私钥k(k<n)得到公钥K = k*G选择随机整数r(r<n)加密:c1 = m+r*Kc2 = r*G解密:m = c1-k*c2(= c1-r*K)SageMath可以直接计算椭圆曲线加法和椭圆曲线乘法。
椭圆曲线运算(SageMath):点u(x,y),整数a,点v(x,y),点w(x,y)a_inv = inverse_mod(a,p) #a_inv是a关于模p的乘法逆元a_invv = a*uu = v*a_invw = u+v加解密脚本SageMath加密脚本:'''加密椭圆曲线选取时,模数p应是⼀个⼤质数常⽤的有⼏个公开的椭圆曲线,如Secp256k1、Secp256r1等'''p = 115792089210356248762697446949407573530086143415290314195533631308867097853951a = 115792089210356248762697446949407573530086143415290314195533631308867097853948b = 41058363725152142129326129780047268409114441015993725554835256314039467401291E = EllipticCurve(GF(p),[a,b]) #建⽴椭圆曲线EG = E(101981543389703054444906888236965100227902100585263327233246492901054535785571,105947302391877180514060433855403037184838385483621546199124860815209826713886) #选择⼀点作为⽣成元n = G.order() #G的阶数k = 78772200542717449282831156601030024198219944170436309154595818823706214492400K = k*Gr = 3546765m = E(80764032034929976879602863302323059647882062252124869895215418422992624743795,4964654783828069942602279691168356721024126126864424301508238062949726916347) #取E上⼀点m作为明⽂c1 = m+r*Kc2 = r*Gprint(c1)print(c2)SageMath解密脚本:'''解密'''p = 115792089210356248762697446949407573530086143415290314195533631308867097853951a = 115792089210356248762697446949407573530086143415290314195533631308867097853948b = 41058363725152142129326129780047268409114441015993725554835256314039467401291k = 78772200542717449282831156601030024198219944170436309154595818823706214492400E = EllipticCurve(GF(p),[a,b]) #建⽴椭圆曲线Ec1 = E(55527726590533087179712343802771216661752045890626636388680526348340802301667,99976146729305231192119179111453136971828647307627310904093286590128902629941)c2 = E(85460365972589567444123006081329559170090723413178386022601904195400422637884,58249081362527056631776731740177334121295518073095154119886890634279528757192)m = c1-k*c2print(m)其他使⽤Crypto.PublicKey.ECC⽣成ECC密钥:from Crypto.PublicKey import ECC#⽣成ECC密钥key = ECC.generate(curve='NIST P-256') #使⽤椭圆曲线NIST P-256#输出密钥(包括私钥k,基点G)print(key)#公钥(point_x,point_y是基点G的坐标)print(key.public_key())#椭圆曲线print(key.curve)#私钥kprint(key.d)#导出为pem密钥⽂件print(key.export_key(format='PEM'))#导⼊密钥⽂件key = ECC.import_key(f.read())通过fastecdsa.Curve可以查到公开椭圆曲线的参数import fastecdsa.curve as curve#P-384的acurve.P384.a#P-384的bcurve.P384.bProcessing math: 100%#P-384的pcurve.P384.p⼏种公开椭圆曲线参数:#NIST P-256(Secp256r1)#p = 2^224(2^32 − 1) + 2^192 + 2^96 − 1p = 115792089210356248762697446949407573530086143415290314195533631308867097853951a = 115792089210356248762697446949407573530086143415290314195533631308867097853948b = 41058363725152142129326129780047268409114441015993725554835256314039467401291#Secp256k1(⽐特币使⽤)#p = 2^256 − 2^32 − 2^9 − 2^8 − 2^7 − 2^6 − 2^4 − 1 = 2^256 – 2^32 – 977p = 115792089237316195423570985008687907853269984665640564039457584007908834671663a = 0b = 7#NIST P-384#p = 2^384 – 2^128 – 2^96 + 2^32 – 1p = 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319a = -3b = 27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575#NIST P-521p = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151a = -3b = 1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984 SageMath取椭圆曲线上随机⼀点:E = EllipticCurve(GF(p),[a,b])E.random_point() #取椭圆曲线E上随机⼀点sagemath计算椭圆曲线上的离散对数问题(数据量不能太⼤)a = 1234577b = 3213242p = 7654319E = EllipticCurve(GF(p),[a,b])G = E(5234568, 2287747) #⽣成元#k = 1584718K = E(2366653, 1424308) #公钥#求解私钥,⾃动选择bsgs或Pohlig Hellman算法discrete_log(K,G,operation='+')#求解私钥,Pollard rho算法discrete_log_rho(K,G,operation='+')#求解私钥,Pollard Lambda算法,能够确定所求值在某⼀⼩范围时效率较⾼discrete_log_lambda(K,G,(1500000,2000000),operation='+')使⽤openssl查看ECC的pem密钥⽂件信息#查看ECC私钥信息openssl ec -in p384-key.pem -text -noout#查看ECC公钥信息openssl ec -pubin -in public.pem -text -noout。
椭圆曲线技术工作原理解析
椭圆曲线技术工作原理解析
大多数加密资产使用与比特币完全相同的椭圆曲线,称为secp256k1 。
这使得重新使用比特币的许多椭圆曲线库和工具成为可能。
椭圆曲线密码学(英语:Elliptic Curve Cryptography,缩写为ECC)是一种基于椭圆曲线数学的公开密钥加密算法。
下图示例大多数加密资产使用与比特币完全相同的椭圆曲线,称为secp256k1 。
这使得重新使用比特币的许多椭圆曲线库和工具成为可能。
椭圆曲线技术用于创建由私钥派生出来的公钥。
椭圆曲线技术工作原理
以一个随机生成的数字_k_的私钥开始,我们通过将它乘以称为_generator point_ G_的曲线上的预定点,在曲线上的其他位置产生另一个点,这是相应的公钥_K。
生成点被指定为+secp256k1+标准的一部分,对于+secp256k1+的所有实现始终相同,并且从该曲线派生的所有密钥都使用相同的点_G_:
K = k * G
k 是私钥
G 是预定点
K 是生成的公钥,曲线上的某一点
由于所有比特币用户曲线上的预定点总是相同的,私钥k乘以G将得到的公钥K始终相同.k和K之间的关系是固定的,但这种情况只存在于单向运算,即只能从k到K。
这就是比特币地址(从K派生)可以与任何人共享并且不会泄露用户的私钥(k)的原因。
为了将一个点与整数相乘可视化,我们将使用比实数更简单的椭圆曲线来描述,旨在找到曲线上的预定点G的多个kG。
这个运算逻辑与将G自身连续相加k次相同。
在椭圆曲线中,向自身添加一个点相当于在点上绘制切线并再次找到它与曲线相交的位置,然后在x轴上反映该点。
椭圆曲线加密示例
椭圆曲线密码椭圆曲线取y^2=x^3+4x+20 mod 29因为素数p=29比较小,可以穷举计算出来它有37个解点,(0,7),(0,22),(1,5),(1,24),(2,6),(2,23),(3,1),(3,28),(4,19),(4,10),(5,7),(5,22),(6,12),(6,17),(8,10),(8,19),(10,4),(10,25),(13,23),(13,6), (14,6),(14,23),(15,2),(15,27),(16,2),(16,27),(17,10),(17,19), (19,16),(19,13),(20,3),(20,26), (24,7), (24,22), (27,2), (27,27),I=(Infinity,Infinity)现在ECC加密。
公开描述参数T=(p=29,a=4,b=20,G=(13,23),n=37,h=1)。
这里取的是G=(13,23)做循环群E的生成元,E为37阶群,由上面37个解点组成。
p和n比较小,可以穷举计算出来G的1-n次方,也就是循环群E的元素:G = (13, 23), 2G = (27, 27), 3 G = (24, 7), 4 G = (20, 3),5G = (16, 27), 6 G = (5, 7), 7 G = (15, 2), 8 G = (17, 19),9G = (0, 22), 10 G = (10, 4), 11 G = (1, 24), 12 G = (14, 23),13 G = (2, 6), 14 G = (8, 19), 15 G = (4, 19), 16 G = (19, 13),17 G = (3, 28), 18 G = (6, 17), 19 G = (6, 12), 20 G = (3, 1),21G = (19, 16), 22 G = (4, 10), 23 G = (8, 10), 24 G = (2, 23),25G = (14, 6), 26 G = (1, 5), 27G = (10, 25), 28 G = (0, 7),29G = (17, 10), 30 G = (15, 27), 31 G = (5, 22), 32 G = (16, 2),33G = (20, 26), 34 G = (24, 22), 35 G = (27, 2), 36 G = (13, 6),37 G = I现在开始加密。
椭圆曲线加密算法代码
椭圆曲线加密算法代码及解析在椭圆曲线加密中,利用了某种特殊形式的椭圆曲线,即定义在有限域上的椭圆曲线。
其方程如下:y2=x3+ax+b(mod p)这里p是素数,a和b为两个小于p的非负整数,它们满足:4a3+27b2(mod p)≠0 其中,x,y,a,b ∈Fp,则满足式(2)的点(x,y)和一个无穷点O就组成了椭圆曲线E。
椭圆曲线离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对 Q=kP,在已知P,Q的情况下求出小于p的正整数k。
现在我们描述一个利用椭圆曲线进行加密通信的过程: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(将M转化为十进制整数m,然后令椭圆曲线中点的横坐标为m,根据曲线方程计算出纵坐标,便得到了一个点。
),并产生一个随机整数r(r<n)。
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进行解码就可以得到明文。
过程分析:1、将给出的椭圆上的两点G,K相加求得第三点M。
P跟Q有两种情况。
分P=Q 和P不等于Q时。
2、求M的过程中进行求模运算。
第一,将分数利用最小公倍数求模。
第二,负数求模,先将负号拿出来,求完再将负号加上。
根据公式将λ解出。
3、将X3Y3求出。
循环算出nG,求出C1C2(密文)。
C1=rG,C2=M+rK。
M为明文,公开密钥K=kG代码部分:#include <iostream>using namespace std;//求两数的最小公倍数int f1(int a, int b){int c=a;while( c%a!=0 || c%b!=0)c++;return c;}//求modint mod (int a, int b){int c;if(a>0)c=a%b;else{while(a<b)a=a+b;c=a%b;}return c;}//求λint f2(int x1,int y1,int x2,int y2,int a,int p) {int b,b1,b2,q;//b1为分子,b2为分母if( x1==x2 && y1==y2)//如果λ两点相等{b1=3*x1*x1+a;b2=2*y1;if(b1<0)b1=-mod(-b1,p);elseb1=mod(b1,p);if(b2<0){b2=mod(-b2,p);q=-f1(b2,p+1)/b2;}else{b2=mod(b2,p);q=f1(b2,p+1)/b2;}b2=f1(b2,p+1)/b2;b=b1*b2;b=mod(b,p);}else{b1=y2-y1;b2=x2-x1;if(b1<0)b1=-mod(-b1,p);elseb1=mod(b1,p);if(b2<0){b2=mod(-b2,p);q=-f1(b2,p+1)/b2;}else{b2=mod(b2,p);q=f1(b2,p+1)/b2;}b=b1*q;b=mod(b,p);}return b;}//求两点横坐标的和int sumx(int x1,int y1,int x2,int y2,int k,int a,int p){int x3,y3,i;if(k==1){x3=(f2(x1,y1,x2,y2,a,p))*(f2(x1,y1,x2,y2,a,p))-x1-x2;x3=mod(x3,p);}else{for(i=1;i<=k-1;i++){x3=(f2(x1,y1,x2,y2,a,p))*(f2(x1,y1,x2,y2,a,p))-x1-x2;x3=mod(x3,p);y3=(f2(x1,y1,x2,y2,a,p)*(x1-x3))-y1;y3=mod(y3,p);x2=x1;x1=x3;y2=y1;y1=y3;}}return x3;}//求两点纵坐标的和int sumy(int x1,int y1,int x2,int y2,int k,int a,int p){int x3,y3,i,u=x1,v=y1,m=x2,n=y2;if(k==1){x3=f2(u,v,m,n,a,p)*f2(u,v,m,n,a,p)-u-m;x3=mod(x3,p);y3=f2(u,v,m,n,a,p)*(u-x3)-v;y3=mod(y3,p);}else{for(i=1;i<=k-1;i++){x3=f2(u,v,m,n,a,p)*f2(u,v,m,n,a,p)-u-m;x3=mod(x3,p);y3=f2(u,v,m,n,a,p)*(u-x3)-v;y3=mod(y3,p);m=x1;u=x3;n=y1;v=y3;}}return y3;}//加密过程void encry(int x1,int y1,int x2,int y2,int k, int a, int p,int r) {int c1x,c1y,bx,by,bx1,by1,mbx,mby;c1x=sumx(x1,y1,x1,y1,r,a,p);c1y=sumy(x1,y1,x1,y1,r,a,p);bx1=sumx(x1,y1,x1,y1,k,a,p);by1=sumy(x1,y1,x1,y1,k,a,p);bx=sumx(sumx(x1,y1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),sumx(x1,y 1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),r,a,p);by=sumy(sumx(x1,y1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),sumx(x1,y 1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),r,a,p);mbx=sumx(x2,y2,bx,by,1,a,p);mby=sumy(x2,y2,bx,by,1,a,p);cout<<"(C1,C2)="<<"(("<<c1x<<","<<c1y<<"),("<<mbx<<","<<mby<<"))" ;}void main(){cout<<"令曲线方程格式为y^2=x^3+ax+b"<<endl;int a,b,c,d,m,n,x,y,r;cout<<"请输入a的值:";cin>>a;cout<<"请输入b的值:";cin>>b;cout<<"请给定一个素数P:";cin>>c;cout<<"请给定一个秘密正数k:";cin>>d;cout<<"令曲线上点的格式为(x1,y1):"<<endl;cout<<"请输入x1的值:";cin>>m;cout<<"请输入y1的值:";cin>>n;cout<<"令消息的格式为(x2,y2)"<<endl;cout<<"请输入x2的值:";cin>>x;cout<<"请输入y2的值:";cin>>y;cout<<"请任选一个整数r:";cin>>r;cout<<"加密消息为:";encry(m,n,x,y,d,a,c,r);cout<<endl;}程序开始运行的界面:。
椭圆曲线加密算法ECC
椭圆曲线
平面上的椭圆曲线
从连续到离散
• 前面所述的椭圆曲线是连续的,并不适合用于加密;必须 把椭圆曲线变成离散的点
• 有限域Fp上:
– 有限域Fp中只有p(p为素数)个元素0,1,2 …… p-2,p-1; – 加法(a + b)法则: a + b ≡ c (mod p) – 乘法(a × b)法则是:a × b ≡ c (mod p) – 除法(a ÷ b)法则: a / b ≡ c (mod p) – 单位元是1,零元是 0
• 那椭圆曲线上有什么难题呢?
– 考虑K=kG ,其中 K,G为Ep(a , b)上的点,k为小于n(n是点G的 阶)的整数。
– 给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就 相对困难了。
– 点G:基点(base point) – k(k<n,n为基点G的阶):私有密钥(private key) – K:公有密钥(public key)
以上31bits总称为Data,是CDKey中的基本部分。
Microsoft软件序列号-椭圆曲线
ECC加密破译 – 传说中的注册机
ECC vs. RSA - 优缺点
• 优点
– 安全性能更高
• 160位ECC与1024位RSA、DSA有相同的安全强度
– 处理速度更快
• 在私钥的处理速度上,ECC远 比RSA、DSA快得多
椭圆曲线上的签名-软件注册保护
椭圆曲线上的签名-软件注册保护
椭圆曲线上的签名-软件注册保护
• 简单对比一下两个过程:
– 作者签名用到了:椭圆曲线Ep(a , b),基点G,私有密钥k,及随 机数r。
– 软件验证用到了:椭圆曲线Ep(a , b),基点G,公开密钥K。
椭圆曲线密码算法
安全协议的发展
标准化进程
推动椭圆曲线密码算法的标准化进程,制定相关的安全标准和规范 ,促进其在安全协议中的应用。
混合加密方案
将椭圆曲线密码算法与其他加密算法相结合,形成更为强大的混合 加密方案,提高安全协议的整体安全性。
安全协议的演进
随着网络威胁的不断变化,椭圆曲线密码算法将在安全协议的发展中 发挥重要作用,助力安全协议的不断演进和升级。
THANKS
感谢观看
椭圆曲线密码算法的优势
01
02
03
安全性高
由于椭圆曲线离散对数问 题的难解性,椭圆曲线密 码算法被认为是目前最安 全的公钥密码算法之一。
密钥长度短
相对于其他公钥密码算法 ,椭圆曲线密码算法使用 的密钥长度更短,提高了 加密和解密的效率。
适用于多种应用
椭圆曲线密码算法适用于 多种安全应用,如数字签 名、密钥协商和数据加密 等。
对称加密算法
与对称加密算法相比,椭圆曲线密码算法的安全性更高,因为它们基于更复杂的数学问题。然而,对称加密算法的加 密和解密速度更快。
哈希函数
与哈希函数相比,椭圆曲线密码算法具有更高的安全性,并且可以用于数字签名和身份验证等场景。然而,哈希函数 是不可逆的,不能用于加密和解密。
公钥基础设施(PKI)
与PKI相比,椭圆曲线密码算法的安全性更高,并且具有更小的密钥长度。然而,PKI已经得到了广泛的 应用和标准化,具有更高的兼容性和互操作性。
06
CATALOGUE
椭圆曲线密码算法的实际应用案例
数字签名
01 02 03
数字签名
椭圆曲线密码算法可用于生成数字签名,确保数据完整性 和来源可追溯性。通过使用私钥对数据进行加密,生成数 字签名,接收者可以使用公钥进行验证,确认数据是否被 篡改或伪造。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 椭圆曲线
设 P=(x ,y ),Q=( x , y ),P ≠ Q,则 P+Q=( x , y )由以下
11
2
2
3
3
规则确定:
1.1 椭圆曲线定义
椭圆曲线E是一个光滑的Weierstrass方程在P2(K)中的全部解
(x,y)的集合。K 为域,K 上的摄影平面 P2(K)是一些等价类的集
合{(X:Y:Z)}。
在用序列密码对媒体流加密时,网络数据包的大小可以根据 网络的需要来设定,与分组加密不同,这里需要考虑的仅仅是网 络传输的需求。
整个加密过程是:播放过程一旦开始,密钥流生成器就不断 地产生出密码序列,服务器也周期性地发送网络数据包。在数据 流化的过程中,将随机数序列与数据包中的明文序列进行逐位
本文分析了如何将常规加密技术运用在流媒体的传输过程 中,以达到保密传输的目的,我们在流媒体应用系统中运用了这 种加密方式,达到了较好的效果。 参考文献: [1] 方勇,刘嘉勇,信息系统安全导论,电子工业出版社. [2] Bruce Schneier, Applied Cryptography-Protocol, Algorithms and Source Code in C, John Wiley & Sons, Inc., New York, Second Edition, 1996 [3] Borko Furht, Darko Kirovski, Multimedia Security Handbook, http:/ /www.ee.cityu.edu.hk/ ̄gchen/pdf/chapter4.pdf , 2004.2. [4] Joan Daemen, Vincent Rijmen, AES Proposal:Rijndael,Available: http://csrc.nist.gov/cryptoToolkit/AES/Rijndael /Rijndael.PDF.
④依据 Bob 的公钥计算点(x , y )=kG(k 个 G 相加);
1
1
⑤计算点(x , y )=kQ,如果 x =0,则回到第③步;
2
2
2
⑥计算 C=m*x ; 2
⑦传送加密数据(x , y ,C)给Bob。
1
1
(2)Bob的解密过程
(阶)。经过计算得 n=223。 经过上面算法的验证,得知 n=223 是一个素数,所以点 v 可
p
2
②通过计算 m = C x -1= 1 3 6 * 1 1 0 = 1 9 0 ,恢复出明文数据 2
m=190。
WITNESS(a,n)
[下转55页]
2004.11
57
加 密 技 术
性最好。因此,序列密码适用于数据量大且实时性要求高的流媒 (字节)的异或运算后,再按照网络协议进行打包。解密端从网络 体加密,它也是目前军事、外交领域应用的一种主流密码体制。序 上收到数据包后,先进行解封装得到密文数据流,然后再与密钥 列密码是仿效“一次一密”的密码系统,只要产生的密码序列周 流进行异或运算得到明文。
0 引言
穷远点 0。
椭圆曲线密码体制与其他公钥密码体制相比,研究表明,对 1.2椭圆曲线的运算规则
于椭圆曲线密码160bit 长的密钥所具有的安全性与RSA或DSA中
椭圆曲线上的加法运算如下:如果其上的三个点位于同一直
1024bit 长的密钥所具有的安全性相当,抗攻击性强。并且,在 线上 ,那么它们的和为 0。
设 x=X/Z,y=Y/Z,于是原方程转化为:
y2+a xy+a y=x3+a x2+a x+a …… (1)
1
3
2
4
6
此时,椭圆曲线 E 就是方程(1)在摄影平面 P2(K)上的全部
解,外加一个无穷远点 0 组成的集合。
常用的椭圆曲线方程为:当特征值为大于 3的素数时,椭圆
椭圆曲线方程为E (1,1):y2=x3+x+1。在文献[6]里讲述了基点的 211
选取算法,但并非所有的椭圆曲线上的点都可以做基点,还需要 验证该点的周期是不是一个素数。在这篇文章里,先计算椭圆曲
②计算点 Q=dG(d 个 G 相加),通过计算得 Q=(32,27); ③Bob公开自己的公开密钥——(E(F ),G,n,Q);
却是困难的,这就是椭圆曲线的离散对数问题,可以应用于公钥
(3)设 P 和 Q 是椭圆曲线上 x 坐标不同的点。Q+P 的定义如
密码体制。本文,给出了一个具体的实例来说明椭圆曲线的密码 下:画一条通过 Q,P 的直线与椭圆曲线交于 R’。由 Q+P+ R’=0
体制。
得 Q+P=- R’即 Q+P=R。如图 1 所示。
加 密 技 术
椭圆曲线加密算法 及实例分析
李俊芳 崔建双 北京科技大学管理学院 北京 100083
摘要:椭圆曲线密码体制的研究与实现已逐渐成为公钥密码体制研究的主流,其数学基础是利用椭圆 曲线上的有理点构成的Abelian加法群构造的离散对数的计算困难性。在本文中,详细阐述了椭圆曲线 的加法运算规则、椭圆曲线的密码体制,并列出了一个具体的实例来实现椭圆曲线密码体制。 关键词:椭圆曲线密码体制;基点;阶
p
④ Bob 的私钥为整数 d=112。
线的阶(椭圆曲线上的整数点数),该过程略过,直接给出结果;
Alice 要发送消息 m 给 Bob,Alice 执行:
然后再去寻找基点,验证基点的阶(周期)是不是一个大的素数; 接下来进行椭圆曲线的加密解密。
2.2.1基点的选取
①查找 Bob 的公钥(E(F ),G,n,Q); p
56
2004.11
加 密 技 术
2.1 椭圆曲线密码体制思想
选取基域 F ,选择一条椭圆曲线(a,b,p值给定),在E(F )中
q
q
选一个周期很大的点,如选了一个点 G=(x , y ),它的周期为一
G
G
个很大的素数 n,记为∏(p)=n(n 为素数)。在椭圆曲线密码体制
①将 n-1 表示为二进制形式 b b …b ;
曲线的方程表示为:
E: y2=x3+ax+b
其中,a,b ∈F ,且 4a3+27b2≠ 0,则 F 上的椭圆曲线 E被定义
q
q
为由参数 a 和 b 决定的点 q=(x,y)的集合,此外,E 还包括一个无
图 1 y2 =x3-x
本文由教育部科学技术研究重点项目“关于企业信息安全体系的研究”资助(01021)。作者简介:李俊芳(1978-),女,北京科技大学管理学院硕 士研究生,研究方向:安全电子商务。崔建双(1961-),男,北京科技大学管理学院副教授,研究方向:管理信息系统、安全电子商务。
Alice 要发送消息 m 给 Bob,Alice 执行:
①查找 Bob 的公钥(E(F ),G,n,Q); q
②将 m 表示成一个域元素 m ∈ F ; q
③在区间[1,n-1]内选取一个随机数 k;
比如:椭圆曲线方程 E (1,1):y2 =x3+x+1 椭圆曲线的点 211
群阶为 223,椭圆曲线上整数点有 222 个,还有一个无穷远点 0。 任取一点v(2,86), 然后计算椭圆该点的周期。其基本思想为:利 用前面介绍的加法运算规律,计算使 nv=0的 n值即为点 v的周期
④依据 Bob 的公钥计算点(x , y )=kG(k 个 G 相加),
1
1
得(x , y )=57(2,86)=(36,189);
1
1
⑤计算点(x , y )=kQ,得(x , y )=kQ=57(32,27)=(94,129),
2
2
22
如果 x =0,则回到第③步; 2
⑥计算 C=m*x =190*94=136; 2
以看作是基点 G。
2.2.2针对具体的椭圆曲线按照上面提到的密码体制思 想进行加密
Bob 收到 Alice 的密文(x , y ,C)后,执行:
1
1
①使用私钥d,计算点(x , y )=d(x , y ),在计算F 中x -1=?
2
2
1
1
q
2
②通过计算 m=Cx -1,恢复出明文数据 m 。 2
2.2举例实现椭圆曲线的密码体制
1
1
(4)点 Q的倍数定义如下:在Q点作椭圆曲线的一条切线,设
切线与椭圆曲线交于点 S,定义 2Q=Q+Q=-S,类似的可定义 3Q=
(1)在椭圆曲线 E 上恰有一个点,称之为无穷远点。即(0: Q + Q + Q +,…,等。
1:0)用 0 表示。
2 椭圆曲线密码体制
(2)可用非齐次坐标的形式来表示椭圆曲线的Weierstrass方程:
期足够长,随机性和不可预测性足够好,便可近似地实现理想的 5 结束语
保密体制。 下面就来研究如何用序列密码对流媒体进行加密。 使用序列密码加密,首先要把明文信息如文本、图像、声音
等排成明文序列,再将它与密钥序列逐字节(位)进行“异或”运 算生成密文序列,接收者用相同的密钥序列对密文序列进行“异 或”运算来恢复明文。
if b =1 then d←(d×a)modn } i
if d≠1 then return true ;
②计算点 Q=dG(d 个 G 相加);
return false;
③Bob公开自己的公开密钥——(E(F ),G,n,Q); q
④ Bob 的私钥为整数 d。
n是待检验的数,a是小于n的整数。如果返回值是false,则 n 有可能是素数。如果返回值是 true,则 n肯定不是素数。
The Application of Cryptographic Techniques in Secure Transmission of Streaming Media Chen Daomin1 Zhou Jinquan2 1PLA University ofForeign Languages, Henan 471003 2Kunming Military Academy, Yunnan 650207 Abstract:In this paper, after analyzing the encrypting features of streaming media, we deeply research on how to encrypt the streaming media data by using block cipher and stream cipher respectively. Keywords:Streaming Media;Encryption;Block Cipher;Stream Cipher