基于演化计算的安全椭圆曲线快速选择算法的制作方法

文档序号:6582241阅读:346来源:国知局
专利名称:基于演化计算的安全椭圆曲线快速选择算法的制作方法
技术领域
本发明属于信息安全保护技术领域,涉及的是一种基于演化计算的安全椭圆曲线
快速选择算法。
背景技术
1985年Neal Koblitz和Victor Mille提出了椭圆曲线密码体制(ECC),其安全 性是建立在椭圆曲线离散对数计算困难性的基础之上,具有安全性高、占用带宽小、计算复 杂度高等优点,近二十年来已成为国际密码学的研究热点。 ECC算法的标准化,有取代RSA在公钥密码霸主地位的趋势,且ECC已经逐渐被包 含到IEEE、ANSI、ISO和NIST等发布的标准中。特别是美国NIST推荐的15条曲线也成为 目前工程应用中常选用的椭圆曲线。但是选择安全曲线是一个难题,现有的算法主要有两 种复乘法(CM)和随机选择法。对于CM方法,它是根据给定的阶来选取符合此阶的ECC曲 线,实现的速度相对较快,但是这种算法的缺陷是产生的曲线具有某种特定的结构特征,存 在潜在的安全威胁。因此,一般都利用随机选择法来选择曲线。随机选取的椭圆曲线的安 全性大多数依赖于曲线的阶的大小,阶越大,计算复杂度就越高,安全性越强, 一般阶只要 含有大于2160的素因子即可以认为是安全的,因此,如何求取曲线的阶是选择安全曲线的 一个重要的问题。求阶算法有以下几种Schoof's algorithm、SEA(Schoof-Elkies-Atkin) 算法、Satoh算法、Fouquet算法、SST算法、AGM算法和MSST算法等,但是这些算法的计算 复杂度都比较高,选择曲线的速度比较慢,不利于快速求解安全曲线。

发明内容
鉴于以上所述现有技术存在的问题和不足,本发明的目的在于提出一种基于演化 计算的安全椭圆曲线快速选择算法,该算法选择的安全曲线基域的覆盖范围大,能够抵御 常见的攻击威胁,提高安全曲线性。
为达到上述目的,本发明采用如下方案 本发明的基于演化计算的安全椭圆曲线快速选择算法,其具体步骤如下
(1)、利用Weil定理设计一条Koblitz型椭圆曲线,然后,采用以2为特征的子域 扩展算法计算Koblitz型椭圆曲线的阶#£(^ ),其计算方程为
当a = 0, b = 1时, 等 )=2"+。=2"+(+ )"} =2" +1-1+擒+(-1-细 =2" +(-1)"(力, 当a = l,b = 1时,令d二V^,那么 , ):y+i《+《)-y+i一((i+^,)"+(lJ/)")<formula>formula see original document page 4</formula>
(2)、利用类似于最大最小蚁群(MAS)算法设计出适合安全曲线基域搜索的模
型,采用素数判定算法判定该点对应的阶是否为大素数,如果该点对应的阶含有大素数因
子,则说明该点所对应的域含有安全椭圆曲线,否则,不含有安全曲线,根据该原则挑选出
安全椭圆曲线,其具体如下 (2-l)、计算若干素数的阶,并存储; (2-2)、参数的初始化,取a = IP = 5,信息素蒸发因子P = 0.02,迭代次数大 于20次能得到比较好的结果,其中每次迭代蚂蚁的数量取5 ; (2-3)、每次迭代开始,将5只蚂蚁随机放在不同点,蚂蚁每到达一个点,采用素数 判定算法判定该点对应的阶是否为大素数,然后按照蚁群算法模型构建的规则选择下一个 要到打的点,每只蚂蚁每走一步进行一次信息素局部更新;每次迭代结束后,选择一个最优 蚂蚁对信息素进行一次全局更新,如果该点对应的阶含有大素数因子,则说明该点所对应 的域含有安全椭圆曲线,否则,不含有安全曲线,直到找到对应的基点的阶是大素数,挑选 出含有大素数阶的安全椭圆曲线。 本发明的基于演化计算的安全椭圆曲线快速选择算法与现有技术相比具体有的 优点在于该算法选择的安全椭圆曲线与NIST推荐的安全曲线具有相同的安全准则,产生 的曲线能够抵御目前常见的攻击,理论分析及实验数据表明,安全曲线的最大基域超过美 国NIST公布的15条曲线中基域最高的571bit。


