用 GPU 加速 PQC 方案:Montgomery、SHA3

news2024/11/7 13:39:18

参考文献:

  1. [DK91] Dussé S R, Kaliski B S. A cryptographic library for the Motorola DSP56000[C]//Advances in Cryptology—EUROCRYPT’90: Workshop on the Theory and Application of Cryptographic Techniques Aarhus, Denmark, May 21–24, 1990 Proceedings 9. Springer Berlin Heidelberg, 1991: 230-244.
  2. [KAK96] Koc C K, Acar T, Kaliski B S. Analyzing and comparing Montgomery multiplication algorithms[J]. IEEE micro, 1996, 16(3): 26-33.
  3. [CHS11] P. Cayrel, G. Hoffmann, M. Schneider, GPU Implementation of the Keccak Hash Function Family, The 5th International Conference on Information Security and Assurance, 2011.
  4. [SHA3] Dworkin M J. SHA-3 standard: Permutation-based hash and extendable-output functions[J]. 2015.
  5. [LWGP17] Lee W K, Wong X F, Goi B M, et al. CUDA-SSL: SSL/TLS accelerated by GPU[C]//2017 International Carnahan Conference on Security Technology (ICCST). IEEE, 2017: 1-6.
  6. [OBS21] Ono T, Bian S, Sato T. Automatic parallelism tuning for module learning with errors based post-quantum key exchanges on GPUs[C]//2021 IEEE International Symposium on Circuits and Systems (ISCAS). IEEE, 2021: 1-5.
  7. [SYD+22] Shen S, Yang H, Dai W, et al. High-Throughput GPU Implementation of Dilithium Post-Quantum Digital Signature[J]. arXiv preprint arXiv:2211.12265, 2022.
  8. Secure Hash Algorithm-3 (SHA-3) family_-CSDN博客
  9. CUDA 编程简介(上),CUDA 编程简介(下)
  10. CUDA之Warp Shuffle详解-CSDN博客
  11. 【CUDA 基础】5.6 线程束洗牌指令 - 知乎 (zhihu.com)

文章目录

  • Montgomery
    • SOS
    • CIOS
    • Complexity
  • GPU-SSL
    • SHA3
    • CTR mode
    • Montgomery
  • GPU-PQC
    • Kyber
    • Dilithium

Montgomery

[KAK96] 考虑了不同的 Montgomery 的算法实现,并比较了其中的 5 5 5 种高精度整数的实现效率。

模数 n n n,选取任意的 r r r 使得 g c d ( n , r ) = 1 gcd(n,r)=1 gcd(n,r)=1,那么存在如下的同构:
Z n ≅ { a ˉ : = a ⋅ r ( m o d n ) ∣ a ∈ Z n } \mathbb Z_n \cong \{\bar a:=a \cdot r \pmod{n} \mid a \in \mathbb Z_n\} Zn{aˉ:=ar(modn)aZn}

后者是一个完备剩余系(complete residue system),称为 Montgomery 域

  • 加法: a + b ‾ = a ˉ + b ˉ ≡ ( a + b ) ⋅ r ( m o d n ) \overline{a+b} = \bar a + \bar b \equiv (a+b) \cdot r \pmod{n} a+b=aˉ+bˉ(a+b)r(modn)
  • 乘法: a ⋅ b ‾ = a ˉ ⋅ b ˉ ⋅ r − 1 ≡ ( a ⋅ b ) ⋅ r ( m o d n ) \overline{a \cdot b} = \bar a \cdot \bar b \cdot r^{-1} \equiv (a \cdot b) \cdot r \pmod{n} ab=aˉbˉr1(ab)r(modn)

Montgomery 域上的加法是容易的,它的取模运算可以使用 Barret 算法

对于乘法运算,也存在快速的 Montgomery 算法

  1. 利用扩展欧几里得算法,计算出 r − 1 , n ′ r^{-1},n' r1,n,满足 r ⋅ r − 1 − n ⋅ n ′ = 1 r\cdot r^{-1} - n \cdot n'=1 rr1nn=1
  2. 这里 n ′ = − n − 1 ( m o d r ) n' = - n^{-1} \pmod{r} n=n1(modr),利用预计算的 n ′ n' n

算法基本流程:

在这里插入图片描述

这个算法对于任意的 g c d ( r , n ) gcd(r,n) gcd(r,n) 都工作,但是仅当 r = 2 k r=2^k r=2k 是二的幂次时,其中的 ⋯ ( m o d r ) \cdots\pmod{r} (modr) 以及 ⋯ / r \cdots/r /r 可以快速计算。易知 M o n P r o ( x ˉ , 1 ) = x MonPro(\bar x,1) = x MonPro(xˉ,1)=x 就是逆映射。

