有限域的Fast Multiplication和Modular Reduction算法实现

2023-11-09 02:01

本文主要是介绍有限域的Fast Multiplication和Modular Reduction算法实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 引言

关于有限域的基础知识,可参考:

  • RISC Zero团队2022年11月视频 Intro to Finite Fields: RISC Zero Study Club
    在这里插入图片描述

有限域几乎是密码学中所有数学的基础。
ZKP证明系统中的所有运算都是基于有限域的:

  • 使用布尔运算的数字电路:如AND、OR、NOT。
  • 使用有限域运算的算术电路:如addition、multiplication、negation。

但是,真实的计算机没有有限域电路装置,只有:

  • ADD rax, rbx
  • MUL rax
  • SHR rax, CL
  • 等等

因此,需基于以上运算来构建有限域运算。
有限域运算的速度很关键,原因在于:

  • 影响ZKP可用性的最大障碍在于证明开销。
  • 几乎所有的证明时间都用于有限域运算了。为提升ZKP证明速度:
    • 减少有限域运算次数(如,更高效的NTT或MSM算法)
    • 让有限域运算更高效(如,使用优化的有限域表示)

本文主要关注内容有:

  • BigInts
  • BigInts经典加法运算
  • BigInts经典乘法运算
  • Modular reduction(Barrett算法):当无法更改数字表示时,最有用。
  • Montgomery form
  • Multiplication and reduction(Montgomery算法):最常用算法。
  • 其它multiplication算法

并对大整数乘法运算的经典算法、Barrett算法、Montgomery算法进行了对比:
在这里插入图片描述

2. 大整数及其加法和乘法运算

大整数,又名BigInt或Multiprecision Integers。
真实计算机的运算符是基于word的:

  • 几乎所有的现代计算机都使用64-bit words
  • 但32-bit words并未完全过时。比如在IoT世界。

对于更大(如256位)的域,会将其切分为words来表示:

  • 如,通常以4个64-bit word来表示256-bit数字。
  • 如十进制的8位数字,可 以4个2-digit word来表示。

如以100进制的digit来表示大整数27311837,对应为:
( 27 31 18 37 ) 100 (27\ 31\ 18\ 37)_{100} (27 31 18 37)100

2.1 大整数经典加法运算

对应的大整数加法运算,如 ( 27 31 18 37 ) 100 + ( 88 68 97 89 ) 100 (27\ 31\ 18\ 37)_{100} + (88\ 68\ 97\ 89)_{100} (27 31 18 37)100+(88 68 97 89)100,计算规则为:
在这里插入图片描述
具体见Handbook of Elliptic and Hyperelliptic Curve Cryptography书本中的Algorithm 10.3算法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 大整数经典乘法运算

( 54 12 ) 100 ∗ ( 36 29 ) 100 (54\ 12)_{100}*(36\ 29)_{100} (54 12)100(36 29)100大整数乘法运算为例,具体见Handbook of Elliptic and Hyperelliptic Curve Cryptography书本中的Algorithm 10.8算法:
在这里插入图片描述
对应各个step的计算数据为:
在这里插入图片描述

3. Modular Reduction

需注意,以上加法和乘法运算结果均为更大的值,需将这些大的结果值reduce为相应的canonical表示,如:
在这里插入图片描述
常见的Modular Reduction算法有:

  • 1)Barret reduction算法:当无法更改数字表示时,最有用。
  • 2)Montgomery multiplication and reduction算法:最常用算法。

相关博客有:

  • 基础算法优化——Fast Modular Multiplication
  • GPU/CPU友好的模乘算法:Multi-Precision Fast Modular Multiplication
  • Montgomery reduction——多精度模乘法运算算法

3.1 Barret reduction算法

做reduction最明显的方式是做除法,但除法运算昂贵,且可能不是constant time的。以single-word除法运算 b = 1 , R = 2 k b=1,R=2^k b=1R=2k 为例:

func reduce(a uint) uint {q:= a / n  // Division implicitly returns the floor of the result.return a - q * n
}

非constant time会存在timing attack攻击问题。
Barrett reduction为将 1 / n 1/n 1/n近似为 m / 2 k m/2^k m/2k,因为 m / 2 k m/2^k m/2k中的除法实际是右移运算,要便宜得多。【可近似计算 m m m值为 m = ⌊ 2 k / n ⌋ m=\left \lfloor 2^k/n\right \rfloor m=2k/n

