椭圆曲线算法
Ⅰ 密码算法中的椭圆曲线和参数是什么意思啊
下面那位说的是不对的,这里所说的椭圆曲线根本不是高中所学的曲线,可以给你一个关于椭圆曲线相关定义与应用的网址:http://www.pediy.com/kssd/pediy06/pediy6014.htm
而一条曲线在标准化了可以写为Ep(a,b)这里的p表示离散化的域的模,ab是曲线中的参数
另外还有G作为加密用的基点,点的阶
另外可能还会用到曲线的H参数。
Ⅱ 谁能最简单的详解椭圆曲线算法,secp256k1 是如何生成公钥和私钥的
最简单的描述,K=kG作者重新定义了椭圆曲线的加法和乘法。并且保证不可逆。之后通过一系列复杂的计算算出了公钥和加密算法。比如y^2=Ax^3+Bx^2+Cx+D然后Alice计算出来一个参数(x1,y1) 告诉A,B,C,D到Bob,Bob对应的计算出来(x2,y2)然后双方通讯,就可以使用公钥私钥对进行加解密了。PS:对不起。具体细节我把书送给老师了。手头没有资料可以查PS:开始了解这个算法的时候我也看了ECC加密算法入门介绍。到现在都不懂。我也不是数学系的。PS:我很后悔当时没有把这个书上的东西记下来。现在只有一点皮毛的。那本书是《深入浅出密码学――常用加密技术原理与应用(安全技术经典译丛)》(美)帕尔,(美)佩尔茨尔着,马小婷译PS:最后我很讨厌很简单的东西说的很复杂。在上面这本书大概几面纸加上最基础不超过两位数的算例就解决的问题,上面硬是讲的超级复杂。
Ⅲ 椭圆曲线加密怎么实现的
椭圆曲线
椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程 y2+a1xy+a3y=x3+a2x2+a4x+a6 所确定的平面曲线。若F是一个域,ai ∈F,i=1,2,…,6。满足式1的数偶(x,y)称为F域上的椭圆曲线E的点。F域可以式有理数域,还可以式有限域GF(Pr)。椭圆曲线通常用E表示。除了曲线E的所有点外,尚需加上一个叫做无穷远点的特殊O。
在椭圆曲线加密(ECC)
在椭圆曲线加密(ECC)中,利用了某种特殊形式的椭圆曲线,即定义在有限域上的椭圆曲线。其方程如下:
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
椭圆曲线离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对 Q=kP,在已知P,Q的情况下求出小于p的正整数k。可以证明,已知k和P计算Q比较容易,而由Q和P计算k则比较困难,至今没有有效的方法来解决这个问题,这就是椭圆曲线加密算法原理之所在。
椭圆曲线算法与RSA算法的比较
椭圆曲线算法与RSA算法的比较
椭圆曲线公钥系统是代替RSA的强有力的竞争者。椭圆曲线加密方法与RSA方法相比,有以下的优点:
(1)安全性能更高 如160位ECC与1024位RSA、DSA有相同的安全强度。
(2)计算量小,处理速度快 在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
(3)存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
(4)带宽要求低使得ECC具有广泛得应用前景。
ECC的这些特点使它必将取代RSA,成为通用的公钥加密算法。比如SET协议的制定者已把它作为下一代SET协议中缺省的公钥密码算法。
Ⅳ 请问RSA算法针对于椭圆曲线算法的优势在于
椭圆曲线离散对数算法实现太难。。
Ⅳ C# 椭圆曲线算法
这东西C#不自带,你自己实现好了,都是基于数学公式的,网上也有现成的算法能下载到。
Ⅵ 椭圆曲线密码学的数学理论
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA——提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。
椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的困难性上,对应有限域上椭圆曲线的群。
对椭圆曲线来说最流行的有限域是以素数为模的整数域(参见 模运算)GF(p),或是特征为2的伽罗华域GF(2m)。后者在专门的硬件实现上计算更为有效,而前者通常在通用处理器上更为有效。专利的问题也是相关的。一些其他素数的伽罗华域的大小和能力也已经提出了,但被密码专家认为有一点问题。
给定一条椭圆曲线E以及一个域GF(q),我们考虑具有(x,y)形式有理数点E(q)的阿贝尔群,其中x和y都在GF(q)中并且定义在这条曲线上的群运算+在文章椭圆曲线中描述。我们然后定义第二个运算* | Z×E(q)->E(q):如果P是E(q)上的某个点,那么我们定义2*P=P+P,3*P=2*P+P=P+P+P等等。注意给定整数 j和k,j*(k*P)=(j*k)*P=k*(j*P)。椭圆曲线离散对数问题(ECDLP)就是给定点P和Q,确定整数k使k*P=Q。
一般认为在一个有限域乘法群上的离散对数问题(DLP)和椭圆曲线上的离散对数问题(ECDLP)并不等价;ECDLP比DLP要困难的多。
在密码的使用上,曲线E(q);和其中一个特定的基点G一起被选择和公布。一个私钥k被作为随机整数来选择;值P=k*G被作为公钥来公布(注意假设的ECDLP困难性意味着k很难从P中确定)。如果Alice和Bob有私钥kA和kB,公钥是PA和PB,那么Alice能计算kA*PB=(kA*kB)*G;Bob能计算同样的值kB*PA=(kB*kA)*G。
这允许一个“秘密”值的建立,这样Alice和Bob能很容易地计算出,但任何的第三方却很难得到。另外,Bob在处理期间不会获得任何关于kA的新知识,因此Alice的私钥仍然是私有的。
基于这个秘密值,用来对Alice和Bob之间的报文进行加密的实际方法是适应以前的,最初是在其他组中描述使用的离散对数密码系统。这些系统包括:
Diffie-Hellman — ECDH
MQV — ECMQV
ElGamal discrete log cryptosystem — ECElGamal
DSA — ECDSA
对于ECC系统来说,完成运行系统所必须的群操作比同样大小的因数分解系统或模整数离散对数系统要慢。不过,ECC系统的拥护者相信ECDLP问题比DLP或因数分解问题要难的多,并且因此使用ECC能用小的多的密钥长度来提供同等的安全,在这方面来说它确实比例如RSA之类的更快。到目前为止已经公布的结果趋于支持这个结论,不过一些专家表示怀疑。
ECC被广泛认为是在给定密钥长度的情况下,最强大的非对称算法,因此在对带宽要求十分紧的连接中会十分有用。
国家标准与技术局和ANSI X9已经设定了最小密钥长度的要求,RSA和DSA是1024位,ECC是160位,相应的对称分组密码的密钥长度是80位。NIST已经公布了一列推荐的椭圆曲线用来保护5个不同的对称密钥大小(80,112,128,192,256)。一般而言,二进制域上的ECC需要的非对称密钥的大小是相应的对称密钥大小的两倍。
Certicom是ECC的主要商业支持者,拥有超过130项专利,并且已经以2千5百万美元的交易获得了国家安全机构(NSA)的技术许可。他们也已经发起了许多对ECC算法的挑战。已经被解决的最复杂的是109位的密钥,是在2003年初由一个研究团队破解的。破解密钥的这个团队使用了基于生日攻击的大块并行攻击,用超过10,000台奔腾级的PC机连续运行了540天以上。对于ECC推荐的最小密钥长度163位来说,当前估计需要的计算资源是109位问题的108倍。
在2005年2月16日,NSA宣布决定采用椭圆曲线密码的战略作为美国政府标准的一部分,用来保护敏感但不保密的信息。NSA推荐了一组被称为Suit B的算法,包括用来密钥交换的Menezes-Qu-Vanstone椭圆曲线和Diffie-Hellman椭圆曲线,用来数字签名的椭圆曲线数字签名算法。这一组中也包括AES和SHA。
Ⅶ 椭圆曲线点乘算法
椭圆曲线密码学有关的核心是椭圆曲线点乘算法,
具体涉及到代数几何学和群论。
原理太多,符号太杂不好往上打。
推荐你看下段钢的《加密与解密》(第三版)
第六章有详细介绍。
Ⅷ matlab拟合椭圆曲线
基本思路
椭圆的拟合比较复杂,考虑一般情形,涉及到的参数应包括长半轴、短半轴、倾角、中心坐标等5个参数。拟合结果对参数的初值比较敏感,需要小心选择。
楼主所说的“误差系数”不知道是怎样定义,未计算。但有了拟合结果之后,只要定义明确,计算肯定不是难事。
拟合结果
以下是用最小二乘法拟合的结果:
参考代码
最小二乘法:
function zd
d = [0.50151 0; 0 1.26586; 1.28399 1.28399; 0.68278 -0.68278;
0 -2.45619; -7.17523 0; -11.13293 -11.13293; -2.15106 2.15106];
X = d(:,1)';
Y = d(:,2)';
clf
plot(X,Y,'x')
hold on
c = lsqcurvefit(@curve,[8 2 50*pi/180 -5.5 -4.5],[X;Y],X*0)
a = c(1);
b = c(2);
Q = c(3);
T=linspace(0,2*pi,100);
x1=a*cos(T);
y1=b*sin(T);
x=x1*cos(Q)-y1*sin(Q)+c(4);
y=x1*sin(Q)+y1*cos(Q)+c(5);
plot(x,y,'r--')
c(3) = c(3) * 180/pi;
text(-11,2.5,sprintf('a = %.3g, b = %.3g
\theta = %.3g
x_0 = %.3g, y_0 = %.3g',c))
function f = curve(c,xy)
a = c(1);
b = c(2);
Q = c(3);
t=linspace(0,2*pi,500);
x1=a*cos(t);
y1=b*sin(t);
x=x1*cos(Q)-y1*sin(Q) + c(4);
y=x1*sin(Q)+y1*cos(Q) + c(5);
f = xy(1,:)*0;
for i=1:length(xy)
f(i) = min( sqrt((xy(1,i)-x).^2 + (xy(2,i)-x).^2 ) );
end
遗传算法:
function zd
d = [0.50151 0; 0 1.26586; 1.28399 1.28399; 0.68278 -0.68278;
0 -2.45619; -7.17523 0; -11.13293 -11.13293; -2.15106 2.15106];
X = d(:,1)';
Y = d(:,2)';
clf
plot(X,Y,'x')
hold on
opt = gaoptimset('InitialPopulation',[8 2 50*pi/180 -5.5 -4.5],'Generations',10000,'Display','iter');
c = ga(@curve,5,[],[],[],[],[5 1.5 pi/5 -6.5 -5],[9 5 pi/3 -4 -3],[],opt)%,[8 2 50*pi/180 -5.5 -4.5],[X;Y],X*0)
a = c(1);
b = c(2);
Q = c(3);
T=linspace(0,2*pi,100);
x1=a*cos(T);
y1=b*sin(T);
x=x1*cos(Q)-y1*sin(Q)+c(4);
y=x1*sin(Q)+y1*cos(Q)+c(5);
plot(x,y,'r--')
c(3) = c(3) * 180/pi;
text(-11,2.5,sprintf('a = %.3g, b = %.3g
\theta = %.3g
x_0 = %.3g, y_0 = %.3g',c))
function f = curve(c)
a = c(1);
b = c(2);
Q = c(3);
t=linspace(0,2*pi,500);
x1=a*cos(t);
y1=b*sin(t);
x=x1*cos(Q)-y1*sin(Q) + c(4);
y=x1*sin(Q)+y1*cos(Q) + c(5);
f = X*0;
for i=1:length(f)
f(i) = min( sqrt((X(i)-x).^2 + (Y(i)-x).^2 ) );
end
f = sum(f);
end
end
Ⅸ 椭圆曲线加密算法
这需要自己设计,如果明文空间为M,则需要构造一个映射,将M中的元素(一般为二进制序列)映射到椭圆曲线上的点。
一种可能的做法是:将M转化为十进制整数m,然后令椭圆曲线中点的横坐标为m,根据曲线方程计算出纵坐标,便得到了一个点。
Ⅹ 如何通过哈希函数和椭圆曲线密码算法实现数字签名
RSA的安全性主要取决于构造其加密算法的数学函数的求逆的困难性,这同大多数公钥密码系统一样(例如ElGamal算法就是基于离散对数问题的困难性,我们称这样的函数为单向函数.单向函数不能直接用作密码体制,因为如果用单向函数对明文进行加密,即使是合法的接收者也不能还原出明文,因为单向函数的逆运算是困难的.与密码体制关系更为密切的陷门单向函数,即函数及其逆函数的计算都存在有效的算法,而且可以将计算函数的方法公开.单向和陷门单向函数的概念是公钥密码学的核心,它对公钥密码系统的构造非常重要,甚至可以说公钥密码体制的设计就是陷门单向函数的设计.
ECDSA算法将DsA运用在椭圆曲线方程上,将安全性的基础由求取有限域上
离散对数的困难性变成了在椭圆曲线群上计算离散对数的困难性,安全性基础改
变,使得在同等安全程度下使用的密钥长度变短,仅仅使用192位长的密钥就可
以保证安全性了,而DSA算法需要1024位长的密钥才能保证足够的安全性.改进
后的ECDSA算法提高了算法实现的效率.