ZKP Algorithms for Efficient Cryptographic Operations 1 (MSM Pippenger)

MIT IAP 2023 Modern Zero Knowledge Cryptography课程笔记

Lecture 6: Algorithms for Efficient Cryptographic Operations (Jason Morton)

  • Multi-scalar Multiplication(MSM)

    • Naive: nP = (((P + P) + P) + P)… = (2(2P))…
    • Binary expand
      • $n = e_0+e_1\alpha+e_2\alpha2+\dots+\e_{\lambda-1}{\lambda-1}
      • Accumulator
        • Q = P;
        • R = 0 if e_0 = 0
        • R = P if e_0 = 1
        • For i = 1 to t
          • Q = 2Q
          • If e_i = 1
            • R = R+Q
        • Return R
      • Overhead: \log_2 n doubling + \log_2 n add
  • Pippenger [Reference:drouyang.eth, https://hackmd.io/@drouyang/SyYwhWIso]
    在这里插入图片描述

    • P = ∑ i = 0 n k i P i P=\sum_{i=0}^n k_i P_i P=i=0nkiPi
    • Step 1: partition scalars into windows
      • Let’s first partition each scalar into m m m windows each has w w w bits, then
        • k i = k i , 0 + k i , 1 2 w + . . . + k i , ( m − 1 ) 2 ( m − 1 ) w k_i = k_{i,0} + k_{i,1} 2^{w} + ... + k_{i,(m-1)} 2^{(m-1)w} ki=ki,0+ki,12w+...+ki,(m1)2(m1)w
      • You can think of each scalar k i k_i ki as a bignum and representing it as a multi-precision integer with limb size w w w. Then we have,
        • ∑ i k i P i = ∑ i ∑ j = 0 m − 1 k i , j 2 j w P i \sum_i k_i P_i = \sum_i \sum_{j=0}^{m-1} k_{i,j} 2^{jw} P_i ikiPi=ij=0m1ki,j2jwPi
      • By reordering the sums, we get
        • ∑ i k i P i = ∑ j 2 j w ( ∑ i k i , j P i ) = ∑ j 2 j w W j \sum_i k_i P_i= \sum_j 2^{jw} \left( \sum_i k_{i,j} P_i \right) = \sum_j 2^{jw} W_j ikiPi=j2jw(iki,jPi)=j2jwWj
        • It means we can calculte the MSM for each window W j W_j Wj first, then aggregate the results
      • Then, let’s examine W j = ∑ i = 0 n k i , j P i W_j = \sum_{i=0}^n k_{i,j} P_i Wj=i=0nki,jPi
    • Step 2: for each window, add points by bucket
      • Because each window has w w w bits, k i , j k_{i,j} ki,j has a value range of [ 0 , 2 w − 1 ] [0, 2^w-1] [0,2w1].Therefore, we can put n n n points into 2 w 2^w 2w buckets according to the value of k i , j k_{i,j} ki,j. We can first calculate W j W_j Wj by,
        • for bucket t t t, t ∈ { 0 , 2 w − 1 } t \in \{0, 2^w-1\} t{0,2w1}, calculate the sum of points in this bucket and get B t B_t Bt.
        • W j = ∑ t = 0 2 w − 1 t B t W_j = \sum_{t=0}^{2^w-1} t B_t Wj=t=02w1tBt
    • Step 3: reduce window results
      • P = ∑ i = 0 n k i P i = ∑ j 2 j w W j P=\sum_{i=0}^n k_i P_i = \sum_j 2^{jw} W_j P=i=0nkiPi=j2jwWj

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费PHP完美运营的最新短视频打赏系统学习版

免费PHP完美运营的最新短视频打赏系统学习版 一、介绍 免费PHP完美运营的最新短视频打赏系统学习版,是一款基于PHP开发的打赏系统,具有强大的功能和稳定的性能。相比于市面上的其他打赏系统,它更加完善,几乎无bug,能…

【BBuf的CUDA笔记】十,Linear Attention的cuda kernel实现解析

欢迎来 https://github.com/BBuf/how-to-optim-algorithm-in-cuda 踩一踩。 0x0. 问题引入 Linear Attention的论文如下: Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention:https://arxiv.org/pdf/2006.16236.pdf 。官方…

react中使用redux最简单最方便的方式,配合rematch简化操作,5分钟学会

react中使用状态管理的方式也很多,比如redux和mobx等,今天这一片就讲一下redux的入门到熟练使用,主要是要理解它redux的组成有哪些,到怎么创建,和组建中怎么使用三个问题。这里先放上官网文档,不理解的地方…

VSCode SSH 连接提示: spawn UNKNOWN

随笔记录 目录 1. 背景介绍 2. 确认问题 : ssh -V 3. 解决问题 3.1 确认本地 ssh.exe 路径 3.2 修改vscode Remote.ssh:Path 3.2.1 设置 Reomte.ssh:Path - 方法一 3.2.2 设置 Reomte.ssh:Path - 方法二 1. 背景介绍 windows 系统vscode ssh remote CentOS7&#xff…

室内设计品牌网站搭建的作用是什么

随着人们生活质量日益提升,对其自身的居住环境也有了较高要求,每个人审美不一样,无论自己居住的房屋还是公司办公/商场等场景都需要设计不同的内容,还有各种设施的摆放及类别等都有讲究,尤其对公司及商场等环境&#x…

JavaOOP篇----第十五篇

系列文章目录 文章目录 系列文章目录前言一、有没有可能两个不相等的对象有相同的hashcode二、拷贝和浅拷贝的区别是什么?三、static都有哪些用法?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通…

关于Nacos各日志以及解决Nacos中疯狂输出日志的问题

目录 前言1. 各日志内容2. 日志解析2.1 服务端日志2.2 客户端日志 前言 越来越发觉硬盘不够用,发现是运行了2年的Nacos中存了很多log日志,具体如下: 于是得了解下各个日志中的作用,防止不必要的输出占用硬盘空间! …

STM32位带

GPIO_SetBits(GPIOF,GPIO_Pin_9);修改为PFout(9)1; GPIO_ResetBits(GPIOF,GPIO_Pin_9);修改为PFout(9)0; 位带的定义: 支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在CM3 中,有两个区中实现了位带。其中一个是S…

05_符号表

05_符号表 一、符号表符号表API设计符号表实现有序符号表 一、符号表 符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。符号表中,键具有唯…

学习stm32 模电数电需要学哪些?

学习stm32 模电数电需要学哪些? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「 stm32的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家!&…

Spark Shell的简单使用

简介 Spark shell是一个特别适合快速开发Spark原型程序的工具,可以帮助我们熟悉Scala语言。即使你对Scala不熟悉,仍然可以使用这个工具。Spark shell使得用户可以和Spark集群交互,提交查询,这便于调试,也便于初学者使用…

Kafka集群架构服务端核心概念

目录 Kafka集群选举 controller选举机制 Leader partition选举 leader partition自平衡 partition故障恢复机制 follower故障 leader故障 HW一致性保障 HW同步过程 Epoch Kafka集群选举 1. 在多个broker中, 需要选举出一个broker, 担任controller. 由controller来管理…