本节对该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\),我们得到

\[3^{5555}(mod10)=(3^{(4*1388)} * 3^3)(mod10)=((3^{(4*1388)}(mod10)* 3^3(mod10))(mod10)=(1 * 7)(mod10)= 7
\]

计算完毕。

  利用这些规则我们可以有效地计算\(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方法计算:

\[x=a^{(p-2^e-1)/2^{e+1}}mod p
\]

其中\(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解读的更多相关文章

  1. MySQL 8.0.2: Introducing Window Functions

    July 18, 2017MySQL, SQLDag Wanvik MySQL 8.0.2 introduces SQL window functions, or analytic functions ...

  2. SAP NOTE 1999997 - FAQ: SAP HANA Memory

    Symptom You have questions related to the SAP HANA memory. You experience a high memory utilization ...

  3. IAR EWARM Checksum Technical Note

    IELFTOOL Checksum - Basic actions EW targets: ARM, RH850, RX, SH, STM8 EW component: General issues ...

  4. HANA SQLScript

    数据类型 日期时间类型 DATE(日期) DATE 数据类型由年.月.日信息组成,表示一个日期值. DATA 类型的默认格式为‘YYYY-MM-DD’. YYYY 表示年, MM 表示月而 DD 表示 ...

  5. [转]The NTLM Authentication Protocol and Security Support Provider

    本文转自:http://davenport.sourceforge.net/ntlm.html#ntlmHttpAuthentication The NTLM Authentication Proto ...

  6. data cleaning

    Cleaning data in Python   Table of Contents Set up environments Data analysis packages in Python Cle ...

  7. libuv(不断更新)

    /* * Initialize the uv_async_t handle. A NULL callback is allowed. * * Note that uv_async_init(), un ...

  8. 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 ...

  9. 提高神经网络的学习方式Improving the way neural networks learn

    When a golf player is first learning to play golf, they usually spend most of their time developing ...

  10. FDR

    声明: 网上摘抄 False discovery rate (FDR) control is a statistical method used in multiple hypothesis test ...

随机推荐

  1. Codeforces 1969 A-F

    题面 A B C D E F 难度:红 橙 绿 绿 蓝 紫

  2. 使用 C# 入门深度学习:线性代数

    教程名称:使用 C# 入门深度学习 作者:痴者工良 地址: https://torch.whuanle.cn 线性代数 目录 线性代数 推荐书籍 基础知识 标量.向量.矩阵 Pytorch 的一些数学 ...

  3. The 2024 ICPC Asia East Continent Online Contest (II) K.Match

    题面 K.Match 给定长度为 \(n\) 的两个序列 \(a\) 和 \(b\),当且仅当 \(a_i ⊕ b_j ≥ k\) 时,\(a_i\) 与 \(b_j\) 连一条双向边,其中 \(⊕\ ...

  4. pycharm里的jinja2注释问题

    pycharm里html注释是{# #}而不是<!-- -->?   修改方式:如图修改成值None以后,command+/快捷键,html注释的符号就是<!-- 注释内容 --&g ...

  5. 基于golang的swagger

    Swagger 相关的工具集会根据 OpenAPI 规范去生成各式各类的与接口相关联的内容,常见的流程是编写注解 =>调用生成库->生成标准描述文件 =>生成/导入到对应的 Swag ...

  6. 运维工具之Netdata

    [导语]:Netdata 是一个开源.免费.预配置.高灵敏度的分布式实时监控系统. 简介 Netdata的分布式实时监视代理以零配置的方式,从系统.硬件.容器和应用程序收集数千个指标,它可以运行在所有 ...

  7. 鸿蒙NEXT元服务:论如何免费快速上架作品

    [引言]天下武功,唯快不破. 本文讨论如何免费且以最快速度上架自己的作品. 作者以自己从零开始到提交发布审核一共俩小时的操作流程分享给大家作参考. [1]立项选择 结论:元服务,单机,工具类(非游戏) ...

  8. Ubuntu实现SSH外网连接内网(反向隧道)

    应用场景: 如果你有Linux云主机(腾讯.华为等),且公司有一台只有内网IP (或动态IP) 的Linux工作机:你计划在家里工作时,通过家里的电脑连接公司的工作机 (且不想使用类似Teamview ...

  9. 【C++】static 知识整理 【静态与局部静态】

    目录 类外 类内 局部静态 local static 类外 类内 类外 C++的静态可以分为两种情况来讨论:在类外和在类内. 对于静态变量/函数,链接将只在内部 (如果不用static,那么在不同文件 ...

  10. \r,\n,\r\n的前世今生

    前情 最近在逛论坛的时候遇到有人在提问题,为什么\n在苹果手机上不换行,我以前有网上看到过文章,是因为各系统的解析不同,需要使用\r\n来做兼容,自己虽然知道怎么解决,但是不知具体原因,今特来详细了解 ...