SHA-3算法详解

SHA-3(Secure Hash Algorithm 3)是美国国家标准与技术研究院(NIST)于 2015 年发布的新一代密码哈希算法标准,其核心基于比利时密码学家团队设计的Keccak 算法。SHA-3 的诞生旨在应对 SHA-1 和 SHA-2 系列算法可能面临的未来安全威胁(如量子计算攻击),并引入了全新的海绵结构(Sponge Construction),显著提升了安全性和灵活性。

算法基本特性

参数

说明

输出长度

支持 224、256、384、512 位(对应 SHA3-224/SHA3-256/SHA3-384/SHA3-512)

状态大小

固定为 1600 位(5×5 的 64 位矩阵)

比特率(r)

不同输出长度对应不同的消息块大小:1152、1088、832、576 位

容量(c)

安全冗余位:448、512、768、1024 位(c = 1600 - r)

置换轮数

24 轮(每轮包含 5 个核心操作)

抗攻击特性

对长度扩展攻击免疫,理论抗碰撞强度为 2²⁵⁶次运算(SHA3-512)

并行能力

高度并行,适合硬件加速

核心设计原理:海绵结构

SHA-3 采用海绵结构替代传统的 Merkle-Damgård 结构,其核心思想是通过 “吸收→置换→挤压” 流程处理任意长度的输入:

2.1 吸收阶段(Absorbing)

  • 将输入消息分块(每块长度为 r),依次与状态矩阵的前 r 位异或。
  • 每异或一个消息块后,应用Keccak-f 置换函数(24 轮复杂变换),将消息特征扩散到整个状态矩阵。

2.2 挤压阶段(Squeezing)

  • 从状态矩阵的前 r 位提取输出,生成所需长度的哈希值。
  • 若输出长度超过 r,重复应用 Keccak-f 置换并继续提取,直至满足需求。

2.3 与Merkle-Damgård 的区别

  • 抗长度扩展攻击:海绵结构通过容量 c 隔离消息块间的关联性,避免攻击者通过追加数据伪造哈希值。
  • 灵活性:可生成任意长度输出(如 SHAKE128/SHAKE256 等扩展函数)。

详细流程解析

3.1. 消息填充(Pad10*1 规则)

  • 步骤 1:在消息末尾添加二进制串 “011”(0x06)。
  • 步骤 2:补 0 直到总长度满足 (原始长度 + 3 + k) ≡ 0 mod r。
  • 步骤 3:将最后一个字节的最高位置 1(即添加 “1”)。

示例:若原始消息为 575 位(SHA3-512 的 r=576 位),填充后变为 577 位(575+3+0+1),需拆分为两个块(576+1 位,但实际填充会补 0 至 576 位,最后一位补 1)。

3.2 状态初始化

  • 状态矩阵初始化为全 0 的 5×5×64 位立方体。

3.3 吸收阶段

  • 分块处理:将填充后的消息按 r 位分块,依次与状态矩阵的前 r 位异或。
  • Keccak-f 置换:每异或一个块后,执行 24 轮置换,包括以下步骤:
  • θ(Theta):列间异或与循环移位,实现线性扩散。
  • ρ(Rho):对每个元素进行特定偏移量的循环右移。
  • π(Pi):行内元素位置置换,增强混淆。
  • χ(Chi):非线性变换(位级异或与取反),引入不可逆性。
  • ι(Iota):添加轮常数,打破对称性。

3.4 挤压阶段

  • 从状态矩阵的前 r 位提取输出,若需要更多位,重复以下操作:
  • 应用 Keccak-f 置换。
  • 继续提取 r 位,直至总长度达标。

4 Keccak-f 置换函数详解

Keccak-f 是 SHA-3 的核心变换,每轮包含五个步骤:

4.1 θ 步骤(列扩散)

  • 计算列异或:对每列 5 个元素求和,再与相邻列异或。
  • 循环移位:将结果循环右移 1 位,再次异或回原列。

4.2 ρ 步骤(元素旋转)

每个元素按预设的偏移量(如第 (x,y) 元素旋转 (x+1)(y+1) 位)进行循环右移。

4.3 π 步骤(行置换)

行内元素按固定置换表重新排列(如第 x 行的元素 y 移动到位置 (2x+3y) mod 5)。

4.4 χ 步骤(非线性变换)

对每行元素进行位级运算:
s[x][y] = s[x][y] ^ ((~s[x+1][y]) & s[x+2][y])
(其中 x+1、x+2 取模 5)

