第二十五个知识点:使用特殊的素数定义$GF(p)$和$GF(2^n)$的方法。

第二十五个知识点:使用特殊的素数定义\(GF(p)\)和\(GF(2^n)\)的方法。

在我们之前看到的博客中,当实现密码学方案时,一个最频繁调用的操作就是模运算。不幸的是,尽管模块化的使用非常广泛,但是它不能像其它算术运算(如加法和乘法)那样容易的执行。蒙哥马利表达提供了一种解决方案,这里我们讨论另一种解决方法——伪梅森素数规约。

定义:如果一个素数\(p\)被写成如下形式,那么就称\(p\)位伪梅森素数。其中\(b=2,c=1\)时就是梅森素数。
\[
P = b^n-c,其中0<|c|<2^{n/2}
\]
实际上,\(b\)总是2,我们选择\(c\)通常是32位或者64位。

通过定义很容易推导出
\[
p \equiv b^n-c \equiv 0 \mod p \b^n \equiv c \mod p
\]
因此给定一个\(k\)位的整数\(z\),我们让\(z^{'}\)为最低\(n\)位有效位,\(z^{''}\)是高\(k-n\)位有效位,就有\(z = z^{''}2^n+z^{'}\),然后我们能重写\(z \mod p\)为
\[
z \equiv z^{''}b^n+z{'} \equiv z^{''}c+z{'} \mod p
\]
重复的计算上述式子,就可以得到\(z \mod p\)的值,这个值在\(Z_p\)中。(\(Z_p\)就是模\(p\)的完全剩余系。)

下面有些需要注意的点:

