ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

并行化认证加密深度解析:XKCP中Kravatte与Xoofff的Farfalle构造

并行化认证加密深度解析:XKCP中Kravatte与Xoofff的Farfalle构造 并行化认证加密深度解析XKCP中Kravatte与Xoofff的Farfalle构造【免费下载链接】XKCPeXtended Keccak Code Package项目地址: https://gitcode.com/gh_mirrors/xk/XKCPXKCPeXtended Keccak Code Package是一个面向高性能场景的开源密码学代码包其中的Kravatte与Xoofff是两种基于 Farfalle 构造的并行海绵Parallel Sponge认证加密原语。本文将用通俗的方式带你看懂它们的构造原理、API 使用方式和 SIMD 加速路径帮助你在安全通信、存储加密等场景中做出选型。一、Farfalle 构造如何把串行海绵变成并行传统海绵结构如 SHA-3是严格串行的先逐块吸收Absorb再逐块挤压Squeeze每一块都依赖上一块的结果天然难以并行。Farfalle 构造打破了这个串行瓶颈核心思想有两条压缩链与扩展链相互独立输入数据经压缩链Compress处理输出密钥流由扩展链Expand生成两条链之间没有数据依赖可以并行计算滚动密钥Rolling Key每一块的掩码都由上一块掩码经一个轻量滚动函数Rollc/Rolle推导而来因此各块之间也不再串行等待。由此带来的收益是同一时刻可以并行处理多个数据块。XKCP 底层针对这一模式提供了多路并行置换原语times2 / times4 / times8 / times16并配合 AVX512、AVX2、NEON 等 SIMD 指令集实现加速。对比项串行海绵如 SHA-3Farfalle 并行海绵Kravatte / Xoofff块间依赖强依赖逐块串行仅依赖滚动密钥块间独立压缩与扩展同一条状态链两条独立链可并行每块置换轮数24 轮Keccak-p[1600]仅 6 轮掩码提供强度SIMD 加速有限2~16 路并行二、Kravatte基于 Keccak-p[1600] 的 Farfalle 变体Kravatte 构建在 SHA-3 的核心置换Keccak-p[1600]之上状态宽度为 1600 位200 字节/块实例结构定义在 Kravatte.h 中包含密钥k、滚动密钥kRoll、压缩累加器xAccu、扩展累加器yAccu和输入输出队列。三步上手 Kravatte掩码推导 → 压缩 → 扩展步骤函数作用① 掩码推导Kravatte_MaskDerivation()由用户密钥 K 生成初始掩码 kK 填充至满状态后做 6 轮置换见 Kravatte.c② 压缩Kra()逐块处理明文块 ⊕ 当前掩码 → 6 轮置换 → 累加到xAccu同时滚动密钥前进③ 扩展Vatte()由xAccu派生yAccu再生成密钥流与滚动密钥异或得到输出输出长度不足一块时可先入队缓存滚动密钥的推导逻辑十分简洁——压缩链使用Kravatte_Rollc()5 个 64 位字节的滚动扩展链使用Kravatte_Rolle()10 个字节滚动实现见 Kravatte.c。此外还提供Short-Kravatte短变体KRAVATTE_FLAG_SHORT标志省略一次 6 轮置换适合对速度敏感的场景。Kravatte 的 AEAD 应用模式在 KravatteModes.h 中Kravatte 被封装为四种应用模式SANESponge Authenticated Encryption16 字节认证标签需显式 nonceSANSE32 字节标签免 nonce内部自计数WBCWide-Block Cipher宽块可调块密码支持 tweak 参数WBCAE附加 128 位认证标签的 AEAD 模式。典型调用Kravatte_SANE_Initialize()→Kravatte_SANE_Wrap()加密/Kravatte_SANE_Unwrap()解密并验签解密函数内部自动完成标签校验使用更安全。三、Xoofff面向轻量级场景的 48 字节并行海绵Xoofff是 Kravatte 的轻量级兄弟底层置换换成了 Xoodoo——状态仅 384 位48 字节/块见 Xoofff.h滚动函数基于 32 位字操作实现见 Xoofff.c。它的优势在于状态小、内存占用低非常适合嵌入式与 IoT 设备⚡并行度更高得益于更小的状态AVX512 上可做到16 路并行Kravatte 最高 8 路 支持Xoofffie短变体Xoofff_FlagXoofffie与 Short-Kravatte 定位相同。API 与 Kravatte 完全同构Xoofff_MaskDerivation()→Xoofff_Compress()→Xoofff_Expand()AEAD 模式SANE / SANSE / WBC / WBCAE定义在 XoofffModes.h 中接口命名与 Kravatte 一一对应迁移成本极低。四、如何自动获得最快的 SIMD 并行路径XKCP 的一大亮点是运行时自动选择最优实现。压缩/扩展循环会按并行度从高到低探测能力位times16 → times8 → times4 → times2 → 单路回退每一级都会检查两个能力位定义于 PlSnP-common.h 与 SnP-common.hPlSnP_Feature_Farfalle/SnP_Feature_Farfalle具备Farfalle 专用快速路径掩码异或已融合进 SIMD 置换内核走ParallelCompressLoopFastPlSnP_Feature_Main只有多路置换主路径走通用PermuteAll_6rounds循环。各平台的典型并行能力如下平台 / 指令集KravatteKeccak-p[1600]XoofffXoodooAVX5128 路times8 实现16 路times16 实现AVX24 路times4 实现8 路times8 实现ARM NEON2 路4 路times4 实现通用 CPU1 路纯 C 回退1 路纯 C 回退对使用者而言无需关心这些细节——编译好库之后性能自动拉满。五、Kravatte vs Xoofff一张表看懂选型维度KravatteXoofff底层置换Keccak-p[1600]SHA-3 内核Xoodoo轻量级置换块大小200 字节48 字节最高并行度8AVX51216AVX512安全定位通用高强度场景轻量级 / 资源受限设备短变体Short-KravatteXoofffieAEAD 模式SANE / SANSE / WBC / WBCAESANE / SANSE / WBC / WBCAE选型建议服务端、大吞吐数据加密优先 KravatteIoT 设备、MCU 或对内存敏感的场景优先 Xoofff若代码中已有另一侧的实现两者 API 同构切换只需替换前缀名。六、核心文件路径速查Kravatte 主实现Kravatte.c、接口Kravatte.hKravatte AEAD 模式KravatteModes.h、KravatteModes.cXoofff 主实现Xoofff.c、接口Xoofff.hXoofff AEAD 模式XoofffModes.h、XoofffModes.c能力位定义PlSnP-common.h、SnP-common.h单元测试testKravatte.c、testXoofff.c关联文档Xoodyak API 说明Xoodyak-documentation.h小结Farfalle 构造用压缩/扩展双链独立 滚动密钥两个技巧把传统海绵的串行瓶颈变成了 2~16 路 SIMD 并行XKCP 则以 Kravatte高强度、Keccak-p[1600] 底座和 Xoofff轻量级、Xoodoo 底座两条产品线覆盖从服务器到芯片的全场景并通过能力位探测为每次调用自动匹配当前 CPU 上最快的执行路径。理解了上述机制你便可以在认证加密选型中 confidently 地把握速度—安全—资源三角的取舍。【免费下载链接】XKCPeXtended Keccak Code Package项目地址: https://gitcode.com/gh_mirrors/xk/XKCP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表