matlab有限域多项式除法_椭圆曲线密码学简介(二):有限域的椭圆曲线及离散对数问题...
本文主要翻译自这篇文章
译者注
★ 本文承接上文所讨论的椭圆曲线,并将曲线的定义域从实数域缩小到了有限域,引出离散对数问题
”
★ 首先介绍了有限域的定义,并给出了一种基于模运算的有限域”
★ 然后对离散域上的椭圆曲线重新进行群的构建
”
★ 接着介绍了群的阶数的概念,介绍了计算椭圆曲线上的群的阶数的算法,并讨论群和子群的阶数的联系
”
★ 随后展示了如何用椭圆曲线上的任意一点,通过计算点的倍数的方法,构造一个循环子群
”
★ 最后介绍了一种算法,可以在椭圆曲线上找到一个基点,并通过该基点生成一个阶数为大质数的循环子群
”
在上一篇文章当中,我们已经了解了在实数域的椭圆曲线可以用来定一个群。特别的,根据群的定义,我们在实数域上面的椭圆曲线定义了一个点加法的二元操作:对于曲线上面对齐的三个点,三点累加之和为0。并对加法运算的几何方法和代数方法进行了推导。
然后在加法的基础上面介绍了标量乘法,并找到了一种计算标量乘法的简单算法:翻倍和累加,可以使得算法时间复杂度到
接下来,我们将椭圆曲线限定在有限域内,然后看看会有什么变化。
模
有限域,顾名思义,就是一个包含有限个元素的集合。一个有限域的具体例子就是模
在有限域中,我们有两种二元操作:加法
最后,乘法相对加法满足分配率:
模
模运算(modular arithmetic)的方式进行工作。下面是一些在
- 加法:
- 减法:
- 乘法:
- 加法逆元:
实际上:作为加法群时,其单位元为0,根据,有
- 乘法逆元:
实际上:作为乘法群时,其单位元为1,根据,有
如果对这些等式看起来有点模式,可以进一步阅读关于模运算的资料,比如wiki百科,或者Khan Academy。
正如我们之前所说,整数对
模
在完成对
利用扩展欧几里德算法(Extended Euclidean algorithm)可以“方便”地计算乘法逆元,即便在最坏的情况下,算法的时间复杂度也仅为
扩展欧几里德算法的具体细节不在本文的议题范围之内,不过下面是一个python脚本的具体实现:
def extended_euclidean_algorithm(a, b):"""Returns a three-tuple (gcd, x, y) such thata * x + b * y == gcd, where gcd is the greatestcommon divisor of a and b.This function implements the extended Euclideanalgorithm and runs in O(log b) in the worst case."""s, old_s = 0, 1t, old_t = 1, 0r, old_r = b, awhile r != 0:quotient = old_r // rold_r, r = r, old_r - quotient * rold_s, s = s, old_s - quotient * sold_t, t = t, old_t - quotient * treturn old_r, old_s, old_tdef inverse_of(n, p):"""Returns the multiplicative inverse ofn modulo p.This function returns an integer m such that(n * m) % p == 1."""gcd, x, y = extended_euclidean_algorithm(n, p)assert (n * x + p * y) % p == gcdif gcd != 1:# Either n is 0, or p is not a prime number.raise ValueError('{} has no multiplicative inverse ''modulo {}'.format(n, p))else:return x % p
现在,我们有足够的必要条件对
其中0依然是位于无限远的点,
从几何的角度,图形则从连续的曲线变成
点加法(Point addition)
显然,为了使得点加法在
在实数域,显然,三点共线意味着能够找到一条直线将三个点连在一起就好。当然,在
假设我们在一个群当中,点加法将保留所有我们已知的特性:
- 对于一个非0的点
,逆元是横坐标相同但是纵坐标相反的点。或者如果你愿意,可以这样计算,,举个例子,在域上的曲线有一个点,则其逆元
- 根据逆元的定义有
代数加法(Algebraic sum)
除了在每一个表达式后面加上一个
如果
如果
方程形式的一致并不是巧合:实际上在任何一个域,方程的形式都是相同的,有限的或者无限的,仅在
proof from Stefan Friedl。
另外,考虑到离散化后的曲线切线已无从谈起,以及其它方面的一些问题,在离散化域中,我们不再定义几何加法。
椭圆曲线群的阶(The order of an elliptic curve group)
显而易见,有限域上定义的椭圆曲线只有有限个点。但是有一个重要的问题不应该忽略:对于一个特定有限域上的椭圆曲线,到底有多少个点呢?
首先,我们将群中所包含点的数目定义为群的阶。
通常从
所幸,有一个更快的算法可以计算群的阶:Schoof's algorithm,这个算法可以在多项式级别的算法世界复杂度内,这正是我们所需要的。
标量乘法与循环子群(Scalar multiplication and cyclic subgroups)
这次我们依然可以使用翻倍累加算法将乘法计算的时间复杂度控制在
在
计算
- ...
在此,我们可以确认两件事情:第一,
对于每一个整数
不仅如此,我们可以立刻确认这五个点在加法操作上面也是封闭的。这意味着:不管我是加
不仅仅对于
这意味着:如果我们将两个
这足以证明
一个“子群”是指另外一个群的子集的群。而“循环子群”则是指子群中的元素循环地出现,就好像在前面的例子当中所示。点
发生器(generator)或者基点(base point)。
循环子群是椭圆曲线密码学以及其它加密系统的基础。
子群的阶(Subgroup order)
我们可以自问一下:由一个点
Schoof's algorithm
,因为该算法只有在整个椭圆曲线上面是有效的,在子群当中就无效了。在解决这个问题之前,我们需要了解以下几点:
- 我们已经对群的阶进行过定义:阶是一个群的点数。目前这个定义依然有效,但是在一个循环子群当中,我们可以给一个新的等价的定义:循环子群的阶是使得
的最小正整数。我们可以看之前那个例子,我们的子群有5个点,然后我们有
- Lagrange's theorem,
的阶与椭圆曲线本身的阶有联系,一个子群的阶是父群阶的一个因子。换句话说,如果一个椭圆曲线有个点,然后它的一个子群有个点,那么是的一个因子
以上两个有用的信息合在一起可以帮助我们找到基于特定几点
- 使用
Schoof's algorithm
找到椭圆曲线而阶 - 找到
的所有因子
- 对
的每一个因子,都计算
- 满足
的最小正整数,就是子群的阶
举个例子,曲线
需要特别注意的是,选取最小的因子非常重要,而不是随机选取。如果随机选取,我们还可能选择
再举一个例子,曲线
寻找一个基点(Finding a base point)
对于我们的椭圆曲线加密算法,我们需要一个尽量高阶的子群。通常来说,我们选择一条椭圆曲线,计算它的阶(
首先,需要再介绍一个概念。Lagrange's theorem表明
对于椭圆曲线上面的每一个点,我们有
现在假设
综上所述,通过确定子群的阶,再据此寻找合适的基点的算法如下:
- 计算椭圆曲线的阶
- 选择恰当的子群的阶
,为了使得这个算法能够正常工作,这个整数必须是素数,并且是的一个因子
- 计算协因子
- 再曲线上面选择一个随机点
- 计算
- 如果
是0,则返回第四步,否则,我们就找到了一个阶为且协因子为的子群
需要指出的是该算法当且仅当
离散对数(Discrete logarithm)
正如我们再之前那篇文章当中对连续的椭圆曲线所做的,对于定义在离散域当中的椭圆曲线,我们接下来讨论一下下面这个问题:如果已知
这个问题,就是经典的椭圆曲线离散对数问题,通常来说是“hard”的问题,在经典的计算机上面是无法通过多项式级别的时间复杂度来解决这个问题的,尽管目前还没有严格的数学证明。
这个问题和其它加密系统当中使用的离散对数问题类似,比如DSA
,D-H
和ElGamal
。这并不是一个巧合。不同的是,在这些算法当中,我们使用幂模运算来代替标量乘法。这些离散对数问题可以表示如下: 已知
两个问题都是离散的,因为它只与有限的集合相关,更加精确地说,是循环子群。而当前椭圆曲线加密更为有趣是在于它比起其它类似的加密系统难题更难,可以使用更小的字节来表示整数
参考资料
- 扩展欧几里德算法(Extended Euclidean algorithm)
- 模运算(modular arithmetic)
- Khan Academy
- Elliptic Curve Cryptography: finite fields and discrete logarithms
- 有限域和离散对数问题(ECC椭圆曲线算法2)
matlab有限域多项式除法_椭圆曲线密码学简介(二):有限域的椭圆曲线及离散对数问题...相关推荐
- matlab有限域多项式除法_有限域GF(2^8)的四则运算及拉格朗日插值
域的性质: 群和域在数学上的概念就不解释,可以参考维基百科.当然也可以参考<密码编码学与网络安全>这书的有限域一章.形象地说,域有这样一个性质:在加法和乘法上具有封闭性.也就是说对域中的元 ...
- 【区块链技术工坊46期】PPIO蒋鑫:椭圆曲线密码学简介
1. 活动基本信息 1)题目: [区块链技术工坊46期]椭圆曲线密码学简介 2)议题: 目前区块链项目如火如荼,几乎所有的区块链都会用到钱包,我们也经常听说椭圆曲线这个密码学术语,那么它们之间有没有什 ...
- python 椭圆曲线加法_椭圆曲线密码学简介(一):实数域的椭圆曲线及其群运算规则...
经过前面几篇文章的介绍,相信对公钥密码学有所了解的各位应该已经听说过ECC,ECDH和ECDSA,ECC是椭圆密码学的简称,后面两个是基于椭圆密码学的具体算法. 目前我们可以在当前web和IT世界当中 ...
- 椭圆曲线密码学简介****
知道什么是公钥密码学的人可能已经听说过ECC.ECDH或是ECDSA.第一个术语是椭圆曲线密码学(Elliptic Curve Cryptography) 的缩写,后两个是基于它的算法名称. 如今,我 ...
- python定义多项式除法_快速多项式除法的fft除法
下面是一个快速多项式除法算法的直接实现,在这些lecture notes中找到.在 除法是基于除数的倒数与被除数的快速/FFT相乘.我下面的实现严格遵循了被证明具有O(n*log(n))时间复杂度的算 ...
- matlab有限域多项式除法_MATLAB极小值优化
11.1.2 极小值优化 1.标量最小值优化 求解单变量最优化问题的方法有多种,根据目标函数是否需要求导,可以分为两类,即直接法和间接法.直接法不需要对目标函数进行求导,而间接法则需要用到目标函数的 ...
- 密码学安全强随机数生成器_强密码学简介
密码学安全强随机数生成器 让我惊讶的一件事是,大多数开发人员都不熟悉强大的加密技术. 在我的职业生涯中,我已经看到过各种各样的错误,这些错误会导致数据泄漏,可猜测的密码,不幸的泄露甚至更糟. 令人高兴 ...
- matlab图像校正工具箱_相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)...
一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标系和像平面 ...
- python定义多项式除法_多项式长除法
我被困在一个问题上,尽管如此,我还是找不到比较是怎么出错的.我试着做多项式长除模2.在while len(binCrcGen) <= len(binPayload) and binPayload ...
最新文章
- 前端应该了解的颜色的寓意
- Linux chgrp chown chmod 基础知识
- Android 源码解析之AsyncTask
- 2021年福安民族中学高考成绩查询,福安民族中学2019年录取分数线
- 格式化输出字符串变量
- springboot入门_模板
- 杭电1072 猜数字
- 数据结构严蔚敏 #二叉树 代码复现
- 饥荒dns服务器未响应,DNS服务器未响应怎么办
- 《看清你的思维图谱》读书笔记
- 星起航:亚马逊卖家利用一件代发模式实现跨境电商飞速发展
- RFSoC应用笔记 - RF数据转换器 -10- RFSoC关键配置之其他功能(一)
- Excel怎样按行排序,干货经验!如何将行数据进行降序排序详细讲解
- RK3399适配OV8858摄像头
- uni-app实现尺子效果
- 让电脑注销的c语言程序,C语言实现系统关机注销功能
- Prometheus(三)Grafana部署及部署告警
- Zemax学习笔记(2)- 镜头数据编辑器及快速编辑器的使用方法介绍
- OSEA中QRS波检测算法代码分析-未完待续
- metro-GettingStarted