计算机的运算单元是 words,假设 W = 2 w W=2^w W=2w,一般设置 w = 32 w=32 w=32(单精度 int,双精度 long)。假设 t , a , b , c ∈ [ 0 , 2 w ) t,a,b,c \in [0,2^w) t,a,b,c[0,2w) 都是单精度整数,那么 ( C , S ) : = t + a b + c (C,S) := t+ab+c (C,S):=t+ab+c 不会发生溢出,可以存储在两个 words 内
( W − 1 ) 2 + 2 ⋅ ( W − 1 ) = W 2 − 1 = 2 2 w − 1 (W-1)^2 + 2 \cdot (W-1) = W^2-1 =2^{2w}-1 (W1)2+2(W1)=W21=22w1

对于多精度整数 a ∈ [ 0 , 2 s w ) a \in [0,2^{sw}) a[0,2sw),将它存储为 s s s 个 words。假定 r = 2 s w r=2^{sw} r=2sw,奇模数 n < r n<r n<r,那么元素 a , b ∈ Z n a,b \in \mathbb Z_n a,bZn 表示为了数组,计算 M o n P r o ( a , b ) MonPro(a,b) MonPro(a,b) 时需要多个循环的相互组合/嵌套。

[KAK96] 考虑了以下因素:

  1. 计算 multiplication 和 reduction 是完全分离的、还是交错的,交错的是外层循环、还是内层循环。
  2. 计算 multiplication 和 reduction 的外层循环,是扫描某个操作数、还是扫描计算结果。

根据上述因素的组合,[KSK96] 讨论了多种实现:

  • Separated Operand Scanning (SOS)
  • Coarsely Integrated Operand Scanning (CIOS)
  • Finely Integrated Operand Scanning (FIOS)
  • Finely Integrated Product Scanning (FIPS)
  • Coarsely Integrated Hybrid Scanning (CIHS)

我们下面仅学习下最基本的 SOS 以及效率最高的 CIOS,读者可以自行阅读其他的实现思路。

SOS

SOS 按顺序,先计算 step 1 的高精度乘法,再计算 step 2 的模约简,最后计算 step 3 的后处理。多精度整数 a a a 的存储格式形如 a [ s − 1 ] ⋯ a [ 1 ] a [ 0 ] a[s-1]\cdots a[1]a[0] a[s1]a[1]a[0],其中 a [ 0 ] a[0] a[0] 是最低位, a [ s − 1 ] a[s-1] a[s1] 是最高位。

首先执行 step 1:乘法结果 t = a b t=ab t=ab 存储在 2 s 2s 2s 个 words 内,

在这里插入图片描述

接着执行 step 2:先计算 m = t ⋅ n ′ m o d    r m=t \cdot n' \mod r m=tnmodr,然后计算 u = t + m ⋅ n u=t+m\cdot n u=t+mn,最后做除法 u / r u/r u/r

在这里插入图片描述

临时变量 t t t 的长度为 2 s + 1 2s+1 2s+1,而 u u u 的长度为 s + 1 s+1 s+1,函数 A D D ( t [ i + s ] , C ) ADD(t[i+s],C) ADD(t[i+s],C) 的功能是:将单精度整数 C C C 加到 t [ 2 s ] ⋯ t [ i + s ] t[2s] \cdots t[i+s] t[2s]t[i+s] 上,期望的连续进位链的长度为 1 1 1(两次单精度加法)。

