A note on the calculation of some functions in finite fields: Tricks of the Trade解读
本节对该paper进行解读,记录笔记。
经常见到的是在素域\(F_p\)上计算的,尤其是双线性对出现后,在扩域\(F_{p^m}\)上计效率就需要优化了。该论文主要总结了一些在有限域上进行某些计算(求模逆,hash到curve的转换算法,求模平方根等)的技巧。
素域
模幂(modular exponentiation)
模幂运算则是指先进行幂运算,在进行模运算,即\(X^N(mod p)\)
这样对于较小的\(N\),一般这样计算:
方法1
(1)根据运算规则\(ab(mod p)=((a mod p)b) mod p\) ,我们知道\(3333^{5555}(mod10)= 3^{5555}(mod10)\)。由于\(3^4 = 81\),所以\(3^4(mod10)= 1\)。
(2)根据运算规则\((a*b)modp=(amodp*bmodp)modp\),由于\(5555 = 4 * 1388 + 3\),我们得到
\]
计算完毕。
利用这些规则我们可以有效地计算\(X^N(mod P)\)。简单的算法是将result初始化为1,然后重复将result乘以X,每次乘法之后应用mod运算符(这样使得result的值变小,以免溢出),执行N次相乘后,result就是我们要找的答案。
当N的值很大时,上面的方法需要计算很长时间,是不切实际的,一般用一下方法:
方法2
(1)如果N是偶数,那么\(X^N =(X*X)^{[N/2]}\);
(2)如果N是奇数,那么\(X^N = X*X^{(N-1)} = X *(X*X)^{[N/2]}\);
其中\([N]\)是指小于或等于\(N\)的最大整数。
(3)程序
// 函数功能:利用模运算规则,采用递归方式,计算X^N(% P)
// 函数名:PowerMod
// 输入值:unsigned int x,底数x
// unsigned int n,指数n
// unsigned int p,模p
// 返回值:unsigned int,X^N(% P)的结果
unsigned int PowerMod(unsigned int x, unsigned int n, unsigned int p)
{
if (n ==0)
{
return1;
}
unsigned int temp = PowerMod((x * x)%p, n/2, p); //递归计算(X*X)^[N/2]
if ((n &1) !=0) //判断n的奇偶性
{
temp = (temp * x) % p;
}
return temp;
}
求模逆(Modular inversion)
意思是:对于\(ax+bp=gcd(x,p)=1\),给出\(x,p\),求\(a,b\)。简单点说,就是在模\(p\)下,求\(x\)的乘法逆元\(a\)。
给出三种方法
方法1:扩展欧几里得( extended Euclidean algorithm)
参考:求逆元
该方法的复杂度为\(O(m^2)\),其中\(m\)是\(p\)的bit数。
方法2:费马小定理( Fermat’s Little Theorem)
\(a=x^{p-2}(mod p)\)
具体请参考:求逆元
该方法基于模幂运算,复杂度为\(O(m^3)\),可以在确定时间内完成。
速度慢,更简单,更安全!
方法3
\(ax=1(mod p)\),即\(a=1/x(mod p)\)
该方法速度很快,但很难在确定时间内完成。
使用技巧
比如要分别求\(1/x(mod p)\)和\(1/y(mod p)\),可以将求两个模逆转换为求一个模逆,即求\(1/xy(mod p)\),对于\(y/xy(mod p)\)和\(x/xy(mod p)\),
二次剩余(Quadratic residuosity)
也叫做“平方剩余”,是一个数学概念,具体指:

Legendre symbol

