分类：教育/科学-理工学科-数学
问题：椭圆曲线加密算法数学基础我对公钥密钥加密比较感兴趣,前一段时间用 
我对公钥密钥加密比较感兴趣,前一段时间用java实现了RSA的算法,但是为了达到保密强度,相应的计算量会很大,而听说椭圆曲线加密算法达到相似的加密强度,不会用很大的计算量,所以我决定实现它,但是我看不懂里面的,好象用到抽象代数,射影几何等的东西. 那应该学习什么基础课程呢? 望各位数学高人指点迷津.
回答：2002年，美国SUN公司将其开发的椭圆加密技术赠送给开放源代码工程公钥密码体制根据其所依据的难题一般分为三类：大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。 椭圆曲线密码体制来源于对椭圆曲线的研究，所谓椭圆曲线指的是由韦尔斯特拉斯（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系统中。以下资料摘自： 公钥密码系统的加密算法ECC与RSA的对比     第六届国际密码学会议对应用于公钥密码系统的加密算法推荐了两种：基于大整数因子分解问题（IFP）的RSA算法和基于椭圆曲线上离散对数计算问题（ECDLP）的ECC算法。RSA算法的特点之一是数学原理简单、在工程应用中比较易于实现，但它的单位安全强度相对较低。目前用国际上公认的对于RSA算法最有效的攻击方法--一般数域筛(NFS)方法去破译和攻击RSA算法，它的破译或求解难度是亚指数级的。ECC算法的数学理论非常深奥和复杂，在工程应用中比较难于实现，但它的单位安全强度相对较高。用国际上公认的对于ECC算法最有效的攻击方法--Pollard rho方法去破译和攻击ECC算法，它的破译或求解难度基本上是指数级的。正是由于RSA算法和ECC算法这一明显不同，使得ECC算法的单位安全强度高于RSA算法，也就是说，要达到同样的安全强度，ECC算法所需的密钥长度远比RSA算法低（见表1和图1）。这就有效地解决了为了提高安全强度必须增加密钥长度所带来的工程实现难度的问题. 个人认为不需要专门学太多数学知识，了解一些简单的数学概念（如Abel群，简单的代数概念）能理解这个算法就可以了。你用java实现了RSA的算法，还是挺不错的了，有钻研精神，后生可畏。继续加油！ 去找一些国外的网站吧。