4.5 ι 步骤(轮常数注入)

与轮常数(RC [r])异或,RC [r] 由 LFSR 生成,每轮不同。

5 算法特点

安全性:

抗碰撞性:512 位输出的理论抗碰撞强度为 2²⁵⁶次运算。

抗量子攻击:海绵结构和复杂置换设计使其对 Grover 算法等量子攻击具有更强抵抗力12。

灵活性:

支持任意输出长度(如 SHAKE128 可生成 1KB 哈希值)。

兼容多种应用场景(哈希、消息认证码、伪随机数生成)。

高效性:

硬件实现简单,支持并行计算,现代 CPU(如 Intel AVX2)可通过指令集优化加速。

6 应用场景

数据完整性校验:

大型文件传输(如备份、分布式存储)中校验数据一致性。

密码学协议:

TLS 1.3 协议中用于密钥派生和消息认证1。

零知识证明、数字签名等场景。

区块链技术:

以太坊 2.0 采用 SHA3-256 生成账户地址和区块哈希。

抗量子特性为未来区块链安全提供保障12。

密码存储:

加盐哈希存储用户密码,防止彩虹表攻击。

与 Keccak 的关系

SHA-3 是 Keccak 算法的标准化实例,但存在以下差异:

填充规则:SHA-3 使用 Pad10*1,而 Keccak 支持多种填充方式。

参数固定:SHA-3 的状态大小固定为 1600 位,而 Keccak 允许自定义参数。

未来挑战与应对

尽管 SHA-3 目前被认为是安全的,但其长期安全性仍需关注:

量子计算威胁:Grover 算法可将 SHA-3 的碰撞攻击复杂度降低至√(2⁵¹²) = 2²⁵⁶次运算,与现有安全级别相当。

新型攻击手段:需持续关注密码分析进展,如差分攻击、线性攻击的变种。

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

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

相关文章

前端笔记:同源策略、跨域问题

只有前端才会有跨域问题后端不受限制 一、什么是“同源策略”(Same-Origin Policy) ✅ 定义: 浏览器的 同源策略 是一种 安全机制,限制一个源的 JavaScript 访问另一个源的资源,以防止恶意网站窃取用户敏感信息。 ✅ “…

java通过com进行pdf转换docx丢失

使用,通过com调用,发现pdf转换成docx后,没有看到docx输出到指定目录。直接说解决方案:关闭的保护模式即可,打开工具,编辑->首选项 找到安全性(增强),关闭启动时启用保护模式关闭后,docx正常输…

SQL基础⑫ | 视图篇

0 序言 本文将系统讲解数据库中视图的相关知识,包括视图的定义、作用、创建(单表、多表、基于视图创建)、查看、更新、修改与删除操作,以及视图的优缺点。 通过学习,你能够掌握视图的基本概念,理解何时及如…

移动云×华为昇腾:“大EP+PD分离”架构实现单卡吞吐量跨越式提升!

