‘壹’ 首次将椭圆曲线用于密码学,建立公开密钥加密的演算法是在那一年
椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。
椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。
椭圆曲线密码学:
椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射。
基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。其缺点是同长度密钥下加密和解密操作的实现比其他机制花费的时间长。
但由于可以使用更短的密钥达到同级的安全程度,所以同级安全程度下速度相对更快。一般认为160比特的椭圆曲线密钥提供的安全强度与1024比特RSA密钥相当。
‘贰’ 理解椭圆曲线加密算法
椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。
一般椭圆曲线方程式表示为:(其中a,b,c,d为系数)
> y2=ax3+ bx2+cx+d
典型的椭圆曲线如:y2=x3−4x2+16
先摆一个栗子:
小米很难算到的那个数,就是公钥密码算法中的私钥(一个公钥密码算法安全的必要条件(非充分)是“由公钥不能反推出私钥”),公钥密码算法最根本的原理是利用信息的不对称性:即掌握私钥的人在整个通信过程中掌握最多的信息。
椭圆曲线加密算法是一个基于加法阶数难求问题的密码方案。 对于椭圆曲线来讲,椭圆曲线的基点就是例子里面的5,而私钥就是基点的加法阶数(例子里面的11),公钥是基点(5)进行对应阶数的加法(11次)得到的结果(55)。
简单描述就是:G * k = K (G,K公开,k保密)
上述例子相对简单,椭圆曲线加密算法里的加法建立在 “有限域上的二元三次曲线上的点”上 ,组成一个“有限加法循环群”。具体的说,这个加法的几何定义如下图,两个点的加法结果是指这两点的连线和曲线的交点关于x轴的镜像。
如果我们从某一点出发(所谓的单位元,比如正整数域的1,代表一个空间里的最基本单元),不停做自增操作(所谓群操作,比如++),枚举出整个空间的集合元素。如图:
因此给定椭圆曲线的某一点G,从G出发,不停做切线,找对称点,依次得到-2G,2G,-4G,4G,-8G,8G... 。即:当给定G点时,已知x,求xG点并不困难。反之,已知xG点,求x则非常困难。即Q = NG,N就是我们的私钥,Q就是我们的公钥。
现在我们知道了公钥(Q)和私钥(N)的生成的原理,我们在看看椭圆曲线数字签名算法(ECDSA)的过程,椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。
私钥主要用于 签名,解密 ;公钥主要用于 验签,加密 ,可以通过私钥可以计算出公钥,反之则不行。
公钥加密:公钥加密的内容可以用私钥来解密——只有私钥持有者才能解密。
私钥签名:私钥签名的内容可以用公钥验证。公钥能验证的签名均可视为私钥持有人所签署。
通常需要六个参数来描叙一个特定的椭圆曲线:T = (p, a, b, G, n, h).
p: 代表有限域Fp的那个质数 a,b:椭圆方程的参数 G: 椭圆曲线上的一个基点G = (xG, yG) n:G在Fp中规定的序号,一个质数。 h:余因数(cofactor),控制选取点的密度。h = #E(Fp) / n。
这里以secp256k1曲线(比特币签名所使用的曲线)为例介绍一下公私钥对的产生的过成。
secp256k1的参数为:
本质上ECDSA的私钥就是一个随机数满足在曲线G的n阶里及k∈(0,n),根据Q=kG可以计算出公钥,生成的私钥一般为32字节大小,公钥通常为64个字节大小。如:
ECDSA签名算法的输入是数据的哈希值,而不是数据的本身,我们假设用户的密钥对:(d, Q);(d为私钥,Q为公钥) 待签名的信息:M; e = Hash(M);签名:Signature(e) = ( r, s)。
签名接口:
验证接口:
一个例子:
‘叁’ ECC椭圆曲线加密算法(一)
btc address:
eth address:
随着区块链的大热,椭圆曲线算法也成了密码学的热门话题。在Bitcoin 生成地址 中使用到了椭圆曲线加密算法。
椭圆曲线的一般表现形式:
椭圆曲线其实不是椭圆形的,而是下面的图形:
Bitcoin使用了 secp256k1 这条特殊的椭圆曲线,公式是:
这个东西怎么加密的呢?
19世纪挪威青年 尼尔斯·阿贝尔 从普通的代数运算中,抽象出了加群(也叫阿贝尔群或交换群),使得在加群中,实数的算法和椭圆曲线的算法得到了统一。是什么意思呢?
我们在实数中,使用的加减乘除,同样可以用在椭圆曲线中!
对的,椭圆曲线也可以有加法、乘法运算。
数学中的群是一个集合,我们为它定义了一个二元运算,我们称之为“加法”,并用符号 + 表示。假定我们要操作的群用𝔾表示,要定义的 加法 必须遵循以下四个特性:
如果在增加第5个条件:
交换律:a + b = b + a
那么,称这个群为阿贝尔群。根据这个定义整数集是个阿贝尔群。
岔开一下话题, 伽罗瓦 与 阿贝尔 分别独立的提出了群论,他们并称为现代群论的创始人,可惜两位天才都是英年早逝。
如上文所说,我们可以基于椭圆曲线定义一个群。具体地说:
在椭圆曲线上有 不重合且不对称的 A 、B两点,两点与曲线相交于X点, X与 x轴 的对称点为R,R即为 A+B 的结果。这就是椭圆曲线的加法定义。
因为椭圆曲线方程存在 项,因此椭圆曲线必然关于x轴对称
曲线: ,
坐标:A=(2,5),B=(3,7)
A、B正好在曲线上,因为坐标满足曲线公式
那如何找到相交的第三个点呢?
通过 A、B两点确定直线方程,
设直线方程: ,m为直线的斜率
进一步得到c=1。
联立方程:
X(-1,-1)的x坐标-1代入方式正好满足方程,所以A、B两点所在直线与曲线相交于 X(-1,-1),则点X的关于x轴的对称点为R(-1,1),即A(2,5)+B(3,5)=R(-1,1)。
根据椭圆曲线的 群律(GROUP LAW) 公式,我们可以方便的计算R点。
曲线方程:
当A=(x1,y1),B=(x2,y2) ,R=A+B=(x3,y3),x1≠x2时,
, m是斜率
x3=
y3=m(x1-x3)-y1
A=(2,5), B=(3,7) , R=(-1,1) 符合上面的公式。
椭圆曲线加法符合交换律么?
先计算(A+B),在计算 A+B+C
先计算B+C, 在计算 B+C+A
看图像,计算结果相同,大家手动算下吧。
那 A + A 呢, 怎么计算呢?
当两点重合时候,无法画出 “过两点的直线”,在这种情况下,
过A点做椭圆曲线的切线,交于X点,X点关于 x轴 的对称点即为 2A ,这样的计算称为 “椭圆曲线上的二倍运算”。
下图即为椭圆曲线乘法运算:
我们将在 ECC椭圆曲线加密算法(二) 介绍有限域,椭圆曲线的离散对数问题,椭圆曲线加密就是应用了离散对数问题。
参考:
https://eng.paxos.com/blockchain-101-foundational-math
https://eng.paxos.com/blockchain-101-elliptic-curve-cryptography
https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introction/
‘肆’ 椭圆加密算法的方程
椭圆曲线密码体制来源于对椭圆曲线的研究,所谓椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程:
y2+a1xy+a3y=x3+a2x2+a4x+a6 (1)
所确定的平面曲线。其中系数ai(I=1,2,…,6)定义在某个域上,可以是有理数域、实数域、复数域,还可以是有限域GF(pr),椭圆曲线密码体制中用到的椭圆曲线都是定义在有限域上的。
椭圆曲线上所有的点外加一个叫做无穷远点的特殊点构成的集合连同一个定义的加法运算构成一个Abel群。在等式
mP=P+P+…+P=Q (2)
中,已知m和点P求点Q比较容易,反之已知点Q和点P求m却是相当困难的,这个问题称为椭圆曲线上点群的离散对数问题。椭圆曲线密码体制正是利用这个困难问题设计而来。椭圆曲线应用到密码学上最早是由Neal Koblitz 和Victor Miller在1985年分别独立提出的。
椭圆曲线密码体制是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。解椭圆曲线上的离散对数问题的最好算法是Pollard rho方法,其时间复杂度为,是完全指数阶的。其中n为等式(2)中m的二进制表示的位数。当n=234, 约为2117,需要1.6x1023 MIPS 年的时间。而我们熟知的RSA所利用的是大整数分解的困难问题,目前对于一般情况下的因数分解的最好算法的时间复杂度是子指数阶的,当n=2048时,需要2x1020MIPS年的时间。也就是说当RSA的密钥使用2048位时,ECC的密钥使用234位所获得的安全强度还高出许多。它们之间的密钥长度却相差达9倍,当ECC的密钥更大时它们之间差距将更大。更ECC密钥短的优点是非常明显的,随加密强度的提高,密钥长度变化不大。
德国、日本、法国、美国、加拿大等国的很多密码学研究小组及一些公司实现了椭圆曲线密码体制,我国也有一些密码学者
做了这方面的工作。许多标准化组织已经或正在制定关于椭圆曲线的标准,同时也有许多的厂商已经或正在开发基于椭圆曲线的产品。对于椭圆曲线密码的研究也是方兴未艾,从ASIACRYPTO’98上专门开辟了ECC的栏目可见一斑。
在椭圆曲线密码体制的标准化方面,IEEE、ANSI、ISO、IETF、ATM等都作了大量的工作,它们所开发的椭圆曲线标准的文档有:IEEE P1363 P1363a、ANSI X9.62 X9.63、 ISO/IEC14888等。
2003年5月12日中国颁布的无线局域网国家标准 GB15629.11 中,包含了全新的WAPI(WLAN Authentication and Privacy Infrastructure)安全机制,能为用户的WLAN系统提供全面的安全保护。这种安全机制由 WAI和WPI两部分组成,分别实现对用户身份的鉴别和对传输的数据加密。WAI采用公开密钥密码体制,利用证书来对WLAN系统中的用户和AP进行认证。证书里面包含有证书颁发者(ASU)的公钥和签名以及证书持有者的公钥和签名,这里的签名采用的就是椭圆曲线ECC算法。
加拿大Certicom公司是国际上最着名的ECC密码技术公司,已授权300多家企业使用ECC密码技术,包括Cisco 系统有限公司、摩托罗拉、Palm等企业。Microsoft将Certicom公司的VPN嵌入微软视窗移动2003系统中。
以下资料摘自:http://www.hids.com.cn/data.asp
‘伍’ 椭圆曲线加密算法
椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。
椭圆曲线在密码学中的使用,是1985年由Neal Koblitz和Victor Miller分别独立提出的。
一般情况下,椭圆曲线可用下列方程式来表示,其中a,b,c,d为系数。
例如,当a=1,b=0,c=-2,d=4时,所得到的椭圆曲线为:
该椭圆曲线E的图像如图X-1所示,可以看出根本就不是椭圆形。
过曲线上的两点A、B画一条直线,找到直线与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A+B,即为加法。如下图所示:A + B = C
上述方法无法解释A + A,即两点重合的情况。因此在这种情况下,将椭圆曲线在A点的切线,与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A + A,即2A,即为二倍运算。
将A关于x轴对称位置的点定义为-A,即椭圆曲线的正负取反运算。如下图所示:
如果将A与-A相加,过A与-A的直线平行于y轴,可以认为直线与椭圆曲线相交于无穷远点。
综上,定义了A+B、2A运算,因此给定椭圆曲线的某一点G,可以求出2G、3G(即G + 2G)、4G......。即:当给定G点时,已知x,求xG点并不困难。反之,已知xG点,求x则非常困难。此即为椭圆曲线加密算法背后的数学原理。
椭圆曲线要形成一条光滑的曲线,要求x,y取值均为实数,即实数域上的椭圆曲线。但椭圆曲线加密算法,并非使用实数域,而是使用有限域。按数论定义,有限域GF(p)指给定某个质数p,由0、1、2......p-1共p个元素组成的整数集合中定义的加减乘除运算。
假设椭圆曲线为y² = x³ + x + 1,其在有限域GF(23)上时,写作:y² ≡ x³ + x + 1 (mod 23)
此时,椭圆曲线不再是一条光滑曲线,而是一些不连续的点,如下图所示。以点(1,7)为例,7² ≡ 1³ + 1 + 1 ≡ 3 (mod 23)。如此还有如下点:
(0,1) (0,22)(1,7) (1,16)(3,10) (3,13)(4,0)(5,4) (5,19)(6,4) (6,19)(7,11) (7,12)(9,7) (9,16)(11,3) (11,20)等等。
另外,如果P(x,y)为椭圆曲线上的点,则-P即(x,-y)也为椭圆曲线上的点。如点P(0,1),-P=(0,-1)=(0,22)也为椭圆曲线上的点。
相关公式如下:有限域GF(p)上的椭圆曲线y² = x³ + ax + b,若P(Xp, Yp), Q(Xq, Yq),且P≠-Q,则R(Xr,Yr) = P+Q 由如下规则确定:
Xr = (λ² - Xp - Xq) mod pYr = (λ(Xp - Xr) - Yp) mod p其中λ = (Yq - Yp)/(Xq - Xp) mod p(若P≠Q), λ = (3Xp² + a)/2Yp mod p(若P=Q)
因此,有限域GF(23)上的椭圆曲线y² ≡ x³ + x + 1 (mod 23),假设以(0,1)为G点,计算2G、3G、4G...xG等等,方法如下:
计算2G:λ = (3x0² + 1)/2x1 mod 23 = (1/2) mod 23 = 12Xr = (12² - 0 - 0) mod 23 = 6Yr = (12(0 - 6) - 1) mod 23 = 19即2G为点(6,19)
计算3G:3G = G + 2G,即(0,1) + (6,19)λ = (19 - 1)/(6 - 0) mod 23 = 3Xr = (3² - 0 - 6) mod 23 = 3Yr = (3(0 - 3) - 1) mod 23 = 13即3G为点(3, 13)
建立基于椭圆曲线的加密机制,需要找到类似RSA质因子分解或其他求离散对数这样的难题。而椭圆曲线上的已知G和xG求x,是非常困难的,此即为椭圆曲线上的的离散对数问题。此处x即为私钥,xG即为公钥。
椭圆曲线加密算法原理如下:
设私钥、公钥分别为k、K,即K = kG,其中G为G点。
公钥加密:选择随机数r,将消息M生成密文C,该密文是一个点对,即:C = {rG, M+rK},其中K为公钥
私钥解密:M + rK - k(rG) = M + r(kG) - k(rG) = M其中k、K分别为私钥、公钥。
椭圆曲线签名算法,即ECDSA。设私钥、公钥分别为k、K,即K = kG,其中G为G点。
私钥签名:1、选择随机数r,计算点rG(x, y)。2、根据随机数r、消息M的哈希h、私钥k,计算s = (h + kx)/r。3、将消息M、和签名{rG, s}发给接收方。
公钥验证签名:1、接收方收到消息M、以及签名{rG=(x,y), s}。2、根据消息求哈希h。3、使用发送方公钥K计算:hG/s + xK/s,并与rG比较,如相等即验签成功。
原理如下:hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s= r(h+xk)G / (h+kx) = rG
假设要签名的消息是一个字符串:“Hello World!”。DSA签名的第一个步骤是对待签名的消息生成一个消息摘要。不同的签名算法使用不同的消息摘要算法。而ECDSA256使用SHA256生成256比特的摘要。
摘要生成结束后,应用签名算法对摘要进行签名:
产生一个随机数k
利用随机数k,计算出两个大数r和s。将r和s拼在一起就构成了对消息摘要的签名。
这里需要注意的是,因为随机数k的存在,对于同一条消息,使用同一个算法,产生的签名是不一样的。从函数的角度来理解,签名函数对同样的输入会产生不同的输出。因为函数内部会将随机值混入签名的过程。
关于验证过程,这里不讨论它的算法细节。从宏观上看,消息的接收方从签名中分离出r和s,然后利用公开的密钥信息和s计算出r。如果计算出的r和接收到的r值相同,则表示验证成功。否则,表示验证失败。
‘陆’ 非对称加密算法 (RSA、DSA、ECC、DH)
非对称加密需要两个密钥:公钥(publickey) 和私钥 (privatekey)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。
非对称加密算法的保密性好,它消除了最终用户交换密钥的需要。但是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。
算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
RSA、Elgamal、背包算法、Rabin、D-H、ECC (椭圆曲线加密算法)。使用最广泛的是 RSA 算法,Elgamal 是另一种常用的非对称加密算法。
收信者是唯一能够解开加密信息的人,因此收信者手里的必须是私钥。发信者手里的是公钥,其它人知道公钥没有关系,因为其它人发来的信息对收信者没有意义。
客户端需要将认证标识传送给服务器,此认证标识 (可能是一个随机数) 其它客户端可以知道,因此需要用私钥加密,客户端保存的是私钥。服务器端保存的是公钥,其它服务器知道公钥没有关系,因为客户端不需要登录其它服务器。
数字签名是为了表明信息没有受到伪造,确实是信息拥有者发出来的,附在信息原文的后面。就像手写的签名一样,具有不可抵赖性和简洁性。
简洁性:对信息原文做哈希运算,得到消息摘要,信息越短加密的耗时越少。
不可抵赖性:信息拥有者要保证签名的唯一性,必须是唯一能够加密消息摘要的人,因此必须用私钥加密 (就像字迹他人无法学会一样),得到签名。如果用公钥,那每个人都可以伪造签名了。
问题起源:对1和3,发信者怎么知道从网上获取的公钥就是真的?没有遭受中间人攻击?
这样就需要第三方机构来保证公钥的合法性,这个第三方机构就是 CA (Certificate Authority),证书中心。
CA 用自己的私钥对信息原文所有者发布的公钥和相关信息进行加密,得出的内容就是数字证书。
信息原文的所有者以后发布信息时,除了带上自己的签名,还带上数字证书,就可以保证信息不被篡改了。信息的接收者先用 CA给的公钥解出信息所有者的公钥,这样可以保证信息所有者的公钥是真正的公钥,然后就能通过该公钥证明数字签名是否真实了。
RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。
A 要把信息发给 B 为例,确定角色:A 为加密者,B 为解密者。首先由 B 随机确定一个 KEY,称之为私钥,将这个 KEY 始终保存在机器 B 中而不发出来;然后,由这个 KEY 计算出另一个 KEY,称之为公钥。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。接下来通过网络把这个公钥传给 A,A 收到公钥后,利用公钥对信息加密,并把密文通过网络发送到 B,最后 B 利用已知的私钥,就能对密文进行解码了。以上就是 RSA 算法的工作流程。
由于进行的都是大数计算,使得 RSA 最快的情况也比 DES 慢上好几倍,无论是软件还是硬件实现。速度一直是 RSA 的缺陷。一般来说只用于少量数据加密。RSA 的速度是对应同样安全级别的对称密码算法的1/1000左右。
比起 DES 和其它对称算法来说,RSA 要慢得多。实际上一般使用一种对称算法来加密信息,然后用 RSA 来加密比较短的公钥,然后将用 RSA 加密的公钥和用对称算法加密的消息发送给接收方。
这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,否则的话可以越过 RSA 来直接攻击对称密码。
和其它加密过程一样,对 RSA 来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡中间人攻击。假设 A 交给 B 一个公钥,并使 B 相信这是A 的公钥,并且 C 可以截下 A 和 B 之间的信息传递,那么 C 可以将自己的公钥传给 B,B 以为这是 A 的公钥。C 可以将所有 B 传递给 A 的消息截下来,将这个消息用自己的密钥解密,读这个消息,然后将这个消息再用 A 的公钥加密后传给 A。理论上 A 和 B 都不会发现 C 在偷听它们的消息,今天人们一般用数字认证来防止这样的攻击。
(1) 针对 RSA 最流行的攻击一般是基于大数因数分解。1999年,RSA-155 (512 bits) 被成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G 中央内存的 Cray C916计算机上完成。
RSA-158 表示如下:
2009年12月12日,编号为 RSA-768 (768 bits, 232 digits) 数也被成功分解。这一事件威胁了现通行的1024-bit 密钥的安全性,普遍认为用户应尽快升级到2048-bit 或以上。
RSA-768表示如下:
(2) 秀尔算法
量子计算里的秀尔算法能使穷举的效率大大的提高。由于 RSA 算法是基于大数分解 (无法抵抗穷举攻击),因此在未来量子计算能对 RSA 算法构成较大的威胁。一个拥有 N 量子位的量子计算机,每次可进行2^N 次运算,理论上讲,密钥为1024位长的 RSA 算法,用一台512量子比特位的量子计算机在1秒内即可破解。
DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 DSS (DigitalSignature Standard)。 DSA 是基于整数有限域离散对数难题的。
简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名,如果数据和签名不匹配则认为验证失败。数字签名的作用就是校验数据在传输过程中不被修改,数字签名,是单向加密的升级。
椭圆加密算法(ECC)是一种公钥加密算法,最初由 Koblitz 和 Miller 两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成 Abel 加法群上椭圆离散对数的计算困难性。公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。
ECC 的主要优势是在某些情况下它比其他的方法使用更小的密钥 (比如 RSA),提供相当的或更高等级的安全。ECC 的另一个优势是可以定义群之间的双线性映射,基于 Weil 对或是 Tate 对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。
ECC 被广泛认为是在给定密钥长度的情况下,最强大的非对称算法,因此在对带宽要求十分紧的连接中会十分有用。
比特币钱包公钥的生成使用了椭圆曲线算法,通过椭圆曲线乘法可以从私钥计算得到公钥, 这是不可逆转的过程。
https://github.com/esxgx/easy-ecc
Java 中 Chipher、Signature、KeyPairGenerator、KeyAgreement、SecretKey 均不支持 ECC 算法。
https://www.jianshu.com/p/58c1750c6f22
DH,全称为"Diffie-Hellman",它是一种确保共享 KEY 安全穿越不安全网络的方法,也就是常说的密钥一致协议。由公开密钥密码体制的奠基人 Diffie 和 Hellman 所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。也就是由甲方产出一对密钥 (公钥、私钥),乙方依照甲方公钥产生乙方密钥对 (公钥、私钥)。
以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥 (SecretKey) 对数据加密。这样,在互通了本地密钥 (SecretKey) 算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯。
具体例子可以移步到这篇文章: 非对称密码之DH密钥交换算法
参考:
https://blog.csdn.net/u014294681/article/details/86705999
https://www.cnblogs.com/wangzxblog/p/13667634.html
https://www.cnblogs.com/taoxw/p/15837729.html
https://www.cnblogs.com/fangfan/p/4086662.html
https://www.cnblogs.com/utank/p/7877761.html
https://blog.csdn.net/m0_59133441/article/details/122686815
https://www.cnblogs.com/muliu/p/10875633.html
https://www.cnblogs.com/wf-zhang/p/14923279.html
https://www.jianshu.com/p/7a927db713e4
https://blog.csdn.net/ljx1400052550/article/details/79587133
https://blog.csdn.net/yuanjian0814/article/details/109815473
‘柒’ 非对称加密之ECC椭圆曲线(go语言实践)
椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。
椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的 困难性上。与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥。
ECC 164位的密钥产生的一个安全级相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度 更快,存储空间和传输带宽占用较少。目前我国 居民二代身份证 正在使用 256 位的椭圆曲线密码,虚拟 货币 比特币 也选择ECC作为加密算法。
具体算法详解参考:
‘捌’ 密码学相关知识梳理
密码学是研究编制密码和破译密码的技术科学。
密码学的历史最早可以追溯到几千年以前,古今中外都有密码学运用的记载,从历史看,战争很大程度给密码学提供了应用环境,推动了密码学的发展,密码学按照发展历程,大体可以分为三个阶段,手工加密、机械加密和计算机加密阶段,下面是近代密码学的一些重要进展。
1949年,信息论始祖克劳德·艾尔伍德·香农(Claude Elwood Shannon)发表了《保密系统的通信理论》一文,把密码学建立在严格的数学基础之上,奠定理论基础,从此成为真正的科学。
1976年,密码学专家惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)两人发表了《密码学的新方向》一文,解决了密钥管理的难题,把密钥分为加密的公钥和解密的私钥,提出了密钥交换算法Diffie-Hellman。
1977年,美国国家标准技术研究所制定数据加密标准(Data Encryption Standard ),将其颁布为国家标准。
1977年,麻省理工学院的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出RSA加密算法,RSA就是他们三人姓氏开头字母拼在一起组成的。
1997年4月,美国ANSI发起征集AES(advanced encryption standard)的活动,并为此成立了AES工作小组,经过几年的时间筛选,最终采用了由比利时的Joan Daemen和Vincent Rijmen设计的Rijndael算法,并在2002年5月26日成为有效的加密标准。
按密码体制划分:对称密码体制密码学和非对称密码体制密码学对应的有对称密码算法和非对称密码算法。
消息摘要算法又称散列算法,其核心在于散列函数的单向性,即通过散列函数可获得对应的散列值,但不可通过该散列值反推其原始信息,这是消息摘要算法的安全性的根本所在,我们通常使用该算法判断数据的完整性。
消息摘要算法我们常见比如MD(Message Digest)、SHA(Secure Hash Algorithm)、HMAC(Hash Message Authentication Code)等,常用于验证数据的完整性,是数字签名算法的核心算法。
我们以微信支付的接口调用分析一下摘要算法怎么应用的,首先可以打开微信支付如下相关文档:
微信支付统一下单接口文档
微信支付签名过程
对称加密简单的说就是加密和解密使用同一个密钥,解密算法是加密算法的逆运算。
对称加密算法主要有DES、DES算法的变种DESede、DES替代者AES算法、IDEA、PBE等
非对称加密算法称为双钥或公钥加密算法,跟对称加密算法不同的是,对称加密算法只一个密钥,非对称加密算法 一个公钥和一个私钥,一个用于加密,另外一个用于解密。
简单的说:一对密钥公钥A和私钥B,A加密只能B解密,B加密只能A解密。
非对称加密算法源于DH算法(Diffie-Hellman,密钥交换算法)由W.Diffie和 M.Hellman共同提出,该算法为非对称加密算法奠定了基础,下面我们先来了解下密钥交换算法DH和ECDH算法。
为什么需要密钥交换算法?前面我们提到对称加密算法加解密都是用同一个密钥,我们可以想一下,我们怎样能安全的把一个密钥给到对方呢?比如我们经常用到HTTPS,大家都说HTTPS加密了是安全的,那它加密的密钥怎么来的呢?很显然我们在访问一个https地址的时候,事先并没有密钥,访问过程中客户端跟服务端通过握手协议协商出来的密钥,如果服务端直接把密钥在网络上传输那肯定不安全的,所以这过程到底发生了什么?后面专门分析https的时候会详细写,这里先了解下该算法。
DH密钥交换算法的安全性基于有限域上的离散对数难题
ECDH密钥交换算法是基于椭圆曲线加密
从上面图中可以看出,DH&ECDH密钥交换算法交互双方都会向对方公开一部分信息,即所谓的公钥,这部分即使被别人拿到了也不会威胁到最终的密钥,这里很关键的一点是甲乙两方公布的公钥是不相同的,但是最终生成的密钥两边是一致的,这里是利用的算法原理,有兴趣的可以去查阅详细的算法公式,因为最终的密钥不需要传输给对方,所以很大程度保证安全性。
非对称加密算法:
比较典型的非对称加密算法有RSA、ECC、ElGamal,RSA算法基于大数因子分解难题,而ElGamal和ECC算法则是基于离散对数难题。
从上面消息传递模型我们可以看出,非对称加密算法遵循“私钥加密,公钥解密”和“公钥加密,私钥解密”的原则,但是有一点需要注意,公钥是公开的,所以用在什么场景是需要根据该算法的特征来考虑的,比如既然公钥是公开的,你用私钥加密敏感数据传递给第三方合适么?显然不合适,因为公钥公开的,别人都可以拿到公钥,也就意味着你加密的数据都可以解密,所以适合的场景比如私钥加密,公钥只是用来验证加密的内容,每个人都可以来验证,该场景是不在乎加密内容被其它攻击者看到的,甚至说内容本来就是公开的,对于接收者用公钥确保内容没有被篡改即可,所以我们通常说非对称算法“私钥签名,公钥验证签名”,另外一点,“公钥加密,私钥解密”,因为私钥只有我们自己手上有,所以理论上也只有我们自己可以解密,这样是安全的,https证书验证以及握手协议过程中会体现这一点。
数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说数字签名算法是非对称加密算法和消息摘要算法的结合体,遵循“私钥签名,公钥验证”的签名认证方式。
数字签名算法是公钥基础设施(Public Key Infrastructure,PKI)以及许多网络安全机制(SSL/TLS,VPN等)的基础。
数字签名算法要求能够验证数据完整性、认证数据来源,并起到抗否认的作用。
数字签名算法主要包括RSA、DSA、ECDSA共3种算法,其中RSA算法源于整数因子分解问题,DSA和ECDSA算法源于离散对数问题。
我们以蚂蚁金服开放平台上接口签名方案为例,详细说明可以打开如下文档:
蚂蚁开放平台签名专区
‘玖’ 密码学基础2:椭圆曲线密码学原理分析
首先要说明的一点是,椭圆曲线不是椭圆。椭圆方程是下面这样的:
而通常我们讨论的椭圆曲线的曲线方程是一个二元三次方程,它有多种形式,在椭圆曲线密码体系中,最常用的是如下的Weierstrass通用式(curve25519 等其他类型的椭圆曲线本文不讨论):
之所以取名叫椭圆曲线,是因为该曲线方程跟求椭圆弧长的积分公式相似。从曲线方程和图像易知,椭圆曲线关于X轴对称。判定式不等于零是为了椭圆曲线不存在奇异点,即处处光滑可导,这样才能进行椭圆曲线上的加法运算。下面是一些适合用于加密的椭圆曲线,其中 。
椭圆曲线加密算法涉及数学中的群论、有限域等内容,这节简要介绍下相关数学理论。亦可以跳过直接看第3节,遇到相关名词再查阅即可。
在讨论群之前,先说说集合。集合简单来说就是把一堆东西放在一起,如自然数集合。当然光有一堆东西还不够,东西之间相互作用才能更好的描述大千世界。于是,自然数集合通过加减运算衍生出整数集合、整数集合经过乘除又可以衍生出有理数,而后通过无理数的加入又衍生出实数集合、负数开方引入了复数集合。群则是集合和一个二元运算。
而如果再满足交换律,则该群就被称为是一个阿贝尔群。
根据群的定义,整数的加法运算 就是一个群,而且还是一个阿贝尔群。而自然数的加法运算 就不是一个群。整数加法运算构成群,因为它满足群的定义:整数加法的封闭性、结合律、交换律都成立。整数加法运算中单位元是 0。所有整数 n 都有加法逆元 -n。
在密码学中一般都需要一个有限的群,定义如下:
为了使一个结构同时支持四种基本算术(即加减乘除),我们需要一个包含加法和乘法群的集合,这就是域。当一个集合为域的时候,我们就能在其中进行基本算术运算了。
所以域中元素只要形成加法群和乘法群并满足分配律就行,因为群中元素都有逆元,减法/除法可以转换为加/乘元素的逆元实现。实数集合 是一个域,加法群中单位元是 0,每个实数 都有加法逆元 ,乘法群中单位元是 ,每个非零实数都有乘法逆元 。而整数集合就不是域,因为大部分元素没有乘法逆元,不能构成一个乘法群。
在密码学中,通常只对有限元素的域感兴趣,这种域称为有限域(Finite Field)。有限域中我们经常用到的是素数域,所谓素数域,就是阶为素数的有限域。 比如当 p 为素数时,整数环 就是一个素数域,可以记作 。在素数域 中进行算术运算,需要遵守整数环的规则,即加法是模 p 加法,而乘法是模 p 乘法。
例如对于 有:
椭圆曲线上的点经过一种特定的加法运算可以让椭圆曲线在实数域构成一个群。
无穷远点 :定义一个无穷远点 ,即经过椭圆上任意一点的与X轴垂直的直线都经过该点。可能有人疑惑垂直于X轴的直线是平行线,为啥可以定义为都经过 点?因为在非欧几何中,可认为平行线在无穷远处会交于一点。
椭圆曲线点加法 :椭圆曲线上经过 和 两个点的直线与椭圆曲线的交点记作 ,根据定义有 以及 。继而定义椭圆曲线点加法: ,即加法结果是经过点 且与 X 轴垂直的直线与椭圆曲线的另外一个交点,简单来说,就是交点 关于 X 轴的对称点。
椭圆曲线群:定义为椭圆曲线在实数域上的点集以及点加法
由此可知,椭圆曲线上的点在椭圆曲线加法运算上构成了一个阿贝尔群。增加了单位元后,椭圆曲线方程改为:
由定义可知, ,所以,最终加法只需要计算交点 的逆元 即可。 几种特殊情况说明:
上一节定义了椭圆曲线几何上意义的点加法,需要转换为代数加法以方便计算。 要注意的是,这并不是两个点的坐标简单相加 。
假设直线 PQ 的斜率 ,然后将直线方程 代入曲线可以得到: , 转换成标准式,根据韦达定理 ,即而可求得 ,想了解具体推导过程的可参见 [cubic-equations] 。
斜率 计算需要区分两种情况,当 P=Q 时求椭圆曲线在 P 点的切线斜率(求导)即可:
可以简单验证,比如椭圆曲线是 ,通过参考资料1的 [可视化工具] 可得 。容易验证,与代数加法公式计算结果一致。
对于特殊情况 中有一个是切点的情况,如 ,计算方式不变,易得 。而对于特殊情况 ,采用切线斜率亦可验证公式正确。
在实际加密算法中,我们通常需要多次通过椭圆曲线加法来实现一次加密,如下图所示:
图中打点的过程就是:
而在实际加密算法中,我们常常是使用一个点自己叠加,即初始直线变成椭圆曲线的切线即可,像下面这样:
我们定义对一个点 P 进行 n 次加法得到 nP,称之为标量乘法。如前面例子中 。
不过,当 n 很大时,执行 n 次加法需要 时间,效率有问题。 因为椭圆曲线点加法在实数域构成阿贝尔群,满足交换律和结合律,于是可以通过 [Double-and-add] 算法进行优化 。比如 ,其二进制表示为 ,通过优化只要7次倍乘和4次加法计算即可,时间复杂度降到 。这是一个很好的单向函数,正向计算容易,而反向和蛮力计算复杂。
令 ,则 Q 作为公钥,n 为私钥。如果要破解该密钥,问题就是 "Q = nP,如果已知 P 和 Q,如何求解 n"? 这个问题是比较困难的。不过由于在实数域上曲线连续,可能会更容易找到一些规律进行破解。而且实数域上数值大小没有限制、浮点数等问题而导致计算效率问题,在实际应用中常将椭圆曲线限制到一个有限域内,将曲线变成离散的点,这样即方便了计算也加大了破解难度。
前面提到为了安全性和便于实现,需要将椭圆曲线限制到一个有限域内,通常用的是素数域 (即对于点 为素数)。于是破解就会变成一个离散对数问题,这比连续曲线上的对数问题会难很多。素数域下椭圆曲线定义如下:
下面是曲线 和 的图像。可以发现,椭圆曲线变成了离散的点,且关于 对称。
定义 上椭圆曲线点加法 如下,公式跟实数域上相比只是多了模 操作。
斜率 m 计算同样分两种情况:
椭圆曲线在素数域 上的点加法依然构成阿贝尔群。单位元依旧是无穷远点,元素 的逆元变成 。而交换律、结合律、封闭性则可以通过素域上的模加法、模乘法来证明 。实数域的椭圆曲线点加法定义是有明确几何意义的,从几何上好证明。而椭圆曲线在 就没有明显的几何意义了,观察可发现 三点满足 ,群律的证明过于繁琐,略去(其实是没有找到一个简易的证明)。
以前面曲线为例, ,则有 ,且 和 都在椭圆曲线上。从图形上看, 在直线 上。
在有限域下,椭圆曲线加法群的元素是有限的,元素数目就是群的阶。
如椭圆曲线 ,其在素数域 中元素有 ,阶为24(23个素数域中的点 + 1个无穷远点),如果 p 很大的话,则通过蛮力计算阶是很难的,好在使用 [Schoof算法] 可以在多项式时间内计算出群的阶。计算椭圆曲线在有限域上点的数目可以参见 [Counting points on elliptic curves] 。
Schoof算法运用了 Hasses 定理。Hasses定理给出了椭圆曲线在 的阶的范围,可以看出,当 p 很大时,阶跟 p 的值是比较接近的。
跟实数域一样,在素数域里面也是选取一个点 P,然后计算倍乘 nP 作为公钥。还是以 为例, ,我们采用素数域下新的计算公式计算 。
可以发现 ,即 P 的标量乘法得到的点集是原椭圆曲线群的一个子集,则它是原椭圆曲线群的一个子群,而且是循环子群。子群中元素个数称为子群的阶(示例子群的阶为8),点 P 称为该子群的基点或者生成元。循环子群是椭圆曲线密码体系的基础,我们期望子群中元素越多越好,如何找到一个合适的子群尤为重要。
首先要解决一个问题,就是已知 下的椭圆曲线上的点 P,如何求得 P 的倍乘运算后生成的子群的阶? 根据拉格朗日的群论定理,子群的阶是父群的阶的约数。求解曲线上点 P 生成的子群的阶可以用下面方法:
以示例曲线为例,父群的阶是 ,则以曲线上的点生成的子群的阶只能是 。对于点 ,故其生成的子群的阶就是 8,而点 生成的子群的阶则正好等于父群的阶24。
在加密算法中,我们期望找到一个阶高的子群。不过,通常不是先去找个基点,然后计算子群的阶,因为这样过于不确定,算法上不好实现。相反地,先选择一个大的子群阶,然后再找生成该子群的一个基点就容易多了。
前面提到,子群的阶 n 是父群的阶 N 的约数,即有 ,h 是一个整数,我们称之为子群的余因子(cofactor)。因为 ,所以有:
通常会选择一个素数作为子群的阶,即 n 是素数。可以发现,点 生成了阶为 n 的子群( 除外,因为这个子群的阶为1),不等于 的点 就是我们寻找的基点。具体步骤如下:
需要注意,上面算法里的 n 必须是素数,否则计算的基点 G 生成的子群的阶可能是 n 的约数而不是 n,不符合要求 。以曲线 为例, ,我们选择 ,则 ,随机选取一个点 ,计算 ,恰好满足要求。
如前所述,椭圆曲线加密算法工作在素数域下的椭圆曲线循环子群中,需要的域参数(Domain Parameter)包括 :
如比特币用来做数字签名中采用的椭圆曲线 [secp256k1] 的域参数如下:
‘拾’ ECC椭圆曲线密码应用
1背景简介
随着通讯网络特别是Internet的高速发展,利用网络作为信息交流和信息处理变得越来越普遍,社会的传统事务和业务运作模式受到前所未有的冲击。目前,无论是国家政府还是企业都正融入这场网络革命中,从其原来的传统经营模式向网络模式演化。未来的电子政务、电子商务、电子业务将成为不可逆转的发展趋势。在与日俱增的网络活动中,人们越来越关心信息安全这个问题。这集中体现在:
(1)网络的身份认证——确认网络客户的真实身份
(2)信息和数据的保密性——个人或系统机密信息和数据保护
(3)信息和数据完整性——防止不合法的数据修改
(4)不可抵赖性——网络环境下行为的事后的不可抵赖(数字签名)
信息安全中最核心的技术是密码技术,基本上可分为序列密码、对称密码(又称分组密码)、非对称密码(又称公钥密码)三种。
非对称密码算法是支撑解决以上所涉的四个关键方面的问题的核心。目前越来越流行的是基于PKI体系模型的解决方案。在PKI体系模型中,客户端需要一较好的个人信息安全载体,智能卡或智能密码钥匙将是一较理想的方式,都必须支持公钥算法,而ECC是最适合使用在这一资源受限制的客户端产品中。
2 椭圆曲线密码算法ECC
自公钥密码问世以来,学者们提出了许多种公钥加密方法,它们的安全性都是基于复杂的数学难题。根据所基于的数学难题来分类,有以下三类系统目前被认为是安全和有效的:
(1)大整数因子分解系统(代表性的有RSA),
(2)有限域(数学中的一种代数结构)离散对数系统(代表性的有DSA),
(3)有限域椭园曲线离散对数系统(ECC)。
当前最着名、应用最广泛的公钥系统RSA是由Rivet、Shamir、Adelman提出 的(简称为RSA系统),它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的着名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。RSA方法的优点主要在于原理简单,易于使用。但是,随着分解大整数方法的进步及完善、计算机速度的提高以及计算机网络的发展(可以使用成千上万台机器同时进行大整数分解),作为RSA加解密安全保障的大整数要求越来越大。为了保证RSA使用的安全性,其密钥的位数一直在增加,比如,目前一般认为RSA需要1024位以上的字长才有安全保障。
但是,密钥长度的增加导致了其加解密的速度大为降低,硬件实现也变得越来越难以忍受,这对使用RSA的应用带来了很重的负担,对进行大量安全交易的电子商务更是如此,从而使得其应用范围越来越受到制约。DSA(Data Signature Algorithm)是基于有限域离散对数问题的数字签名标准,它仅提供数字签名,不提供数据加密功能。安全性更高、算法实现性能更好的公钥系统椭圆曲线加密算法ECC(Elliptic Curve Cryptography)基于有限域上椭圆曲线的离散对数计算困难性。人类研究椭圆曲线已有百年以上的历史,但真正把其应用到密码学中是1985年由Koblitz(美国华盛顿大学)和Miller(IBM公司) 两人提出。定义在有限域(Fp 或F(2m))的椭圆曲线(y2=x3+ax+b)上的点(x,y),再加上无穷点O,如按一定的规则运算(估且称为乘法)将组成一个群(数学中的一种代数结构)。有限域上椭圆曲线乘法群也有相对应的离散对数计算困难性问题。因此,许多公开密码系统都是基于此问题发展出来的,如类似ELGamal,DSA等密码系统的ECES,ECDSA。
3 椭圆曲线加密算法ECC的优点
椭圆曲线加密算法ECC与RSA方法相比有着很多技术优点:
●安全性能更高
加密算法的安全性能一般通过该算法的抗攻击强度来反映。ECC和其他几种公钥系统相比,其抗攻击性具有绝对的优势。椭圆曲线的离散对数计算困难性(ECDLP)在计算复杂度上目前是完全指数级,而RSA 亚指数级的。这体现ECC比RSA的每bit安全性能更高。
●计算量小和处理速度快
在一定的相同的计算资源条件下,虽然在RSA中可以通过选取较小的公钥(可以小到3)的方法提高公钥处理速度,即提高加密和签名验证的速度,使其在加密和签名验证速度上与ECC有可比性,但在私钥的处理速度上(解密和签名),ECC远比RSA、DSA快得多。因此ECC总的速度比RSA、DSA要快得多。同时ECC系统的密钥生成速度比RSA快百倍以上。因此在相同条件下,ECC则有更高的加密性能。
●存储空间占用小
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多。160位 ECC与1024位 RSA、DSA有相同的安全强度。而210位 ECC则与2048bit RSA、DSA具有相同的安全强度。意味着它所占的存贮空间要小得多。这对于加密算法在资源受限环境上(如智能卡等)的应用具有特别重要的意义。
●带宽要求低
当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。而公钥加密系统多用于短消息,例如用于数字签名和用于对对称系统的会话密钥传递。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
4椭圆曲线加密算法ECC的相关标准
ECC的这些特点使它在某些领域(如PDA、手机、智能卡)的应用将取代RSA,并成为通用的公钥加密算法。许多国际标准化组织(政府、工业界、金融界、商业界等)已将各种椭圆曲线密码体制作为其标准化文件向全球颁布。ECC标准大体可以分为两种形式:一类是技术标准,即描述以技术支撑为主的ECC体制,主要有IEEEP1363、ANSI X9.62、ANSI X9.63、SEC1、SEC2、FIP 186-2、ISO/IEC 14888-3。规范了ECC的各种参数的选择,并给出了各级安全强度下的一组ECC参数。另一类是应用标准,即在具体的应用环境中建议使用ECC技术,主要有ISO/IEC 15946、IETF PKIX、IETF TLS、WAP WTLS等。在标准化的同时,一些基于标准(或草案)的各种椭圆曲线加密、签名、密钥交换的软、硬件也相继问世。美国RSA数据安全公司在1997年公布了包含ECC的密码引擎工具包BSAFE 4.0; 以加拿大Certicom为首的安全公司和工业界联合也研制、生产了以椭圆曲线密码算法为核心的密码产品,还提出了各种安全条件下对椭圆曲线离散对数攻击的悬赏挑战。可以相信,ECC技术在信息安全领域中的应用会越来越广。