? 1.\(z^{'}\)和\(z^{''}\)都能够通过简单的移位运算获得。

? 2.因为\(c\)被选择是一个字的长度,那么乘法计算会变得容易。

? 3.每次迭代会减少\(k\)的值。得到的值会是\(max(k-n+w,n)\)。

因此一般来说,计算伪梅森素数的约减将会仅仅需要移位,加法和乘法。

然而,使用这种方法的缺点也很明显,因为这种实现通常需要多方使用固定的设置,这可能会导致互操作性和安全性问题。更多的细节参考[1]和[2]。

\(GF(2^n)\)是另外一个经常被用到的域。

三项式和五项式是这个领域中最长用到的模。我们将会展示三项式如果简化约减。相同的技术亦可以直接用于五项式。

这个想法和素数域的那个非常类似。假设我们有三项式\(f(x) = x^n+x^t+1\),其中 $ 0<t<n/2 $。

我们立刻就有
\[
x^n \equiv x^t +1 \mod f(x)
\]
给定多项式\(z(x)\)的次数大于\(n\)。我们把\(z(n)\)写成
\[
z(x) = z^{''}(x)x^n+z{'}(x)
\]
其中,\(z^{'}(x)\)是\(z(x)\)的最低\(n\)位,\(z^{''}(x)\)是剩下的位数。

然后我们就像在GF(p)中那样,我们计算模数通过:
\[
z(x) \equiv z^{''}(x)x^n+z^{'}(x) \equiv z^{''}(x)(x^t+1)+z^{'}(x) \\equiv z^{''}(x)x^t+z^{''}(x)+z^{'}(x) \mod f(x)
\]
这个运算因为\(t\)是一个更小的数使得它变得简单了。

[2]中也描述了标准规约的另一个优化。考虑到标准的例程会规约\(z(x)\) 的次数\(m\)而不是\(f(x)\)的次数\(n\):
\[
z(x) = a_mx^m+a_{m-1}x^{m-1}+...+a_1x^1+a_0x^0 \f(x) = x^n+x^t+1
\]
当我们尝试规约\(a_ix^i\),有下面两种情况:

  • 如果\(a_i=0\),那么就不用规约
  • 如果\(a_i=1\),1就可以进行对齐,提出一个这样的元素\(a_{i-n+t}\)和\(a_{i-n}\)。

因为添加\(0\)不会改变余数,这两种情况可以被一般化,因此我们能写下如下的标准规约程序:

Input:\(z(x)\)

Output:\(z(x)\)

1.for \(i=m\) to \(n\) by -1

2.{

3.\(a_{i-n+t}+=a_i\)

4.\(a_{i-n}+=a_i\)

5.}

使用这样算法的在软件上的优化不是明显的。但是在硬件上的优化是明显的,同时仅仅更新了\(z(x)\),不需要额外的存储。

另外一个优点就是这样的形式仅仅需要$ 0<t<n $,它能被在常量时间内执行。

[1]Menezes, Alfred J., Paul C. Van Oorschot, and Scott A. Vanstone. Handbook of applied cryptography. CRC press, 1996.

[2]Blake, Ian F., Gadiel Seroussi, and Nigel Smart. Elliptic curves in cryptography. Vol. 265. Cambridge university press, 1999.

原文地址:https://www.cnblogs.com/zhuowangy2k/p/12245554.html

时间: 2024-11-05 14:50:25

第二十五个知识点:使用特殊的素数定义$GF(p)$和$GF(2^n)$的方法。的相关文章

centos lamp/lnmp阶段复习 第二十五节课

centos  lamp/lnmp阶段复习   第二十五节课 上半节课 下半节课 f

第二十五天 慵懒的投射在JDBC上的暖阳 —Hibernate的使用(四)

6月4日,晴天."晴日暖风生麦气,绿阴幽草胜花时."      "道"是只有中国人才懂得并孜孜以求的特殊的宇宙存在感的体验.全世界只有中文才能阐释"道"的全部涵义.然而所谓阐释,并不重在定义,更多的还是感受. "道"既在"虚无"之内,又超越了"虚无",成为中国文化最平常但又最玄妙的一种境界. 老庄认为:道是宇宙的本体,即是宇宙万物的老祖宗.    老外认为:Tao is the sour

第二十五课:超越抽象极限

1.一个阶跃输入,后面接戴维南电阻,测量点Vout,之后接其他设计电路,末端开路 理论上在同一时刻Vout也发生阶跃(例如 0到5V) 实际上,在t=0是,输出上升到一半,持续一段时间才会继续上升到5V 这是因为当导线非常长时,需要考虑信号传输时间 脉冲到达末端返回到Vo,Vo得到一个回波,两个2.5V相加就达到5V 这个阻抗对于多数导线都等于50欧姆,称之为特性阻抗 解决方法:换短的导线: 改变时钟信号 2.同一个电压对多个反相器供电 前一个反相器在上端导通时,通过的电流变化会在电感上产生压降

NeHe OpenGL教程 第二十五课:变形

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十五课:变形 变形和从文件中加载3D物体: 在这一课中,你将学会如何从文件加载3D模型,并且平滑的从一个模型变换为另一个模型. 欢迎来到这激动人心的一课,在这一课里,我们将介绍模型的变形.需要注意的是各个模型必须要有相同的顶点,

Gradle 1.12用户指南翻译——第二十五章. Scala 插件

其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前

centos NFS/FTP服务配置 第二十五节课

centos  NFS/FTP服务配置   第二十五节课 上半节课 下半节课 f

Training的第二十五天

今天学到了新的知识就是:转义字符,了解了类型转换的规则和自动转换发生的条件.学会了数据类型的强制转换. Training的第二十五天

javaSE第二十五天

第二十五天????399 1:如何让Netbeans的东西Eclipse能访问.????399 2:GUI(了解)????399 (1)用户图形界面????399 (2)两个包:????399 (3)主要方法:????399 A:javax.swing包下的方法????399 B:监听机制的应用????400 (4)GUI的继承体系????400 (5)事件监听机制(理解)????401 (6)适配器模式(理解)????401 案例解释????401 1. UserDao(顶层接口)????40

经典算法题每日演练——第二十五题 块状链表

原文:经典算法题每日演练--第二十五题 块状链表 在数据结构的世界里,我们会认识各种各样的数据结构,每一种数据结构都能解决相应领域的问题,每一种数据结构都像 是降龙十八掌中的某一掌,掌掌毙命... 当然每个数据结构,有他的优点,必然就有它的缺点,那么如何创造一种数据结构 来将某两种数据结构进行扬长避短,那就非常完美了.这样的数据结构也有很多,比如:双端队列,还有就是今天讲的 块状链表, 我们都知道 数组 具有 O(1)的查询时间,O(N)的删除,O(N)的插入... 链表 具有 O(N)的查询时