图1是本发明的基于演化计算的安全椭圆曲线快速选择算法的流程图; 图2是本发明中25个(0-100之间所有素数)素数阶的具体数据图; 图3是本发明中的蚁群算法模型图; 图4是本发明中蚁群算法迭代10次后的结果图; 图5是本发明中蚁群算法迭代20次后的结果图; 图6是本发明通过实验得到得m = 163的安全域各个参数、基点以及运算时间图 图7是本发明通过实验得到得m = 233的安全域各个参数、基点以及运算时间图 图8是本发明通过实验得到得m = 283的安全域各个参数、基点以及运算时间图 图9是本发明通过实验得到得m = 409的安全域各个参数、基点以及运算时间图 图10是本发明通过实验得到得m = 571的安全域各个参数、基点以及运算时间 具体实施例方式
下面结合附图对本发明的实施作进一步详细的说明。 本发明的基于演化计算的安全椭圆曲线快速选择算法,如图1所示,具体实现步 骤如下 (1)、利用Weil定理设计一条Koblitz型椭圆曲线,然后,采用以2为特征的子域 扩展算法计算Koblitz型椭圆曲线的阶能(《 ),其计算方程为
当a = 0, b = 1时, #£(/p=2" +《)=2" +1—{("^+^!T +(~^—4'〕"} =2"+l- =2" +1-垂((^-1)" +(-l)"dl)T} 当a = l,b = 1时,令^ = 7^,那么 =2" +i—(< +o=y /)" +(i 4')"} =2"+14((1+勿+(1-细 (2)、利用类似于最大最小蚁群(MMAS)算法设计出适合安全曲线基域搜索的模 型,采用素数判定算法判定该点对应的阶是否为大素数,挑选出安全椭圆曲线,其具体如 下 (2-1)、计算0-100之间素数的阶,并将其存储,如图2所示,第一列为基域大小,第 二列为该域的阶; (2-2)、参数的初始化,取a = IP = 5,注重启发信息在探索中的作用,信息素蒸
发因子P 二0.02,在PC机中的仿真实验表明P取较小的数避免蚁群算法过快收敛,蚁群
算法模型如图3所示,每一个点代表一个m值,也对应相应的阶。在PC机中的仿真实验表
明迭代次数大于20次能得到比较好的结果,其中每次迭代蚂蚁的数量取5 ; (2-3)、每次迭代开始,将5只蚂蚁随机放在不同点,蚂蚁每到达一个点,采用素数
判定算法判定该点对应的阶是否为大素数,如果该点对应的阶含有大素数因子,则说明该
点所对应的域含有安全椭圆曲线,否则,不含有安全曲线,然后,如图3所示,按照蚁群算法
模型构建的规则选择下一个要到达的点。每只蚂蚁每走一步进行一次信息素局部更新;每
次迭代结束后,选择一个最优蚂蚁对信息素进行一次全局更新。图4是迭代10次后的结
果,图5是迭代20次后的结果,其中黑色点表明信息素含量很高,这些点有很大的可能性是
大素数;灰色点表明信息素部分挥发,这些点有较小的可能性是大素数;白色点表明信息
素已经达到最小值,表明这些点几乎不可能是大素数。从图4,图5的结果中可以看出,m =
5, 7, 13, 19, 23, 41, 83时候能够找到对应的基点的阶是素数,挑选出安全椭圆曲线。 本发明的基于演化计算的安全椭圆曲线快速选择算法在PC机上,其中,硬件平
台:CPU掘s卿ron 2800+内存256MB硬盘80G,软件平台-Microsoft Visual C++2005,
初步完成了 F(22°°°)以内Koblitz安全曲线的产生实验,其实验结果表明 ①、该算法选择的安全曲线基域,最大超过1900bit (PC机耗时5个小时),超过美
国NIST公布的15条曲线中基域最高的571bit ; ②、已有的163bit以上的安全曲线基域有如下面形式的Koblitz曲线Ei :y2+xy = f+^+l,701bit基域产生结果如下
k表示基域,n为基域为k的阶
k = 2'7Q1
同时也覆盖了美国NIST公布的F(2脱) F(2^)5条Koblitz安全曲线,如图6、图 7、图8、图9、图10所示,其中图6、图7、图8、图9、图10分别是通过实验得到的k = 2' 163, k = 2~233, k = 2~283, k = 2~409和k = 2~571安全域的各个参数、基点以及运算时间。
权利要求
一种基于演化计算的安全椭圆曲线快速选择算法,其特征在于,该方法具体步骤如下(1)、利用Weil定理设计一条Koblitz型椭圆曲线,然后,采用以2为特征的子域扩展算法计算Koblitz型椭圆曲线的阶其计算方程为当a=0,b=1时, <mrow><mo>#</mo><mi>E</mi><mrow> <mo>(</mo> <msub><mi>F</mi><msup> <mn>2</mn> <mi>n</mi></msup> </msub> <mo>)</mo></mrow><mo>=</mo><msup> <mn>2</mn> <mi>n</mi></msup><mo>+</mo><mn>1</mn><mo>-</mo><mrow> <mo>(</mo> <msubsup><mi>t</mi><mn>1</mn><mi>n</mi> </msubsup> <mo>+</mo> <msubsup><mi>t</mi><mn>2</mn><mi>n</mi> </msubsup> <mo>)</mo></mrow><mo>=</mo><msup> <mn>2</mn> <mi>n</mi></msup><mo>+</mo><mn>1</mn><mo>-</mo><mo>{</mo><msup> <mrow><mo>(</mo><mo>-</mo><mfrac> <mn>1</mn> <mn>2</mn></mfrac><mo>+</mo><mfrac> <msqrt><mn>7</mn> </msqrt> <mn>2</mn></mfrac><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>+</mo><msup> <mrow><mo>(</mo><mo>-</mo><mfrac> <mn>1</mn> <mn>2</mn></mfrac><mo>-</mo><mfrac> <msqrt><mn>7</mn> </msqrt> <mn>2</mn></mfrac><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>}</mo> </mrow> <mrow><mo>=</mo><msup> <mn>2</mn> <mi>n</mi></msup><mo>+</mo><mn>1</mn><mo>-</mo><mfrac> <mn>1</mn> <msup><mn>2</mn><mi>n</mi> </msup></mfrac><mo>{</mo><msup> <mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>+</mo><msqrt> <mn>7</mn></msqrt><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>+</mo><msup> <mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>-</mo><msqrt> <mn>7</mn></msqrt><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>}</mo> </mrow> <mrow><mo>=</mo><msup> <mn>2</mn> <mi>n</mi></msup><mo>+</mo><mn>1</mn><mo>-</mo><mfrac> <mn>1</mn> <msup><mn>2</mn><mi>n</mi> </msup></mfrac><mo>{</mo><msup> <mrow><mo>(</mo><msqrt> <mn>7</mn></msqrt><mi>i</mi><mo>-</mo><mn>1</mn><mo>)</mo> </mrow> <mi>n</mi></msup><mo>+</mo><msup> <mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo> </mrow> <mi>n</mi></msup><msup> <mrow><mo>(</mo><msqrt> <mn>7</mn></msqrt><mi>i</mi><mo>+</mo><mn>1</mn><mo>)</mo> </mrow> <mi>n</mi></msup><mo>}</mo> </mrow>当a=1,b=1时,令那么 <mrow><mo>#</mo><mi>E</mi><mrow> <mo>(</mo> <msub><mi>F</mi><msup> <mn>2</mn> <mi>n</mi></msup> </msub> <mo>)</mo></mrow><mo>=</mo><msup> <mn>2</mn> <mi>n</mi></msup><mo>+</mo><mn>1</mn><mo>-</mo><mrow> <mo>(</mo> <msubsup><mi>t</mi><mn>1</mn><mi>n</mi> </msubsup> <mo>+</mo> <msubsup><mi>t</mi><mn>2</mn><mi>n</mi> </msubsup> <mo>)</mo></mrow><mo>=</mo><msup> <mn>2</mn> <mi>n</mi></msup><mo>+</mo><mn>1</mn><mo>-</mo><mo>{</mo><msup> <mrow><mo>(</mo><mfrac> <mn>1</mn> <mn>2</mn></mfrac><mo>+</mo><mfrac> <msqrt><mn>7</mn> </msqrt> <mn>2</mn></mfrac><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>+</mo><msup> <mrow><mo>(</mo><mfrac> <mn>1</mn> <mn>2</mn></mfrac><mo>-</mo><mfrac> <msqrt><mn>7</mn> </msqrt> <mn>2</mn></mfrac><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>}</mo> </mrow> <mrow><mo>=</mo><msup> <mn>2</mn> <mi>n</mi></msup><mo>+</mo><mn>1</mn><mo>-</mo><mfrac> <mn>1</mn> <msup><mn>2</mn><mi>n</mi> </msup></mfrac><mo>{</mo><msup> <mrow><mo>(</mo><mn>1</mn><mo>+</mo><msqrt> <mn>7</mn></msqrt><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>+</mo><msup> <mrow><mo>(</mo><mn>1</mn><mo>-</mo><msqrt> <mn>7</mn></msqrt><mi>i</mi><mo>)</mo> </mrow> <mi>n</mi></msup><mo>}</mo> </mrow>(2)、利用类似于最大最小蚁群(MMAS)算法设计出适合安全曲线基域搜索的模型,采用素数判定算法判定该点对应的阶是否为大素数,挑选出安全椭圆曲线,其具体如下(2-1)、计算若干素数的阶,并存储;(2-2)、参数的初始化,取α=1β=5,信息素蒸发因子ρ=0.02,迭代次数大于20次能得到比较好的结果,其中每次迭代蚂蚁的数量取5;(2-3)、每次迭代开始,将5只蚂蚁随机放在不同点,蚂蚁每到达一个点,采用素数判定算法判定该点对应的阶是否为大素数,然后按照蚁群算法模型,构建的规则选择下一个要到达的点,每只蚂蚁每走一步进行一次信息素局部更新;每次迭代结束后,选择一个最优蚂蚁对信息素进行一次全局更新,如果该点对应的阶含有大素数因子,则说明该点所对应的域含有安全椭圆曲线,否则,不含有安全曲线,直到找到对应的基点的阶是大素数,挑选出含有大素数阶的安全椭圆曲线。F2009102005047C00011.tif,F2009102005047C00015.tif
全文摘要
本发明的公开了一种基于演化计算的安全椭圆曲线快速选择算法,该算法包括步骤如下(1)利用Weil定理设计一条Koblitz型椭圆曲线,然后,采用以2为特征的子域扩展算法计算Montgomery型椭圆曲线的阶;(2)利用类似于最大最小蚁群(MMAS)算法设计出适合安全曲线基域搜索的模型,采用素数判定算法判定该点对应的阶是否为大素数,挑选出安全椭圆曲线。本发明与现有技术相比具有的优点在于该算法选择的安全椭圆曲线与NIST推荐的安全曲线具有相同的安全准则,产生的曲线能够抵御目前常见的攻击,理论分析及实验数据表明,安全曲线的最大基域超过目前NIST公布的15条曲线中基域最高的571bit。
文档编号G06N3/00GK101714074SQ20091020050
公开日2010年5月26日 申请日期2009年12月22日 优先权日2009年12月22日
发明者刘礼黎, 张焕国, 时向勇, 朱美丽, 王潮 申请人:上海大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1