在面向下一代AI基础设施的关键技术攻关中,移动云与华为昇腾计算团队深度协同,实现了大模型推理引擎的架构级突破。双方基于昇腾AI基础软硬件平台,针对DeepSeek大模型完成了大规模专家并行(Expert Parallelism,简称“大…

配电自动化终端中电源模块的设计

配电自动化终端中电源模块的设计 引言 配电终端设备的可靠性和自动化程度,直接影响到整个配电自动化系统的可靠性和自动化水平。由于配电终端设备一般安装于户外或比较偏僻的地方,不可能有直流电源提供,因此,配电网终端设备的直流供电方式成为各配网自动化改造中必须要研究…

性能测试-groovy语言1

课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 Jmeter之Groovy语言Groovy简介为何性能测试中选择Groovywindows下载Groovy进入官网配置环境变量Groovy的数据类型groovy的保留字字符…

天邑TY1613_S905L3SB_安卓9-高安非-高安版-通刷-TTL线刷固件包

天邑TY1613_S905L3SB_安卓9-高安非-高安版-通刷-TTL线刷固件包刷机说明:本固件为TTL刷机方式,需要准备如下工具;电烙铁TTL线刷机优盘TTL接触点位于处理器左侧,从上往下数第二脚GND、3TXD、4RXD跑码工具-【工具大全】-putty跑码工具…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-7,(知识点:晶体管放大倍数计算)

目录 1、题目 2、解答 3、相关知识点 晶体管的电流分配关系 直流电流放大系数\(\overline{\beta}\) 交流电流放大系数\(\beta\) 晶体管的放大条件 总结 【硬件-笔试面试题】硬件/电子工程师,笔试面试题汇总版,持续更新学习,加油&…

力扣-152.乘积最大子数组

题目链接 152.乘积最大子数组 class Solution {public int maxProduct(int[] nums) {int[] dpMax new int[nums.length]; //包括nums[i]的乘积最大值int[] dpMin new int[nums.length]; //包括nums[i]的乘积最小值int res nums[0];dpMax[0] nums[0];dpMin[0] nums[0];fo…

HTTP/1.0、HTTP/1.1 和 HTTP/2.0 主要区别

一句话总结 HTTP/1.0: 短连接,每次请求都需要建立一个新的 TCP 连接,性能较差。HTTP/1.1: 长连接,默认开启 Keep-Alive,连接可复用,解决了 1.0 的大部分问题,是目前使用最广泛的版本。HTTP/2.0: 二进制、多…

Navicat 17.3 正式发布 | 现已支持达梦、金仓和 IvorySQL 数据库

🚀🚀🚀 Navicat 很高兴地宣布:Navicat 17.3 版本正式发布。此次更新包含多项突破性功能,包括新增对达梦、金仓和 IvorySQL 等数据库的支持,全面强化 AI 功能并新增阿里通义千问等 AI 大模型,同…

前端性能新纪元:Rust + WebAssembly 如何在浏览器中实现10倍性能提升(以视频处理为例)

前端性能新纪元:Rust WebAssembly 如何在浏览器中实现10倍性能提升(以视频处理为例) JavaScript,作为 Web 开发的基石,是动态的、灵活的,但在性能上,它也存在着天生的“软肋”。对于那些计算密…

Web前端:JavaScript find()函数内判断

🎯 find是什么?find() 是 JavaScript 数组(Array)提供的一个内置方法,用于在数组中查找第一个满足条件的元素。简单来说:它像侦探一样遍历数组,找到第一个符合条件的成员就返回它。⚙️ 核心作用…

MySQL详解三

MySQL详解三事务ACID特性原子性一致性隔离性持久性事务的隔离级别读未提交(Read Uncommitted)读已提交(Read Committed)可重复读(Repeatable Read)串行化(serializable)MVCC聚集索引的隐藏列read view锁全局…

ABQ-LLM:用于大语言模型的任意比特量化推理加速

温馨提示: 本篇文章已同步至"AI专题精讲" ABQ-LLM:用于大语言模型的任意比特量化推理加速 摘要 大语言模型(LLMs)在自然语言处理任务中取得了革命性的进展。然而,其实际应用受到巨大的内存与计算开销的限制…

kafka的shell操作

Kafka 提供了丰富的 shell 命令工具,位于 Kafka 安装目录的 bin/ 目录下(Windows 系统为 bin/windows/)。这些命令用于管理主题、生产者、消费者、分区等核心组件。以下是常用的 Kafka shell 操作大全:一、主题(Topic&…

client-go: k8s选主

快速上手 下面这个代码就是一个选主的大概逻辑 package mainimport ("context""flag""fmt"_ "net/http/pprof""os""path/filepath""time""golang.org/x/exp/rand"v1 "k8s.io/api/core/v…

为什么Java的String不可变?

为什么Java的String不可变? 场景: 你在开发多线程用户系统时,发现用户密码作为String传递后,竟被其他线程修改。这种安全隐患源于对String可变性的误解。Java将String设计为不可变类,正是为了解决这类核心问题。 1️⃣…

在Ubuntu上使用QEMU学习RISC-V程序(1)起步第一个程序

文章目录一、 引言二、 环境准备三、编写简单的RISC-V程序四、 编译步骤详解五、使用QEMU运行程序六、程序详解七、退出QEMU八、总结附录:QEMU中通过UTRA显示字符工作原理1、内存映射I/O原理2、add.s程序工作流程3、关键指令解析4、QEMU模拟的UART控制器5、为什么不…

R拟合 | 一个分布能看到三个峰,怎么拟合出这三个正态分布的参数? | 高斯混合模型 与 EM算法

1. 效果已知数据符合上图分布,怎么求下图的三个分布的参数mu, sigma,及每个分布的权重 lambda? 2. 代码: 高斯混合模型(Gaussian Mixture Model,简称GMM) library(mixtools) set.seed(123) # 确保结果可重复…