椭圆曲线参数选取
- 格式:docx
- 大小:13.92 KB
- 文档页数:5
引言同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一样,ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)也属于公开密钥算法。
前段时间刚刚进行了“基于国家密码标准算法密码卡”项目,其中算法部分就涉及了ECC,由于是采用芯片实现ECC算法,所以对ECC是如何具体实现信息加密的原理知之甚少。
目前,国内详细介绍ECC的公开文献并不多(反正我没有找到)。
有一些简介,也是泛泛而谈,看完后依然理解不了ECC的实质(可能我理解力太差了)。
前些天从互联网上找到这篇材料,看完后对ECC了解一些,但还是比较懵懂。
于是把本文整理了一下,与大家分享。
当然ECC 博大精深,我的认识还很肤浅,有些问题今后还要向。
本文涉及的部分理论知识请参考《近世代数基础》、《初等数论》之类的书。
另外,由于原文中涉及的公式没有区分上标和下标,我对本文的一部分公式进行了整理,由于时间关系,对后半部分没有整理(因为公式比较多,我也懒得弄了)。
由此给大家带来的阅读上的不便表示歉意。
一、从平行线谈起平行线,永不相交。
没有人怀疑把?不过到了近代这个结论遭到了质疑。
平行线会不会在很远很远的地方相交了?事实上没有人见到过。
所以“平行线,永不相交”只是假设(大家想想初中学习的平行公理,是没有证明的)。
既然可以假设平行线永不相交,也可以假设平行线在很远很远的地方相交了。
即平行线相交于无穷远点P∞(请大家闭上眼睛,想象一下那个无穷远点P∞,P∞是不是很虚幻,其实与其说数学锻炼人的抽象能力,还不如说是锻炼人的想象力)。
给个图帮助理解一下:直线上出现P∞点,所带来的好处是所有的直线都相交了,且只有一个交点。
这就把直线的平行与相交统一了。
为与无穷远点相区别把原来平面上的点叫做平常点。
以下是无穷远点的几个性质。
▲直线L上的无穷远点只能有一个。
(从定义可直接得出)▲平面上一组相互平行的直线有公共的无穷远点。
椭圆的参数方程和极坐标方程总结
椭圆是一种常见的二维图形,描述了一个平面上到两个定点的距离之和为常数的点的集合。
本文将总结椭圆的参数方程和极坐标方程。
1. 椭圆的参数方程
椭圆的参数方程表示了椭圆曲线上的点随一个参数的变化而变化的轨迹。
椭圆的参数方程可以表示为:
x = a * cos(t)
y = b * sin(t)
其中,`a`和`b`分别为椭圆的两个半轴长度,`t`为参数。
参数`t`的取值范围通常为`0`到`2π`,表示椭圆曲线的一个周期。
2. 椭圆的极坐标方程
椭圆的极坐标方程描述了椭圆上的点相对于一个原点的极坐标表示。
椭圆的极坐标方程可以表示为:
r = (a * b) / sqrt((b * cos(theta))^2 + (a * sin(theta))^2)
其中,`r`为点相对于原点的距离,`theta`为点相对于正半轴的极角。
3. 椭圆的性质和应用
椭圆具有许多有趣的性质和应用。
以下是一些常见的性质和应用:
- 椭圆是一个闭合的曲线,且具有对称性。
椭圆的两个焦点和每个点到两个焦点的距离之和为常数。
- 椭圆在几何光学中有重要应用,例如实现椭圆镜、椭圆透镜等。
- 椭圆在数学分析、物理学和工程学中广泛应用,例如描述行星轨道、电子轨道等。
总结:本文介绍了椭圆的参数方程和极坐标方程,以及椭圆的一些性质和应用。
通过理解椭圆的方程和性质,可以更好地应用和理解椭圆在各个领域的应用。
一种椭圆曲线参数生成的快速算法谷勇浩 刘勇(北京邮电大学通信网络综合技术研究所)摘要:椭圆曲线密码体制是公钥密码中的研究热点。
该文介绍了椭圆曲线密码体制的基本概念及相关知识,讨论了目前基于离散对数问题的椭圆曲线密码的研究动态。
本文的创新点是针对目前椭圆曲线研究重点之一——椭圆曲线参数生成算法,给出了一种生成参数a 、b 的快速算法。
这种算法利用了Jacobi 符号和二次剩余的理论,并且用matlab 计算出利用这种算法生成一个椭圆曲线的平均时间,最后我们分析了今后椭圆曲线密码系统的研究方向和重点。
关键词:椭圆曲线;离散对数问题;Jacobi 符号;二次剩余;阶1976年Diffie 和Hellman 提出公钥密码思想以来,国际上提出了许多种公钥密码体制的实现方案。
一些已经被攻破,一些被证明是不可行的。
目前,只有3类公钥密码体制被认为是安全有效的,按照其所依据的数学难题划分为:基于大整数分解问题(IFP ),如RSA 体制和Rabin 体制;基于有限域离散对数问题(DLP ),如Diffie-Hellman 体制和ElGamal 体制;基于椭圆曲线离散对数问题(ECDLP ),如椭圆密码体制。
椭圆曲线应用到密码学上最早是由Neal Koblitz 和Victor Miller 在1985年分别独立提出的。
它是目前已知的公钥体制中,对每一比特所提供加密强度最高的一种体制。
它具有安全性高、密钥量小、灵活性好的特点,受到了国际上的广泛关注。
而SET(Secure Electronic Transaction)协议的制定者已把它作为下一代SET 协议中缺省的公钥密码算法。
深入研究基于椭圆曲线离散对数问题的公钥密码具有很大的现实意义。
1建立椭圆曲线公钥密码体制1.1椭圆曲线域的参数在基于椭圆曲线的加解密和数字签名的实现方案中,首先要给出椭圆曲线域的参数来确定一条椭圆曲线。
在 IEEE P1363标准中,定义其参数为一个七元组:T=(q,FR,a,b,G,n,h),其中q 代表有限域GF(q),q 为素数或2m ;FR 为域表示法,如f(x)为2m F 域元素的不可约多项式的表示法;曲线的方程,当q 为素数时,方程为23ax b y x =++,当q 为2m时,方程为232xy a b y x x +=++,a,b 是方程中的系数;G 为基点;n 为大素数并且等于点G 的阶,h 是小整数称为余因子且#()/q h E n F =。
secp256k1椭圆曲线算法【1】椭圆曲线算法简介椭圆曲线算法(Elliptic Curve Cryptography,简称ECC)是一种公钥加密算法,基于椭圆曲线上的数学问题。
这种算法在1985年由W.Duever和V.Shamir提出。
与RSA、DSA等公钥加密算法相比,椭圆曲线算法具有相同的安全级别,但所需的密钥长度较短,因此在实际应用中具有更高的效率。
【2】SECP256k1椭圆曲线参数SECP256k1(Secure Curve 256-bit Key Length 1)是一种常见的椭圆曲线算法,其参数如下:- 曲线方程:y^2 = x^3 + ax + b- 生成元:G = (x, y)- 椭圆曲线阶:n = 2^256 - 1- 素数p:p = 2^256 - 1- 系数a、b:a = 0,b = 7【3】SECP256k1算法应用SECP256k1算法广泛应用于加密货币、网络通信等领域。
以下是SECP256k1算法在比特币(Bitcoin)中的应用示例:1.密钥生成:用户生成一个私钥,对其进行椭圆曲线运算,得到一个对应的公钥。
2.数字签名:用户用自己的私钥对交易信息进行签名,生成数字签名。
3.验证签名:交易接收方使用发送方的公钥验证数字签名,确保交易的真实性和完整性。
【4】安全性与性能分析SECP256k1算法的安全性依赖于椭圆曲线上的数学难题,目前尚未找到高效的破解方法。
然而,随着计算能力的提升,未来可能会出现针对SECP256k1的攻击手段。
因此,研究人员正在寻求更高安全性的椭圆曲线算法,如SECG 曲线。
在性能方面,SECP256k1算法相较于其他公钥加密算法具有较高的运算速度。
但这仍取决于具体的实现和硬件条件。
在实际应用中,可以采用优化算法和硬件加速手段进一步提高性能。
【5】总结SECP256k1椭圆曲线算法作为一种高效、安全的公钥加密算法,在现代密码学和加密货币领域具有重要地位。
安全椭圆曲线的选取及点群阶的计算摘要:选取安全椭圆曲线的核心步骤是对椭圆曲线点群阶的计算。
SEA算法及Satoh算法是计算点群的有效工具。
本文主要讨论了安全椭圆曲线的选取及利用前两种算法计算点群阶。
关键词:安全椭圆曲线,点群阶,SEA算法,Satoh算法1 引言自1985年N.Kobliatz和ler分别提出椭圆曲线公钥密码体制以来,在理论研究、标准化和产品化等要素的综合影响下,椭圆曲线公钥密码体制以自身优势成为信息安全和密码学界关注的热点之一。
在现代密码及数字签名中要确保信息安全,关键是如何构造安全的椭圆曲线,而影响椭圆曲线密码体制的安全性的主要因素是参数的选取,其核心步骤是寻找素数阶的椭圆曲线。
目前,构造安全椭圆曲线的方法一般有两种:①复乘法,即构造给定阶的椭圆曲线。
这种方法构造的椭圆曲线具有附带结构特征,从安全性角度来说,这是一个潜在的威胁;②随机曲线法,即随机选取椭圆曲线参数,计算它的阶,直到找到素数阶椭圆曲线。
因此从长远的角度或从不断出现的对ECC的攻击来看,利用随机曲线法选择安全椭圆曲线是非常必要的。
2 安全椭圆曲线的选取为了得到一条随机性很好的素数阶椭圆曲线,我们可以采用下面的方法,随机选取参数,利用相关算法计算出它的阶,再对阶进行素性测试,直到得到理想的椭圆曲线。
实际应用中,许多情况下我们利用SEA算法计算出阶之前,利用已有的信息就可断定阶为合数。
下面给出构造安全椭圆曲线的方法:输入有限域的大小输出椭圆曲线是大的素因子,且(1)随机产生上的一条椭圆曲线;(2)利用算法计算出;(3)利用大整数分解算法分解,并检测的分解中有无的>2160素因子,如果没有,返回(1);(4)检测,否则返回(1)(5)检测否则返回(1)(6)输出实现上面算法的最关键的一步就是计算椭圆曲线点的个数即点群阶。
3 椭圆曲线的点群阶3.1 椭圆曲线的点群阶定义椭圆曲线的点群阶是指所定义的椭圆曲线上的点数(我们所关心的是曲线在第一象限中的整数点数)并上无穷远点(用表示)。
(完整版)椭圆曲线知识点总结(经典版)
1. 椭圆曲线简介
椭圆曲线是一种特殊类型的曲线,可以用于加密和签名算法中。
它的数学性质使得椭圆曲线加密成为一种强大且安全的加密方法。
2. 关键概念
2.1 椭圆曲线方程
椭圆曲线的方程一般形式为:y^2 = x^3 + ax + b,其中a和b
是方程中的常数。
2.2 基点
基点是椭圆曲线上的一个固定点,用于构建密码算法中的公钥
和私钥。
2.3 椭圆曲线运算
椭圆曲线运算包括点的加法和乘法操作。
点的加法操作用于构
建公钥,点的乘法操作用于构建私钥。
3. 椭圆曲线加密算法
3.1 密钥生成
在椭圆曲线加密算法中,首先需要生成公钥和私钥。
公钥是基
点经过多次乘法运算得到的点,私钥是一个随机生成的整数。
3.2 加密和解密
加密过程中,需要选择一个随机数作为加密的短期私钥,并使
用公钥进行点乘操作。
解密过程中,需要使用私钥进行点乘操作以
还原加密文本。
4. 安全性和优势
椭圆曲线加密算法相较于其他加密算法具有更高的安全性和更
小的密钥长度要求。
其安全性取决于基点的选择和曲线参数的选取。
5. 应用领域
椭圆曲线加密算法广泛应用于网络通信、数字签名、支付系统
等安全领域。
6. 总结
椭圆曲线是一种数学上的强大工具,其在加密和签名领域有着广泛的应用。
了解椭圆曲线的基本概念和运算规则,可以帮助我们更好地理解和应用椭圆曲线加密算法。
椭圆的参数方程中参数的取值范围椭圆是平面上的一个曲线,可以用参数方程来表示。
椭圆的参数方程可以写成x=a cos(t),y=b sin(t),其中a和b分别是椭圆在x轴和y轴方向上的半长轴,t是参数。
在此参数方程中,t的取值范围与椭圆的形状和位置有密切关系。
首先,我们来看当t的取值范围是0到2π时,参数方程表示的椭圆是一个完整的闭合曲线。
当t=0时,x=a cos(0)=a,y=bsin(0)=0,对应于椭圆的右半边长轴上的一个点;当t=π/2时,x=a cos(π/2)=0,y=b sin(π/2)=b,对应于椭圆的上半长轴上的一个点;当t=π时,x=a cos(π)=-a,y=b sin(π)=0,对应于椭圆的左半边长轴上的一个点;当t=3π/2时,x=a cos(3π/2)=0,y=bsin(3π/2)=-b,对应于椭圆的下半长轴上的一个点。
因此,当t的取值范围是0到2π时,参数方程表示的椭圆是一个完整的闭合曲线。
其次,我们来看当t的取值范围是从0到π或从-π到0时,参数方程表示的椭圆是一条半椭圆。
当t的取值范围是从0到π时,参数方程表示的椭圆是从右半边长轴开始,沿逆时针方向的半椭圆;当t的取值范围是从-π到0时,参数方程表示的椭圆是从左半边长轴开始,沿逆时针方向的半椭圆。
最后,我们来看当t的取值范围是从-t1到t2时,参数方程表示的椭圆是一个弧线。
当t的取值范围是从-t1到t2时,得到的是从参数方程表示的椭圆上的一个点开始,逆时针方向延伸的一段弧线。
在以上的讨论中,我们可以总结出椭圆的参数方程中参数t的取值范围与椭圆的形状和位置有密切的关系。
当t的取值范围是从0到2π时,参数方程表示的椭圆是一个完整的闭合曲线;当t的取值范围是从0到π或从-π到0时,参数方程表示的椭圆是一条半椭圆;当t的取值范围是从-t1到t2时,参数方程表示的椭圆是一个弧线。
在实际问题中,我们也可以根据椭圆的具体情况来确定参数t的取值范围。
椭圆曲线密码算法(ECC)是一种非对称加密算法,它通过椭圆曲线上的点来实现密钥的生成与交换。
ECC的安全性与RSA等传统非对称加密算法相当,但它所需的密钥长度较短,使得它在移动设备等资源受限环境下具有明显的优势。
而椭圆曲线密钥生成算法就是ECC中用来生成密钥对的重要算法之一。
椭圆曲线密码算法的安全性建立在椭圆曲线离散对数问题的困难性上。
也就是说,在已知一个点P和整数kP的情况下,要很难计算出整数k。
这一性质使得椭圆曲线密码算法成为一种非常有前景的加密算法,因为相较于RSA等算法,可以用更短的密钥长度实现同等级的安全性。
椭圆曲线密钥生成算法的过程可以分为如下几个步骤:1. 选择椭圆曲线参数首先需要选择一个合适的椭圆曲线来作为公开参数。
这个椭圆曲线的选择直接影响到了密钥对的生成过程以及算法的安全性。
一般来说,椭圆曲线的安全性和性能是一对矛盾体,需要在其中寻找一个平衡点。
2. 生成私钥选择一个随机数作为私钥,私钥的大小通常是根据椭圆曲线的位数来确定的。
在ECC中,私钥通常是一个整数,它是生成公钥的重要参数。
3. 计算公钥利用椭圆曲线参数和私钥,可以通过一系列计算得到对应的公钥。
公钥通常是一个椭圆曲线上的点,它将被用于加密和数字签名等操作中。
4. 密钥对生成完成私钥和公钥组成了一个完整的密钥对,可以用于加密通信和身份认证等操作。
椭圆曲线密钥生成算法的实现涉及到大量数论和代数运算,其中包括模运算、点乘、椭圆曲线点加等复杂运算。
如何高效地实现这些运算对于算法的性能和安全性都有很大的影响。
椭圆曲线密钥生成算法是一种重要的非对称加密算法,它在移动设备、物联网设备等资源受限环境下具有明显的优势。
加之它在相同安全级别下所需的密钥长度较短,因此在当前信息安全领域有着广泛的应用前景。
椭圆曲线密钥生成算法(ECC)是当今信息安全领域中备受瞩目的一种加密算法。
其独特的数学原理和高效的计算性能使得它成为了许多安全通信协议和应用中不可或缺的一部分。
首先我们来看一下椭圆的基本定义和参数方程。
椭圆是平面上到两个固定点F1和F2的距离之和等于常数2a的点P的轨迹。
F1和F2称为椭圆的焦点,2a称为椭圆的长轴长度。
接下来我们来考虑椭圆的参数方程。
椭圆的参数方程可以表示为:x = a*cos(t)y = b*sin(t)在这里,a和b分别代表椭圆的长短半轴,t代表参数。
根据这个参数方程,我们可以进一步讨论参数t的取值范围。
对于x = a*cos(t)和y = b*sin(t)两个方程,我们知道cos(t)和sin(t)的取值范围都是[-1, 1]。
x的取值范围是[-a, a],y的取值范围是[-b, b]。
接下来我们来分析参数t的取值范围。
由于cos(t)和sin(t)的周期都是2π,所以参数t的取值范围可以是[0, 2π)。
这个范围可以覆盖椭圆的整个轨迹。
在椭圆的参数方程中,参数t的取值范围[0, 2π)对应了椭圆的整个轨迹。
通过改变参数t的取值,我们可以描绘出椭圆上的各个点的位置,从而形成整个椭圆曲线。
椭圆的参数方程中参数t的取值范围是[0, 2π),而对应的x和y的取值范围分别是[-a, a]和[-b, b]。
通过参数方程,我们可以清晰地描述椭圆曲线的形状和位置。
个人观点和理解方面,我认为椭圆的参数方程是一种非常有趣和灵活的描述椭圆的方式。
通过引入参数t,我们可以更加直观地理解椭圆曲线的形状和特性。
参数方程的使用不仅简化了对椭圆的描述,还使得对椭圆的分析更加方便。
以上是对椭圆的参数方程中参数的取值范围的深度和广度的讨论,希望对您有所帮助。
在写完文章后,请您把文章内容复制到word或者notepad文档中,并按照您的要求进行格式调整。
如果有需要修改或补充的地方,也请随时告知我。
在我们深入探讨椭圆的参数方程的基础上,让我们进一步思考一下参数方程的性质以及它们对椭圆曲线的影响。
让我们回顾一下椭圆的参数方程:x = a*cos(t)和y = b*sin(t)。
椭圆曲线签名算法1. 椭圆曲线签名算法简介1.1 什么是椭圆曲线签名算法椭圆曲线签名算法(Elliptic Curve Digital Signature Algorithm,ECDSA)是一种基于椭圆曲线离散对数问题的数字签名算法。
它被广泛应用于信息安全领域,用于验证消息的真实性和完整性。
1.2 ECDSA的基本原理ECDSA的基本原理是利用椭圆曲线上的点运算和离散对数问题。
具体而言,ECDSA包括三个主要步骤:1.生成密钥对:首先,选择一条椭圆曲线,确定基点G和曲线的参数。
然后,随机选择一个私钥d作为签名者的密钥,并将其公钥Q计算为dG。
私钥应保持机密,而公钥可以公开。
2.签名生成:对于要签名的消息,签名者需要计算消息的哈希值,并选择一个随机数k。
然后,计算点R = kG,并计算s = (h + dA * r) / k mod n,其中h为消息哈希值,r为R点的x坐标,n为椭圆曲线的阶。
3.验证签名:验证者接收到签名者的公钥Q、消息以及签名(R, s)。
验证者需要计算消息的哈希值,并根据公式计算点R’ = (s^(-1) * h)G + (s^(-1)* r)Q。
如果R’的x坐标与R的x坐标相同,则签名有效。
2. 椭圆曲线签名算法的优势2.1 安全性椭圆曲线离散对数问题是ECDSA的基础,其复杂度随着椭圆曲线的参数选择而变化。
相较于传统的RSA签名算法,ECDSA使用更短的密钥长度,提供了相同级别的安全性。
2.2 签名速度和计算效率由于椭圆曲线上的点运算相对简单,ECDSA的签名速度相比其他算法更快。
此外,相对于RSA等算法,ECDSA使用的密钥长度更短,可以减少计算和存储资源的使用。
2.3 签名长度ECDSA生成的签名长度固定,与消息的长度无关。
相比于其他签名算法生成的较长签名,ECDSA的短签名在传输和存储时更为高效。
3. 椭圆曲线参数选择椭圆曲线的安全性取决于正确选择曲线上的参数。
一般情况下,椭圆曲线的参数应满足以下要求:1.曲线方程形式:y^2 = x^3 + ax + b2.曲线参数的大小和分布:曲线参数的位数应足够大且随机性好,以增加椭圆曲线离散对数问题的难度。
椭圆曲线密码体制所使用的域的参数
椭圆曲线密码体制所使用的域的参数包括:
1. 椭圆曲线参数:选择一个椭圆曲线,以及其阶数和基点。
2. 有限域参数:选择一个有限域,通常是一个素域或一个二次扩域。
3. 曲线上的点:选择一个椭圆曲线上的点,作为公钥和私钥的起点。
4. 哈希函数:选择一个哈希函数,将消息映射到椭圆曲线上的点。
5. 参数共享:对于多个用户的情况,选择一个共享的参数,用于生成多个用户的公钥和私钥。
这些参数的选择对于椭圆曲线密码体制的安全性和效率都非常重要。
在选择这些参数时,需要考虑到诸如计算效率、安全性和参数的易管理性等因素。
椭圆曲线密码体制(ECC)是一种基于椭圆曲线离散对数问题的公钥加密算法,它具有在小比特长度下提供同等安全性的优势。
在椭圆曲线密码体制中,域的参数是非常重要的一部分,它直接影响到密码系统的安全性和效率。
我们将从基础概念开始,深入探讨椭圆曲线密码体制所使用的域的参数。
1. 基础概念在椭圆曲线密码体制中,域的参数指的是有限域的特征和模数。
有限域通常用GF(p)表示,其中p是一个素数,GF(p^m)表示特征为p的扩域。
在ECC中,椭圆曲线的定义需要选择一个合适的有限域作为基础,常用的有限域包括素域GF(p)和二元扩域GF(2^m)。
2. 选择域的参数选择合适的域的参数对于构建安全且高效的椭圆曲线密码体制至关重要。
一般来说,域的参数需要满足以下几个条件:- 模数的大小要足够大,以抵抗各种攻击,如离散对数攻击和椭圆曲线上的移动攻击。
- 模数的选择应该尽量避免特殊结构,以增加密码系统的难度。
- 特征的选择也会影响计算的效率,一般来说,选择特征为素数的域可以更好地适应硬件实现,而选择特征为二的扩域可以简化一些运算。
3. 安全性分析域的参数对于密码系统的安全性有着直接的影响。
模数的大小和特征的选择都会影响到密码系统的安全性。
较小的模数很容易受到穷举搜索的攻击,而特殊结构的模数也容易遭受特定的攻击。
在选择域的参数时,需要进行仔细的安全性分析,以确保密码系统具有足够的安全性。
4. 效率分析除了安全性外,选择合适的域的参数还会影响到密码系统的计算效率。
合适的域的参数可以使得加密和解密的运算更加高效。
特征为素数的域通常适用于软件实现,而特征为二的扩域则适用于硬件实现。
在设计密码系统时,需要综合考虑安全性和效率的因素,选择合适的域的参数。
总结椭圆曲线密码体制所使用的域的参数对于密码系统的安全性和效率都起着至关重要的作用。
正确地选择域的参数可以保证密码系统具有足够的安全性,并且能够高效地进行加密和解密运算。
在设计椭圆曲线密码体制时,需要进行深入的域参数分析,并根据具体的应用场景选择合适的域的参数。
关于SM2椭圆曲线参数选取
一.安全的椭圆曲线的选取
1.椭圆曲线上的公钥密码体制的安全性是建立在椭圆曲线离散对数的基础上, 但并不是所有椭圆曲线都可以应用到公钥密码体制中, 为了保证其安全性, 必须选取安全椭圆曲线,即只有选到合适的有限域GF(p)和椭圆曲线(ECC),能够抵抗攻击ECDLP算法的攻击,才能保证所选ECC的安全性。
若某椭圆曲线存在优于n1/2级(n是基点阶次)计算复杂度的攻击方法,则称此曲线为弱椭圆曲线。
Fp上的超奇异椭圆曲线(有限域Fp的特征整除q+1-#E(Fp))和Fp上的异常曲线(#E(Fp)=p)都是弱椭圆曲线。
(国密局文档p4,p25A.4抗攻击椭圆曲线满足的条件)。
下面是选取曲线时应遵循的原则:(一种椭圆曲线参数生成的快速算法)
(1)为了抗击Pollard-ρ攻击,所选取椭圆曲线的阶#E(GF(p))的分解式中应该包含一个大的素数因子,目前应不小于160bit;
(2)为了抗击Weil对和Tate对的攻击,对于1≤k≤30,n不能除p k-1(不宜选取超奇异椭圆曲线);
(3)为了抗击Semaev-Smart-Satoh-Araki的攻击所选曲线的阶不能等于该曲线所定义的有限域的阶,即#E(F P)≠p(不宜选取异常椭圆曲线);
(4)对于二进制域GF(2m)的度m不宜为合数。
Gaudry,Hess和Smart 提出,若m有小约数l(l=4),存在比Pollard's rho算法更快求解ECDLP 的方法。
(5)选择GF(p)的子域H,满足它的阶|H| 是#E 的最大素因子n,并在H 上实现ECC。
2.一般来说有4 种寻找安全椭圆曲线的方法:(椭圆曲线密码体制及其参数生成的研究.2006.DR)
(1) 有限域GF( p) 上随机生成一椭圆曲线, 直接计算其阶, 判断阶是否为大素数或含大素数因子, 若是即确定,否则继续选取曲线, 直至符合条件。
(2) 取具有一定特殊性椭圆曲线的系数, 计算该椭圆曲线的阶, 对该阶进行判断, 直至找到所需要的安全曲线。
(3) 如果p = 2m , 其中m 能被一个比较小的整数d 整除, 首先在有限域GF( p1 ) ( p1 = 2 d ) 上选择一椭圆曲线E,并计算其阶, 根据此值, 利用Weil 定理[ 2] 计算该曲线在其扩域GF( p) 上的阶, 若此阶符合安全标准, 再找曲线E在域GF( p) 上的嵌入E, 则E 即为所需的安全椭圆曲线。
(4) 首先给出具有安全条件的曲线阶, 然后构造一具有此阶的椭圆曲线。
目前国内外比较流行的计算椭圆曲线阶的算法有complex multiplication 算法、SEA 算法、Satoh 算法。
应用广泛的椭圆曲线公钥密码体制( ECC) 中大多是基于特征2 的有限域上。
3.尽管ECC的参数选取方法有许多种,应用最多的是随机选择方法,它是根据任意给定曲线的系数,计算曲线的阶直到找到素数(或近素数)阶的椭圆曲线。
(1)参数p的选取:p当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;
(2)参数a、b的选取:已知素域的规模p,求解比特串SEED及Fp中的元素a,b(D.1p37参数生成)
a) 任意选择长度至少为192的比特串SEED;
b) 计算H = H256(SEED),并记H = (h255;h254;...;h0);
c) 置R =Σh i2i,其中i取从0到255的整数;
d) 置r = R mod p;
e) 任意选择Fp中的元素a和b,使r2≡a3 (mod p);
f) 若(4a3+27b2) mod p=0,则转步骤a);
g) 所选择的Fp上的椭圆曲线为E:y2 = x3+ax+b;
h) 输出(SEED;a,b)
二.椭圆曲线的阶的选取(北邮博士论文)
在椭圆曲线生成的过程中要考虑的一个重要因素就是确定椭圆曲线点的个数,即椭圆曲线的阶"通常密码体制中使用的椭圆曲线E的阶#E(Fp)必须满足以下条件:若已给定域Fp,要最大限度地抵抗针对ECDLP的Poh1ig-Hellman攻击和pollardp攻击,应使得#E(Fp)为素数或者接近素数,即#E(Fp)=hn其中n为素数,一般来说,最小应该满足素数n>2160,h非常小,比如h=1,2,3或4;另外还要避免对特殊曲线的攻击,保证#E(Fp≠p),即椭圆曲线E不是畸形曲线;同时还要使得#E(Fp)的素因子n不能整除p t-1,其中t=1,2,…,30,即椭圆曲线E不是超奇异曲线,MOV攻击法不能实现"
计算椭圆曲线阶的最简单的方法是直接对每个X任F(p)通过WeierstraSS方程查找y任F(p)的解的个数,该方法在密码学域空间很大的情况下是不可取的。
在实际的阶计算中,常采用以下两种方法:复乘法和点计数法。
(l)复乘法(CM)
该方法首先选择一个满足安全性约束的阶N,然后构造阶为N的椭圆曲线。
使用这一方法的时候要先确定构造椭圆曲线的类型,再选用不同的方法确定椭圆曲线的阶。
若选取的曲线是素数域上的椭圆曲线,那么在选定阶N 后,验证阶N是否符合安全椭圆曲线的要求。
若满足,则利用复乘法寻找符合参数要求的椭圆曲线。
复乘法是利用具有复数乘法的椭圆曲线素性证明的算法,来求F(p)上的椭圆曲线E。
(2)点计数法
1985年,SChoof首先提出了计算任意椭圆曲线E的阶#E(Fp)的多项式时间算法。
对于实际密码系统应用中的p,该算法的实现效率较低。
随后该算法被Atkin和ElkioS等人改进,他们通过分析F(p)上的同种映射,利用模多项式的性质,得到了改进算法sChoof一ElkieS一Atkin(sEA)算法。
SEA 算法是已知最好的求解任意素数域和最优扩域上椭圆曲线阶的算法,在实际密码系统应用中,该算法的运行时间大约只需要几分钟,它可以快速地将阶能被小素数整除的候选曲线淘汰,因此常用于早期中止策略。
1999年,Satoh 提出了计算小特征有限域上阶的全新方法Satoh方法,该方法的一些变体如Satoh一Skjemaa一Taguchi(SST)和算术几何中值(AGM)算法,在二进制域的情况下速度非常快,可以很快地生成适合密码学用途的椭圆曲线。
三.基点的选取及其阶次要求
椭圆曲线密码体制并不是运行在整个EC元素构成的阿贝尔群上,而是运行在由其基点G生成的子群中,为了提高曲线的安全性,选择的基点G的阶就是#E的一个大素因子。
根据前面得到的参数p,a,b 和n,利用下面的算法可以求出具有大素数阶的基点:
随着参数a,b,p确定,这条曲线y2=x3+ax+b就定下来了。
先随机产生0到p-1间的整数作为基点x坐标,计算x3+ax+b的结果再开方就得出基点y 坐标,必须满足x,y为整数,又知道椭圆曲线上的任意非无穷远点可作为基点,得到基点G(x,y)(国密局文档p33)。
由HASSNE公式和阿贝尔群结构定理的推论可知,在Fp上选取椭圆曲线时, 要求基点G的阶n>4sqrt(p)(贴吧)。