[DK91] 给出了一个重要的观察:不再整体计算 m = t ⋅ n ′ ( m o d r ) m=t \cdot n' \pmod{r} m=tn(modr) t = t + m n t=t+mn t=t+mn,而是分别计算 m i = t i n ′ ( m o d W ) m_i=t_in' \pmod W mi=tin(modW) 然后再迭代 t = t + m i n W i t=t+m_inW^i t=t+minWi虽然两者的计算结果并不一样(忽略了 t ⋅ n ′ t \cdot n' tn 的进位),但是后者依旧使得最终的 t t t 成为 r r r 的整数倍

  • 此时 n ′ n' n 可以替换为 n 0 ′ = n ′ ( m o d W ) n_0'=n' \pmod W n0=n(modW),所以 m i = t ⋅ n ′ m_i=t \cdot n' mi=tn 的乘法计算更加简单
  • 容易计算 n 0 ′ = − ( n 0 ) − 1 ( m o d W ) n_0' = -(n_0)^{-1} \pmod W n0=(n0)1(modW),不需要预计算大数 n n n 的逆 n − 1 ( m o d r ) n^{-1} \pmod r n1(modr)

最后执行 step 3:利用大数减法来比较 u > n u>n u>n,顺带执行了后处理步骤

在这里插入图片描述

CIOS

CIOS 交错执行 mult 和 reduce:在模约简的第 i i i 轮循环中, m i = t i ⋅ n 0 ′ ( m o d W ) m_i=t_i \cdot n_0' \pmod{W} mi=tin0(modW) 仅仅和 t i t_i ti 有关,并且 t i t_i ti 在乘法的第 i i i 轮循环中就被计算完毕了,因此两者可以放在同一个外部循环内。每轮迭代中,模约简过程使得最低的 word 变成零,于是可以立即右移,可以大幅减少内存开销。

step 1 以及 step 2 的交错执行:

在这里插入图片描述

最后,利用 SOS 的 step 3 的相同算法,做后处理。

Complexity

文中还给出了其他三种 Montgomery 算法,这里我就不再描述了。它们的复杂度分析结果:

在这里插入图片描述

当然,复杂度分析仅仅是一阶近似,忽略了计算机的 register, cache miss 等等细节。实机测试结果:

在这里插入图片描述

最后 [KAK96] 总结:对于通用计算机,五种算法中 CIOS 效率最高的

疑问:C 为何会比 ASM 慢这么多?文中说 C 的 word 是 16 比特的(用两个 16-bits words 模拟一个 32-bits word),而 ASM 的 word 是 32 比特的。现代的计算机应该没这个限制吧?

GPU-SSL

[LWGP17] 提出了 CUDA-SSL,他们在 CUDA 上实现了一些原语,不过没找到他们的实现代码。

SHA3

对于粗粒度的并行,可以让每个 thread 执行单独的 SHA3 任务,各个任务完全独立。但是,GPU 的 core 是很慢的,这么做虽然使得吞吐率很高,但是计算延迟也会非常大。并且,每个 warp 占据的资源是有限的,其中的 32 个线程相互抢占 register, bank 资源。

因为 SHA3 的状态是 { 0 , 1 } 5 × 5 × b \{0,1\}^{5 \times 5 \times b} {0,1}5×5×b 的立方体,并且每轮迭代的置换 θ , ρ , π , χ , ι \theta,\rho,\pi,\chi,\iota θ,ρ,π,χ,ι 都是针对 25 25 25 个 lanes 的,[CHS11] 提出可以使用一个 warp 中的 25 25 25 个线程(空闲 7 7 7 个)细粒度的并行计算。

在这里插入图片描述

但是,由于中间变量 C [ 25 ] , D [ 25 ] C[25],D[25] C[25],D[25] 存储在 shared memory 中,线程访问内存时会发生 bank conflict(原本 warp 中的 32 32 32 个线程可以对 32 32 32 个 bank 并行读写),于是 I/O 延迟巨大。[LWGP17] 将数组 C , D C,D C,D 拆分到 25 25 25 个线程的 register 上,然后使用 warp shuffle 交换数据,避免了 bank conflict 的问题。

在版本 CC3.0 以上的 CUDA 支持了 warp shuffle 指令,允许同一个 warp 内的 thread 直接读其他 thread 的寄存器值,包括:__shfl, __shfl_up, __shfl_down, __shfl_xor

修改后的 GPU-SHA3 算法为:

在这里插入图片描述

CTR mode

对称密码有多种 mode,其中 CBC mode 是串行的,而 CTR mode 适合并行计算。特别地,CTR mode 的明文/密文仅仅参与最后的异或运算,因此明文/密文不需要执行 host memory 和 device memory 之间的内存交换。

在这里插入图片描述

Montgomery

[LWGP17] 使用 Montgomery 实现 RSA 的模幂运算。使用 GPU 实现 CIOS 版本的算法,

在这里插入图片描述

GPU-PQC

Kyber

[OBS21] 给出了 Kyber 的 GPU 实现:GitHub - Automatic Tuning for PQC on CUDA

假设 MLWE 的环是 R q = Z q [ x ] / ( x n + 1 ) R_q=\mathbb Z_q[x]/(x^n+1) Rq=Zq[x]/(xn+1),密文是 ( A , b = A s + e ) ∈ R q k × k × R q k (A,b=As+e) \in R_q^{k \times k} \times R_q^k (A,b=As+e)Rqk×k×Rqk

  1. SHA3 的实现:使用 [LWGP17] 的 warp shuffle 版本,每个 warp 计算一个 SHA3 任务。
  2. Random Matrice 的实现:使用 k × k k \times k k×k 个 warp 分别计算 Shake128 任务。
  3. Noise Sample 的实现:使用 k k k 个 warp 分别计算 Shake256 任务。
  4. NTT/InvNTT 的实现:使用 n / 2 n/2 n/2 个线程,并行计算每层的蝴蝶。
  5. 矩阵运算的实现:使用 O ( k n ) O(kn) O(kn) 个线程。

[OBS21] 综合考虑了延迟 l l l 和吞吐率 c c c,使用比值 l / c l/c l/c 作为性能指标(越小越好)。他们还使用程序遍历参数取值,自动挑选出使得 l / c l/c l/c 最优的 GPU 参数。

不同 GPU 环境下的结果:

在这里插入图片描述

Dilithium

[SYD+22] 给出了 Dilithium 的 GPU 实现。实际上 GPU 更适合要求高吞吐率的服务器环境,不太适合要求低延迟的个人环境。本文分别对两种环境提出了一些优化。

这篇文章对于 SHA3 给出了优化,相较于 CUDA-SSL 的实现,大幅减少了访存需求,效率也更高(但是没找到他们的代码)

在这里插入图片描述

不同 GPU 环境下,与官方 ref/avx2 实现的比较结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tensorboard安装及简单使用

Tensorboard 1. tensorboard 简单介绍2. 安装必备环境3. Tensorboard安装4. 可视化命令 1. tensorboard 简单介绍 TensorBoard是一个可视化的模块&#xff0c;该模块功能强大&#xff0c;可用于深度学习网络模型训练查看模型结构和训练效果&#xff08;预测结果、网络模型结构…

带头的循环双向链表的简单介绍

目录 带头的循环双向链表&#xff1a; 1、带头&#xff1a; 2、循环&#xff1a; 3、双向&#xff1a; 图例&#xff1a; 带头的双向循环链表的创建&#xff1a; 头文件部分&#xff1a; 主函数部分&#xff1a; 最终调试效果&#xff1a; 使用一级指针传参的原因&am…

异常数据检测 | Python奇异谱分析(SSA)数据缺失值插补

文章目录 文章概述模型描述源码分享参考资料文章概述 长时序栅格数据经常会出现一些缺失值,会对后续的分析造成很大的不便。这便需要利用一些插值算法对这些缺失数据进行填补,奇异谱分析(SSA)便是常用的一种插值方法。 模型描述 在时间序列分析中,「奇异谱分析」(「SS…

了解活动聊天机器人如何革新活动行业

在如今快节奏的时代&#xff0c;活动策划和管理对于任何活动的成功变得至关重要。无论是会议、展览会还是企业聚会&#xff0c;组织者都努力为参与者创造难忘的体验&#xff0c;同时确保幕后的顺利执行。然而&#xff0c;由于有许多任务需要处理且资源有限&#xff0c;管理活动…

智慧油气田方案:视频+AI识别,助力油气田生产与管理智能化转型

一、背景与挑战 根据《“十四五”能源领域科技创新规划》指出&#xff0c;要推动核心技术创新突破&#xff0c;推动煤炭、油田、电厂、电网等传统行业与数字化、智能化技术深度融合。我国油田产业已经摆脱了早期粗放式增长的阶段&#xff0c;需要更加精细化、智慧化、科学化的…

59个外贸开发信爆款标题,提高你的邮件打开率

标题是吸引读者打开邮件的第一印象&#xff0c;对于外贸销售人员来说&#xff0c;精心撰写开发信标题至关重要。客户收到的邮件那么多&#xff0c;那么在客户收件箱中的5至20个客户邮件标题中&#xff0c;你必须确保自己的标题能够脱颖而出。 下面的外贸开发信标题示例&#x…

第十四章 Iambda表达式和流处理

第十四章 Iambda表达式和流处理 14.1&#xff1a;Iambda表达式简介 Iambda表达式可以用非常少的代码来实现抽象方法。 Iambda表达式不能独立执行&#xff0c;因此必须是西安函数式接口&#xff0c;并返回一个函数式接口的对象。 Iambda表达式的语法特殊的 语法格式如下 &…

我在明白软件测试这个道理后,涨薪10万

上升期的创业型公司 vs 大厂 如何抉择&#xff1f; 最近总有一些学生特别“凡尔赛”的发几个 offer 问我选择哪个&#xff1f;其中比较典型的一个问题就是&#xff1a; “一个是处于上升期的创业型公司 &#xff0c;一个行业大厂&#xff0c;薪资待遇差不多&#xff0c;到底该…

良心推荐,超好用老师小程序

各位老师&#xff0c;今天咱就来说说一件让你们省心省力的事儿——成绩查询系统。那些年&#xff0c;咱们或许都经历过手动发布成绩的痛苦&#xff0c;但现在&#xff0c;时代变了&#xff01;咱们有了小程序可以使用了&#xff0c;学生们可以自助查询成绩&#xff0c;省去了您…

Springboot+vue的班级综合测评管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的班级综合测评管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的班级综合测评管理系统&#xff0c;采用M&#xff08…

【微信小程序开发】自定义组件以及页面布局设计 )

【微信小程序开发】自定义组件以及页面布局设计 1.创建自定义组件2...在tabs的wxml文件中定制组件模板2.1.js中定义组件的属性2.2.定义组件的相关事件2.3在其他页面引用组件2.4在使用组件的wxml页面中使用组件2.5定义属性值 三。个人中心的实现 ) 1.创建自定义组件 要新建comp…

