当前位置: 首页 > news >正文

密码学系列 - 零知识证明(ZKP) - NTT运算

NTT(Number Theoretic Transform,数论变换)是一种与快速傅里叶变换(FFT)类似的技术,主要用于多项式的快速乘法计算,是实现同态加密、零知识证明等密码学应用的基础工具之一。

https://medium.com/@zkrush/a-behind-the-scenes-look-at-posw-on-aleo-6d7c2a939a3b

理解FFT的蝶形运算

数论变换(Number Theoretic Transform,NTT)通常用于加速多项式乘法, 但不包含椭圆曲线标量乘法运算。多项式乘法的卷积运算在时域中计算较慢,而通过 NTT,可以将多项式从时域转换到频域,在频域中可以简单地逐系数相乘来完成卷积操作,然后再通过逆 NTT 转回时域。这样可以显著提升多项式乘法的效率,从 O(n2)O(n^2)O(n2) 降到 O(nlog⁡n)O(n \log n)O(nlogn)

  • 零知识证明Groth16的计算中为了计算H,采用了FFT计算。FFT的蝶形运算是理解FFT计算的基础。二分情况下的计算,相对清晰,算法导论给出了详细的推导过程。

  • 对于熟悉主流零知识证明协议的人来说,你会知道两种类型的计算——NTT 和 MSM,是这些协议的核心。几乎所有主流的零知识证明协议都大量使用这两种计算(Marlin 使用 30+ 轮)。

  • Aleo 将 PoSW 设计为 NTT + MSM 计算。这实际上是从 Marlin 中提取了一些核心计算,与完整的 Marlin 证明相比,这是一个较小的单位。

Butterfly

Butterfly 算法通过分治、指数因子重用和位反转排列等方法,极大地减少了冗余运算,使 FFT 和 NTT 等大规模计算能够在==O(nlog⁡n)O(n \log n)O(nlogn)的复杂度==下完成。

假设要进行的是一个 n 点的 FFT 计算,Butterfly 算法的计算步骤如下:

  1. 输入排列(Bit-Reversal Permutation)

    • 对输入数据进行重新排列,使其符合分治算法的顺序。通常采用位反转(Bit-Reversal)方式排列,使数据的下标顺序与二进制位的反向排列对应。这一步是为了简化后续的分层计算过程。
  2. 分层计算

    • 将计算过程分成若干层,每一层都可以看作是一组小规模的 DFT(离散傅里叶变换)/IDFT 操作。在每一层中,子问题的规模逐渐增大,直到最后一层完成所有计算。
    • 每一层的计算由多个“蝴蝶形”运算组成,每个蝴蝶运算只涉及两个数据点的计算。
  3. 蝴蝶形运算(Butterfly Computation)

    • 在每层中,将成对的数据点进行计算,每对点的运算过程如下:

      • 假设两个输入数据点为 x 和 y,则输出点为:

        x′=x+y⋅ωx' = x + y \cdot \omegax=x+yω

        y′=x−y⋅ωy' = x - y \cdot \omegay=xyω

        其中,ω 是一个旋转因子,在 FFT 中是复数指数项,在 NTT 中是有限域上的根

    • 每一层的运算使用不同的旋转因子 ω\omegaω,从而逐步得到不同频率分量的结果。

      img

  4. 重复和合并

    • 通过重复上述分层和蝴蝶形运算,最终得到完整的频域表示。

NTT size

一套指令集 需要 ntt size是 2162^{16}216 ~ 2192^{19}219

/// Construct a domain that is large enough for evaluations of a polynomial
/// having `num_coeffs` coefficients.
pub fn new(num_coeffs: usize) -> Option<Self> {println!("test fft size: {}", size);

Butterfly 算法通过分治、指数因子重用和位反转排列等方法,极大地减少了冗余运算,使 FFT 和 NTT 等大规模计算能够在 O(nlog⁡n)O(n \log n)O(nlogn) 的复杂度下完成。


往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列
http://www.dtcms.com/a/446403.html

相关文章:

  • 商城网站建设明细自己弄个网站怎么赚钱
  • Android 系统下 getevent 工具
  • 学院网站建设方案软件开发自学入门教程
  • Deflate在线解压工具(支持无zlib头)
  • win7下winlogon.exe调试记录
  • 网站 做 app开发wordpress插件开发
  • 昆明做网站哪家便宜怎么让付费网站免费
  • 《C++进阶之C++11》【智能指针】(下)
  • 桐城网站定制软件开发的学校有哪些
  • 海南省工程建设定额网站简单网站首页
  • K230基础-特征检测
  • 宁波网站建设内容深圳网站开发建设服务公司
  • CTFHub 信息泄露通关笔记11:HG泄露(4种方法)
  • 网站采用什么方法建设wordpress获取文章信息
  • 上海网站建设公司招聘wordpress用手机写博客
  • 网站为什么要更新wordpress保护插件
  • Maixcam学习笔记-寻址色块和直线
  • 您正在 GUI 下运行 Fcitx,但是 fcitx-config-qt 未被找到。该软件包名称通常为 fcitx5-configtool。现在将打开配置目录
  • 速通web全栈开发
  • 网站建设虚拟服务器赣州新闻最新消息
  • 33.搜索旋转排序数组;153.寻找旋转排序数组中的最小值 4. 寻找两个正序数组的中位数
  • 4准则下,2可加模糊测度满足单调性和有界性约束。假设没有任何其他先验信息,基于Marichal熵最大的目标,求解莫比乌斯参数。
  • 果洛州wap网站建设公司wordpress用哪个国外空间
  • 【IMX6ULL驱动学习】INPUT子系统
  • 上海做网站建设公司代理注册公司流程和费用
  • spring6学习笔记
  • 资料代做网站网站建设维护合同
  • 【Linux】 开启关闭MediaMTX服务
  • 网站qq启动链接怎么做宁波seo网络推广定制多少钱
  • 下载站用什么cms公众号微网站建设