func reduce(a uint) uint {q := (a * m) >> k // ">> k" denotes bitshift by k.return a - q * n
}

不过这样reduce之后的结果在 [ 0 , 2 n ) [0,2n) [0,2n),而不是 [ 0 , n ) [0,n) [0,n),因此需进一步reduce:

func reduce(a uint) uint {q := (a * m) >> ka -= q * nif a >= n {a -= n}return a
}

Handbook of Elliptic and Hyperelliptic Curve Cryptography书本中的Algorithm 10.17算法,将其扩展为了multi-word Barrett Reduction算法,且在以上最后一步reduce之前的结果不再是 [ 0 , 2 n ) [0,2n) [0,2n)而是可能更大的范围值,因此在Algorithm 10.17算法中第4步采用的是while
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 Montgomery multiplication and reduction算法

Montgomery Form为另一种有限域表示,其支持快速combined multiplication and reduction算法。

之前将有限域元素表示为:
x ∈ [ 0 , N − 1 ] x\in [0,N-1] x[0,N1]

而Montgomery Form表示定义为:
[ x ] = ( x R ) m o d N [x]=(xR)\mod N [x]=(xR)modN

Montgomery Reduction算法计算的是:
R E D C ( u ) = ( u R − 1 ) m o d N REDC(u)=(uR^{-1})\mod N REDC(u)=(uR1)modN
而不是之前Barrett Reduction计算的 u m o d N u\mod N umodN

R E D C REDC REDC是一个非常多功能的公式:

  • 1)将经典转换为Montgomery: [ x ] = R E D C ( ( x R 2 ) m o d N ) [x]=REDC((xR^2)\mod N) [x]=REDC((xR2)modN)
  • 2)将Montgomery转换为经典: R E D C ( [ x ] ) = x REDC([x])=x REDC([x])=x
  • 3)对Montgomery Form表示的乘法运算: ( ( x R m o d p ) ∗ ( y R m o d p ) ∗ R − 1 m o d p ) = ( x y R ) m o d p ((xR\mod p)*(yR\mod p)*R^{-1}\mod p)=(xyR)\mod p ((xRmodp)(yRmodp)R1modp)=(xyR)modp,对应在Handbook of Elliptic and Hyperelliptic Curve Cryptography书本中的Algorithm 11.3算法中做了相应实现:
    在这里插入图片描述

其中 Handbook of Elliptic and Hyperelliptic Curve Cryptography书本中的Algorithm 10.22算法中所实现的Montgomery reduction算法为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 其它multiplication算法

Multiplication算法的演变过程为:

  • multiplication算法曾被认为其runtime约为 O ( n 2 ) O(n^2) O(n2)
  • Karatsuba发明了一种divide-and-conquer算法,其runtime为 O ( n 1.58 ) O(n^{1.58}) O(n1.58)
  • Toom-Cook乘法算法与Karatsuba算法类似,性能略好一点。
  • Schönhage–Strassen 发明了一种NTT算法,其runtime为 O ( n ⋅ log ⁡ n ⋅ log ⁡ log ⁡ n ) O(n\cdot \log n\cdot \log\log n) O(nlognloglogn)
  • 当对大整数做乘法运算时,其速度要更慢,如4096位RSA密钥。

参考资料

[1] RISC Zero团队2023年2月视频 Finite Field Implementations: Barrett & Montgomery【slide见Finite Field Implementations】
[2] 维基百科Barrett reduction

RISC Zero系列博客

  • RISC0:Towards a Unified Compilation Framework for Zero Knowledge
  • Risc Zero ZKVM:zk-STARKs + RISC-V
  • 2023年 ZK Hack以及ZK Summit 亮点记
  • RISC Zero zkVM 白皮书
  • Risc0:使用Continunations来证明任意EVM交易
  • Zeth:首个Type 0 zkEVM
  • RISC Zero项目简介
  • RISC Zero zkVM性能指标
  • Continuations:扩展RISC Zero zkVM支持(无限)大计算
  • A summary on the FRI low degree test前2页导读
  • Reed-Solomon Codes及其与RISC Zero zkVM的关系
  • RISC Zero zkVM架构
  • RISC-V与RISC Zero zkVM的关系

这篇关于有限域的Fast Multiplication和Modular Reduction算法实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/373550

相关文章

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获