加密货币恐怖融资惊动国会!而链上分析公司看不下去了,紧急辟谣?

巴以冲突发生后&#xff0c;关于以加密货币资助恐怖分子的争论不断。全球最大的交易所币安和稳定币发行商Tether都表示己配合冻结多个账户和地址&#xff0c;以切断哈玛斯加密金援。美国合规交易所Coinbase也在近日发表了防止加密货币非法活动的宣言&#xff0c;反加密出名的参…

Mysql第二篇---InnoDB数据存储结构

Mysql第二篇—InnoDB数据存储结构 数据库的存储结构: 页 索引结构给我们提供了高效的索引方式, 不过索引信息以及数据记录都是保存在文件上的(innodb的ibd文件, MyISAM的MyI和MyD文件), 确切的说是存储在页结构中. 另一方面, 索引是在存储引擎中实现的, MySQL服务器上的存储引…

M-BUS和modbus的区别是什么?

M-BUS与Modbus是两种在工业自动化和楼宇自动化领域广泛应用的通信协议。那么&#xff0c;这两种通信协议有哪些区别呢?下面&#xff0c;就由小编带大家一起来了解下吧! 一、简介 M-BUS(Multi-dropBus&#xff0c;多点通信总线)和Modbus(莫迪波特率)都是用于设备和系统之间通信…

