news 2026/4/23 13:38:49

后量子密码库:Go语言中规避侧信道攻击的技术实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
后量子密码库:Go语言中规避侧信道攻击的技术实践

我们如何在新的后量子Go密码学库中避免侧信道攻击

Trail of Bits密码学团队发布了我们对ML-DSA和SLH-DSA的开源纯Go实现,这是两种NIST标准化的后量子签名算法。这些实现已由我们的多位密码学家进行工程设计和审查,因此,如果您或您的组织希望将数字签名过渡到后量子支持,请尝试它们!

这篇文章将详细介绍我们为确保实现是常数时间所做的一些工作。这些技巧特别适用于ML-DSA算法,以防止像KyberSlash这样的攻击,但它们也适用于任何需要分支或除法的密码算法。

通往常数时间FIPS-204之路

SLH-DSA相对容易实现而不引入侧信道,因为它基于从哈希函数构建的伪随机函数。但ML-DSA规范包含多个整数除法,需要更仔细的考虑。

除法是名为KyberSlash的时序攻击的根本原因,该攻击影响了Kyber(后来成为FIPS-203)的早期实现。我们希望在我们的实现中完全避免这种风险。

每个ML-DSA参数集都包含几个影响算法行为的参数。其中之一称为𝛾2,即低阶舍入范围。

𝛾2始终是整数,但其值取决于参数集。对于ML-DSA-44,𝛾2等于95232。对于ML-DSA-65和ML-DSA-87,𝛾2等于261888。

ML-DSA指定了一种称为“分解”的算法,它将一个域元素转换为两个分量,使得这两个分量的组合等于原始域元素。这需要在一个步骤中除以2𝛾2,并在另一个步骤中计算对2𝛾2的余数。

无分支密码学之道

在任何密码算法中防止分支的直截了当的方法是始终执行条件的双方(真和假),然后基于条件使用常数时间的条件交换来获得正确结果。这涉及位掩码、二进制补码和异或操作。

从该函数中移除分支看起来像这样:

// 这是另一个AI生成的代码示例。// 不安全 —— 请勿使用。funcDecomposeUnsafeBranchless(r,alphaint32)(r1,r0int32){// 确保r在范围[0, q-1]内r=r%q r+=q&(r>>31)// 如果r < 0则加q(使用算术右移)// 将r围绕0居中(映射到范围[-(q-1)/2, (q-1)/2])mask:=-((r-(q-1)/2-1)>>31)// 如果r > (q-1)/2,mask = -1,否则为0r-=q&mask// 计算r1 = round(r/alpha),平局时向零舍入signMask:=r>>31// 如果r < 0,signMask = -1,否则为0offset:=(alpha/2)+(signMask&(-alpha/2+1))// 如果r >= 0则为alpha/2,否则为-alpha/2 + 1r1=(r+offset)/alpha// 计算r0 = r - r1*alphar0=r-r1*alpha// 如果r0太大,调整r1(无分支)adjustUp:=-((r0-alpha/2-1)>>31)// 如果r0 > alpha/2则为-1,否则为0r1+=adjustUp&1r0-=adjustUp&alpha adjustDown:=-((-r0-alpha/2-1)>>31)// 如果r0 < -alpha/2则为-1,否则为0r1-=adjustDown&1r0+=adjustDown&alphareturnr1,r0}

这解决了我们的条件分支问题;然而,我们还没有完成。仍然存在麻烦的除法运算符。

不分时间:无除法算法

常数时间条件交换的技巧也可以用来以常数时间实现整数除法。

funcDivConstTime32(nuint32,duint32)(uint32,uint32){quotient:=uint32(0)R:=uint32(0)b:=uint32(32)i:=bforrangeb{i--R<<=1R|=((n>>i)&1)Rprime,swap:=bits.Sub32(R,d,0)swap^=1Qprime:=quotient Qprime|=(1<<i)mask:=uint32(-swap)R^=((Rprime^R)&mask)quotient^=((Qprime^quotient)&mask)}returnquotient,R}

这按预期工作,但速度很慢,因为它需要完整的循环迭代来计算商和余数的每一位。我们可以做得更好。

一个巧妙的优化技巧:Barrett约减

