SHA-384 哈希生成器(TLS Suite B 哈希)
在线生成 SHA-384 哈希值——96 字符十六进制输出,免疫长度扩展攻击,符合 NSA Suite B 标准。与 AES-256-GCM 配对用于 TLS。所有哈希通过 Web Crypto API 在浏览器中运行。
什么是 SHA-384?
SHA-384 是 SHA-2 家族中的 384 位密码哈希函数,NIST 于 2001 年以 FIPS 180-2 的一部分发布。从架构上看,它是 SHA-512 的截断变体:两种算法使用相同的 64 位字运算、80 个压缩轮次和 1024 位输入块——唯一的差异是初始化向量(IV)以及 SHA-384 丢弃 SHA-512 的 512 位输出中最后 128 位,产生 384 位(96 个十六进制字符)。
为什么截断在密码学上很重要:SHA-256 对长度扩展攻击存在漏洞——给定 SHA-256(message),攻击者可以在不知道原始消息的情况下计算 SHA-256(message || padding || extension),方法是从泄露的内部状态恢复哈希计算。SHA-384 消除了这一攻击面:截断丢弃了 128 位内部状态,因此公开的 384 位哈希不携带足够的信息来恢复 SHA-512 的计算。这使得原始 SHA-384(无需 HMAC 包装)在哈希输出可能暴露给对手的构造中是安全的。
NSA Suite B 和 TLS 角色:SHA-384 由 NSA Suite B(CNSSP-15,2005 年)规定用于绝密级别。它是密码套件 ECDHE-ECDSA-AES256-GCM-SHA384 中的哈希算法,该密码套件是 Suite B 合规系统的标准 TLS 1.2 密码套件,至今仍广泛部署在美国政府、金融和国防网络中。NSA 的 CNSA Suite(2015 年)保留了 SHA-384 和 SHA-256,SHA-384 也出现在 TLS 1.3 的签名算法列表中(ecdsa_secp384r1_sha384)。
性能:在 64 位硬件上,SHA-384 和 SHA-512 运行速度完全相同——两者均只使用 64 位字运算。对于相同的输入,它们通常比 SHA-256(使用 32 位字运算,需要更多遍数)在现代 x86-64 和 ARM64 处理器上更快。
本工具完全在你的浏览器中通过 Web Crypto API 的 crypto.subtle.digest('SHA-384', ...) 计算 SHA-384。输出与 sha384sum、openssl dgst -sha384 或 Python 的 hashlib.sha384() 的结果逐位相同。
何时使用 SHA-384:要求 Suite B 合规的 TLS 密码套件、TLS 1.2 PRF 的 HMAC-SHA-384、HKDF-SHA-384 密钥派生、机密文档指纹,以及任何需要不使用 HMAC 包装即具备长度扩展免疫性的场景。何时不使用 SHA-384:通用校验和和日常完整性用途——SHA-256 是这些场景的标准选择,具有更简单的库支持和通用工具兼容性。
// Hash text using Web Crypto API (SHA-384)
async function sha384(text) {
const data = new TextEncoder().encode(text);
const hash = await crypto.subtle.digest('SHA-384', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
await sha384('Hello, World!');
// → '5485cc9b3365b4305dfb4e8337e0a598a574f8242bf17289e0dd6c20a3cd44a089de16ab4ab308f63e44b1170eb5f515' SHA-384 示例
TLS 密码套件握手指纹
ECDHE-ECDSA-AES256-GCM-SHA384
密码套件名称 ECDHE-ECDSA-AES256-GCM-SHA384 是用于绝密级 TLS 会话的标准 Suite B 密码套件。名称末尾的 SHA-384 指 TLS 1.2 握手中用于派生会话密钥的伪随机函数(PRF)。将此字符串粘贴到此处即可生成密码套件名称本身的 SHA-384 哈希——这是跨环境验证 SHA-384 实现一致性的快捷方式。在真实的 TLS 会话中,证书链、预主密钥和握手记录均通过 HMAC-SHA-384 作为 TLS 1.2 PRF 的一部分进行处理。
HKDF-SHA-384 密钥派生(TLS 1.2 PRF)
master secret || client random || server random
TLS 1.2 的 PRF(RFC 5246 定义)对使用 SHA-384 协商的密码套件使用 HMAC-SHA-384。主密钥由预主密钥通过 P_SHA384(pre_master_secret, 'master secret' || ClientHello.random || ServerHello.random) 派生。HKDF-SHA-384(RFC 5869)将此模式扩展用于通用密钥派生,也用于 TLS 1.3 的密钥调度以及 IKEv2(IPsec)。在此粘贴任何种子材料即可生成在应用 HMAC 之前的 SHA-384 指纹——调试密钥派生管道的第一步。
NSA Suite B 机密文档指纹
CLASSIFIED//TS//SI//NF — Document ID: TSC-2026-0001
NSA 的 Suite B 密码体系(CNSSP-15,已被 2018 年的 CNSA Suite 取代)规定对绝密文档完整性使用 SHA-384。情报界系统以 SHA-384 对机密文档进行指纹提取以检测篡改。生成的 96 字符十六进制字符串与 AES-256-GCM 加密有效载荷一起存储在文档清单中。在此粘贴任意文档头部或 ID 字符串即可生成 SHA-384 指纹——适用于审计遗留 Suite B 合规档案,或验证正在向 CNSA 过渡的系统仍能产生正确的 SHA-384 输出。
HMAC-SHA-384 消息认证
POST /api/v2/transfer
Content-Type: application/json
{"amount":10000,"to":"account-XYZ"} HMAC-SHA-384 用于高保证 API 对请求体进行认证。服务器计算 HMAC-SHA-384(secret_key, canonical_request) 并将十六进制摘要包含在 Authorization 头中;客户端重现计算并进行比对。由于 SHA-384 即使在原始(非 HMAC)形式下也对长度扩展免疫,它在某些场景下比 HMAC-SHA-256 提供额外的安全裕度——例如分布式日志系统或签名 URL 方案中原始哈希可能被暴露的情况。在此粘贴请求体即可在添加 HMAC 密钥前检查 SHA-384 哈希值。
如何生成 SHA-384 哈希值
- 1
粘贴文本或拖入文件
选择「文本」选项卡,将任意字符串——文档 ID、请求体或任意输入——粘贴到输入区域。SHA-384 哈希值会随输入实时更新。对于文件,切换到「文件」选项卡,将任意文件拖入拖放区;浏览器使用 Web Crypto API 在本地对其进行哈希,不会上传。大文件(>10 MB)会显示进度指示器。
- 2
复制 96 字符哈希值
点击哈希输出旁的「复制」按钮。完整的 96 字符小写十六进制字符串将复制到剪贴板——可直接粘贴到 TLS 配置、合规报告或 HMAC 实现中。如果目标系统需要大写十六进制,可使用「大写」切换。
- 3
与已知哈希值进行比对
切换到「对比」选项卡,并排粘贴两个 SHA-384 哈希值。工具使用恒定时间比较报告匹配或不匹配,不会泄漏时序信息。适用于验证 Suite B 合规性哈希值、比较跨实现的 HKDF-SHA-384 派生密钥,或核查机密档案审计中的文档指纹。
技术细节
- 算法:SHA-512 使用不同 IV,输出截断为 384 位
- SHA-384 在结构上与 SHA-512 完全相同(FIPS 180-4 第 6.5 节)。两者均使用 80 轮 64 位运算(Ch、Maj、Σ0、Σ1 函数),常数由前 80 个素数的立方根和平方根派生。初始化向量(八个 64 位字)与 SHA-512 的 IV 不同——SHA-384 的 IV 由第 9 到第 16 个素数平方根的小数部分派生。处理后,八字状态中的前六个 64 位字(384 位)作为输出;最后两个字被丢弃。
- 输出:384 位,96 个十六进制字符
- 始终恰好为 96 个小写十六进制字符(384 位 = 48 字节,每字节编码为 2 个十六进制字符)。无论输入大小,输出长度固定。96 字符长度是区分 SHA-384(64 字符的 SHA-256 和 128 字符的 SHA-512)的即时标志。被丢弃的 128 位——最后两个 64 位状态字——正是 SHA-384 对长度扩展免疫的原因。
- 性能:在 64 位硬件上与 SHA-512 相同
- SHA-384 和 SHA-512 在 64 位 CPU 上执行相同的指令序列。两者均使用 1024 位(128 字节)输入块,以 64 位旋转和加法处理。吞吐量通常在浏览器中使用 Web Crypto API(在 JS 虚拟机外调用原生 C/Rust 代码)达到 500–900 MB/s,在有硬件 SHA 扩展的原生工具中达到 1–3 GB/s。在 32 位硬件上或无硬件加速时,由于 64 位整数模拟,SHA-384/512 比 SHA-256 更慢。
- 标准:FIPS 180-4,NSA Suite B 历史遗留,CNSA 当前标准
- 在 FIPS 180-2(2001 年)中标准化,当前版本为 FIPS 180-4(2015 年)。NSA Suite B(CNSSP-15,2005 年)要求绝密级使用,CNSA Suite(2015 年)中仍然存在。在 RFC 5246(TLS 1.2 PRF 与 SHA-384 密码套件)、RFC 8446(TLS 1.3 签名算法 ecdsa_secp384r1_sha384)和 RFC 5869(HKDF)中有规定。根据 NIST SP 800-131A Rev 2,NIST 批准在 2030 年及以后的所有安全强度级别使用。
最佳实践
- 在需要不使用 HMAC 的长度扩展免疫性时使用 SHA-384
- 如果你的协议暴露原始哈希输出,且攻击者可能尝试扩展消息(例如某些签名 URL 或挑战响应方案),SHA-384 提供 SHA-256 所没有的内在长度扩展免疫性。对于所有其他带密钥的用途,无论底层哈希如何,均应使用 HMAC——HMAC-SHA-256 和 HMAC-SHA-384 都是安全的,HMAC 消除了任何 SHA-2 变体的长度扩展攻击。
- 与 AES-256-GCM 配对以符合 Suite B / CNSA 合规性
- 如果你正在构建必须符合 NSA Suite B 或 CNSA 要求的系统,标准配置是 AES-256-GCM 用于批量加密,SHA-384 用于完整性和密钥派生。TLS 1.2 配合 ECDHE-ECDSA-AES256-GCM-SHA384 是参考密码套件。TLS 1.3 的等效项是 TLS_AES_256_GCM_SHA384 配合 ecdsa_secp384r1_sha384 作为签名算法。确认你的 TLS 库实际协商了这些密码套件——某些默认配置即使在 Suite B 配置的系统上也会优先选择 AES-128 变体。
- 在 TLS 1.2 PRF 场景中使用 HMAC-SHA-384 作为带密钥 MAC
- TLS 1.2 的 PRF 对协商了 SHA-384 的密码套件使用 HMAC-SHA-384(RFC 5246 第 5 节)。如果你正在实现或测试 TLS 1.2 PRF:PRF(secret, label, seed) = P_SHA384(secret, label + seed)。不要在 SHA-384 密码套件上下文中用 HMAC-SHA-256 替换——密码套件协商决定 PRF 哈希,不匹配会导致握手失败。使用 RFC 5705(密钥材料导出器)或 RFC 6070(PBKDF2)的测试向量进行验证。
- 在代码中验证 SHA-384 哈希值时使用恒定时间比较
- 如果你在代码中比较两个 SHA-384 哈希值——验证文档指纹、核查 MAC——请使用恒定时间等值检查:Node.js 的
crypto.timingSafeEqual()、Python 的hmac.compare_digest()、Go 的subtle.ConstantTimeCompare()。简单的字符串等值比较(=== 或 ==)会泄漏时序信息,允许攻击者通过约 768 次比较(96 字符 × 8 位)逐字节重建预期哈希值。这是任何认证系统的关键纵深防御措施。
SHA-384 常见问题
为什么使用 SHA-384 而非 SHA-256?
SHA-384 与 SHA-512 一样安全吗?
SHA-384 与 SHA-512 速度相同吗?
HMAC-SHA-384 何时优于 HMAC-SHA-256?
SHA-384 适合用于通用哈希吗?
什么是 NSA Suite B?它是否仍在使用?
SHA-384 哈希有多长?
使用本工具时数据会被发送到服务器吗?
crypto.subtle.digest('SHA-384', data))计算。在哈希过程中打开开发者工具 → 网络选项卡——你会看到零外发请求。你拖入的文件通过 FileReader API 在本地读取和哈希;字节数据不会离开你的设备。这使本工具可安全地用于哈希机密文档指纹、TLS 私钥材料或任何其他敏感输入。同样的隐私保证适用于 SHA-256 生成器和 SHA-512 生成器。 相关工具
查看所有工具 →JWT 解码器 · 在线解码工具
安全工具
免费 JWT 解码器,在线即时解码 JWT 令牌。查看头部、载荷、签名以及过期时间、算法和声明详情。100% 浏览器本地运行——令牌绝不离开你的设备。无需注册、无跟踪。
在线 MD5 哈希生成器与文件校验工具
安全工具
在线生成 MD5、SHA-256、SHA-1、SHA-512 哈希值 — 完全免费,浏览器本地运算,无需注册。支持文本和文件哈希、校验和验证、哈希值对比,一键复制,数据绝不离开你的设备。
随机密码生成器 — 自定义长度、强度与安全性
安全工具
免费在线随机密码生成器,一键生成高强度安全密码。支持自定义长度、字符类型,批量生成多个密码。所有密码仅在浏览器本地生成,不上传不存储。
SHA-1 哈希生成器(160 位遗留算法)
安全工具
在浏览器中生成 SHA-1 哈希值 — 40 字符十六进制输出,无需上传。适用于 Git 指纹查询、旧证书核验和迁移审计的遗留工具。数据绝不离开你的设备。
SHA-256 哈希生成器与校验和工具
安全工具
免费在线生成 SHA-256 哈希值。在浏览器中对文本或文件进行哈希、验证校验和,复制 64 字符十六进制输出。无需注册,数据不离开页面。
SHA-3 哈希生成器(Keccak SHA3-256)
安全工具
免费在线生成 SHA-3 哈希值。NIST FIPS 202 海绵构造——SHA-2 后的新一代标准。SHA3-256 输出 64 个十六进制字符。纯浏览器运行,通过懒加载 js-sha3 实现,零上传。