模平方根(Modular square roots)
就是如何计算二次剩余中的平方根\(x\)
使用Tonelli-Shanks方法计算:
\]
其中\(2^e | (p-1)\)
可逆平方根(inverse square root)
即计算开方的倒数计算:\((\sqrt{x})^{-1}(mod p)\)
应用
点的压缩(Point Decompression)
Hash to Curve
扩域
A note on the calculation of some functions in finite fields: Tricks of the Trade解读的更多相关文章
- MySQL 8.0.2: Introducing Window Functions
July 18, 2017MySQL, SQLDag Wanvik MySQL 8.0.2 introduces SQL window functions, or analytic functions ...
- SAP NOTE 1999997 - FAQ: SAP HANA Memory
Symptom You have questions related to the SAP HANA memory. You experience a high memory utilization ...
- IAR EWARM Checksum Technical Note
IELFTOOL Checksum - Basic actions EW targets: ARM, RH850, RX, SH, STM8 EW component: General issues ...
- HANA SQLScript
数据类型 日期时间类型 DATE(日期) DATE 数据类型由年.月.日信息组成,表示一个日期值. DATA 类型的默认格式为‘YYYY-MM-DD’. YYYY 表示年, MM 表示月而 DD 表示 ...
- [转]The NTLM Authentication Protocol and Security Support Provider
本文转自:http://davenport.sourceforge.net/ntlm.html#ntlmHttpAuthentication The NTLM Authentication Proto ...
- data cleaning
Cleaning data in Python Table of Contents Set up environments Data analysis packages in Python Cle ...
- libuv(不断更新)
/* * Initialize the uv_async_t handle. A NULL callback is allowed. * * Note that uv_async_init(), un ...
- Create a Qt Widget Based Application—Windows
This turtorial describes how to use Qt Creator to create a small Qt application, Text Finder. It is ...
- 提高神经网络的学习方式Improving the way neural networks learn
When a golf player is first learning to play golf, they usually spend most of their time developing ...
- FDR
声明: 网上摘抄 False discovery rate (FDR) control is a statistical method used in multiple hypothesis test ...
随机推荐
- 一些前端javaScript时间处理函数
史上最全时间处理函数(逐行注释) 获取任意周的周一.周末 获取任意月的前后n月的最后一天和第一天 详细函数如下 获取当前周的周一和周末 || 获取当前周的前后n周的周一和周末 函数注释: 入参: da ...
- Mybatis【18】-- Mybatis自关联多对一查询方式
注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-14-oneself-many2one,需要自取, ...
- 分析Java值传递与引用传递
背景 今天在公司做需求的时候,突然遇到了这个问题,八股文背过,但是又记不大清楚了.索性写下来,方便我这笨蛋脑子下次看. 解释 理解这个问题在于看它的角度(强调.加粗) 那我们开始,Java中一切都是值 ...
- Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象问题的解决方法
1 Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象 1.1 问题场景 在JavaScript中遍历目录,使用for.. in循环时,无法获取到 ...
- scikit-learn中的Pipeline:构建高效、可维护的机器学习流程
我们使用scikit-learn进行机器学习的模型训练时,用到的数据和算法参数会根据具体的情况相应调整变化, 但是,整个模型训练的流程其实大同小异,一般都是加载数据,数据预处理,特征选择,模型训练等几 ...
- 鸿蒙NEXT开发案例:九宫格随机
[引言] 在鸿蒙NEXT开发中,九宫格抽奖是一个常见且有趣的应用场景.通过九宫格抽奖,用户可以随机获得不同奖品,增加互动性和趣味性.本文将介绍如何使用鸿蒙开发框架实现九宫格抽奖功能,并通过代码解析展示 ...
- 《JavaScript 模式》读书笔记(7)— 设计模式2
这一篇我们主要来学习装饰者模式.策略模式以及外观模式.其中装饰者模式稍微复杂一点,大家认真阅读,要自己动手去实现一下哦. 四.装饰者模式 在装饰者模式中,可以在运行时动态添加附加功能到对象中.当处理静 ...
- mysql基础之增删改查
标签: mysql 增加数据 -- 增加数据 use myblog; insert into users(username, `password`, realname) values('zhangsa ...
- IO介绍-中
系统接口 块设备接口 块设备:数据的存取和传输都是以数据块为单位的设备.典型的块设备是磁盘.该设备的基本特征是传输速率高,另一特征是可寻址,即能指定数据的输入源地址及输出的目标地址,可随机读写.磁盘设 ...
- 拥抱云原生,数据湖加速器 GooseFS 助力 Fluid 数据缓存实现
01 前言 数据湖加速器 GooseFS 是由腾讯云推出的高性能.高可用.弹性的分布式缓存方案.依靠对象存储(Cloud Object Storage,COS)作为数据湖存储底座的成本优势,为数据湖 ...