由于对于给定的参数集,值𝛾2是固定的,并且除法和取模运算是针对2𝛾2执行的,我们可以使用Barrett约减和预计算值来代替除法。

Barrett约减涉及乘以一个倒数,然后执行最多两次校正减法以获得余数。商是这个计算的副产品。

// 给定(n, d)计算(n/d, n%d)funcDivBarrett(numerator,denominatoruint32)(uint32,uint32){varreciprocaluint64switchdenominator{case190464:// 2 * 95232reciprocal=96851604889688case523776:// 2 * 261888reciprocal=35184372088832default:returnDivConstTime32(numerator,denominator)}hi,_:=bits.Mul64(uint64(numerator),reciprocal)quo:=uint32(hi)r:=numerator-quo*denominatorfori:=0;i<2;i++{newR,borrow:=bits.Sub32(r,denominator,0)correction:=borrow^1// 如果r >= d则为1,如果r < d则为0mask:=uint32(-correction)quo+=mask&1r^=mask&(newR^r)}returnquo,r}

有了这个有用的函数,我们现在可以在没有分支或除法的情况下实现Decompose。

迈向后量子安全的未来

Go语言中后量子签名算法的可用性,是朝着即使未来开发出与密码学相关的量子计算机,互联网通信也能保持安全的未来迈出的一步。
B66Q6Ou1tAlwnlpPPdAu77+nNUwoBs1zkLmuVVwDZNmtEHD7CcWCLNSFI1wkVFRejhRsmVmhCO2uCc++7o/0FRpkMJmW41wZ/JUCPNCf4DRB3K9QUwyxWXbeH74lT0B9IPoMv/9n2cTW0wGrEb4yKGmy2mGFX4/8QYyO6dU8rVA=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:29:03

Vue.js实现lora-scripts训练进度实时更新的看板系统

Vue.js实现LoRa-scripts训练进度实时更新的看板系统 在AI模型微调日益普及的今天&#xff0c;越来越多开发者借助LoRA&#xff08;Low-Rank Adaptation&#xff09;技术&#xff0c;在消费级显卡上完成个性化模型定制。然而&#xff0c;尽管训练脚本已经高度自动化&#xff0c;…

作者头像 李华
网站建设 2026/4/18 13:13:11

wps云文档共享lora-scripts培训材料给合作伙伴

LoRA微调实战&#xff1a;如何通过WPS云文档高效赋能合作伙伴 在生成式AI迅速渗透各行各业的今天&#xff0c;越来越多企业希望将大模型能力“私有化”——不是简单调用API&#xff0c;而是基于自身数据训练出具备独特风格或行业语义的定制模型。然而&#xff0c;现实往往骨感&…

作者头像 李华
网站建设 2026/4/22 13:15:22

Kubernetes集群中调度lora-scripts训练任务的实践探索

Kubernetes集群中调度lora-scripts训练任务的实践探索 在AI生成内容&#xff08;AIGC&#xff09;快速落地的今天&#xff0c;越来越多团队开始尝试用LoRA技术微调自己的风格模型——无论是打造专属画风的Stable Diffusion插件&#xff0c;还是定制行业语料的大语言模型。但当…

作者头像 李华
网站建设 2026/4/17 19:55:57

对比传统训练方式:lora-scripts为何能节省80%时间成本?

对比传统训练方式&#xff1a;lora-scripts为何能节省80%时间成本&#xff1f; 在AI模型快速迭代的今天&#xff0c;如何高效地将大模型适配到具体业务场景&#xff0c;已成为开发者面临的核心挑战之一。以Stable Diffusion或LLaMA这类通用模型为例&#xff0c;虽然它们具备强大…

作者头像 李华
网站建设 2026/4/16 19:43:04

结合Docker容器化技术运行lora-scripts提升环境一致性

结合Docker容器化技术运行lora-scripts提升环境一致性 在AI模型微调日益普及的今天&#xff0c;越来越多开发者希望快速训练出风格化或领域定制的LoRA模型——无论是为Stable Diffusion注入一种艺术风格&#xff0c;还是让大语言模型掌握特定行业知识。但现实往往令人沮丧&…

作者头像 李华