Python清理数据的常用方法总结

目录 1、数据预览 2、缺失值处理 3、异常值处理 4、数据类型转换 5、重复值处理 6、数据标准化 7、特征选择 8、处理类别数据 总结 在数据科学和机器学习领域&#xff0c;数据清理是一个非常重要的步骤。未经清理的数据可能会包含许多问题&#xff0c;例如缺失值、异常…

C++中多态的使用和建立条件

一、多态引入 多态按字面的意思就是多种形态。当类之间存在层次结构&#xff0c;并且类之间是通过继承关联时&#xff0c;就会用到多态。 C 多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的函数。 根据代码&#xff0c;引入多态的概念&#xff1…

智能台灯语音控制丨解放双手

台灯是日常生活中一种常见的照明产品。以往的台灯大多都是采取手动控制&#xff0c;通过按键去对台灯的亮度进行调整。随着科技的发展&#xff0c;台灯也开始走向了智能化。人们已经能够对智能台灯进行语音控制&#xff0c;通过调节灯光开关、色温、灯光亮度等操作&#xff0c;…

代码随想录Day24 LeetCode T491 递增子序列 LeetCode T46 全排列 LrrtCode T47 全排列II

LeetCode T491 递增子序列 题目链接:491. 递增子序列 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 首先这里的测试用例很容易误导我们,这道题不能使用上次子集的思路对数组先排序,使用一个used数组来解决问题. 我们用[4,7,6,7]举例这道题的递增序列不存在[4,6,7,7]这个…

“In Global,For China”,许战海咨询LOGO全面焕新

许战海咨询LOGO全面焕新&#xff0c;正式开启全球化战略! 作为一家起源于中国的全球性战略咨询公司&#xff0c;全新LOGO展现许战海咨询国际化企业形象&#xff0c;诠释出许战海咨询最新、最前沿的战略咨询理念“In Global&#xff0c;For China”(在全球&#xff0c;为中国)。…

CCF CSP认证 历年题目自练Day36

题目一 试题编号&#xff1a; 202309-1 试题名称&#xff1a; 坐标变换&#xff08;其一&#xff09; 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 问题描述 对于平面直角坐标系上的坐标 (x,y)&#xff0c;小 P 定义了一个包含 n 个操作的…