简体中文

开发者工具 · SHA 哈希计算器

将秘密粘贴到在线哈希工具中:为什么摘要应该是本地的

· 为什么它很重要

sha-256 安全 隐私 浏览器 API

DevTools 网络面板在本地哈希 API 密钥时显示零请求
原始 ToolAcre 矢量图

如果哈希工具将您的输入发送到其服务器,则您正在哈希的秘密已经离开您的计算机。这篇文章解释了风险、Web Crypto 如何使服务器变得不必要,以及如何验证工具是本地的。

您散列后与配置文件进行比较的 API 密钥 - 以及它的去向

开发人员需要对 API 密钥进行哈希处理,以将其与配置中存储的值进行比较,因此他们需要使用最近的在线哈希工具。他们粘贴密钥,单击按钮,然后获取摘要。哈希值匹配,因此测试通过。他们可能没有意识到 API 密钥已经离开了他们的机器。在服务器上运行的任何哈希工具都会在计算任何摘要之前接收明文输入。服务器可以记录、存储、出售或转发给竞争对手。

这种欺骗很微妙,因为哈希工具可以真正产生正确的输出,并且仍然将输入传送到服务器。散列的数学运算与位置无关,因此即使架构不安全,服务器端散列在密码学上也是正确的。攻击者无需破坏哈希计算即可获胜;他们只需要明文输入。由于输出正确而假设哈希工具是本地的开发人员是信任错误的属性。

服务器端哈希工具接收的内容 - 根据定义,在计算任何摘要之前的完整明文输入

根据定义,服务器端哈希工具需要明文输入作为输入。服务器通过 HTTPS 接收数据,这会在传输过程中保护数据,但仅限于到达服务器之前。然后,服务器记录明文,在散列期间存储在内存中,可能写入磁盘,并包含在服务器保留的任何备份或监控跟踪中。运行服务器的公司可以读取日志并查看其中曾经被散列的每个秘密。

另一种方法是使用 Web Crypto,它是浏览器自己的加密实现。在安全源(即 HTTPS 或 localhost)上,浏览器公开 crypto.subtle.digest,该函数完全在浏览器进程内计算 SHA-1、SHA-256、SHA-384 和 SHA-512 摘要。输入永远不会离开设备,并且不涉及服务器。浏览器实现由浏览器供应商审核,由浏览器供应商修补,并作为优化的本机代码而不是附带的 JavaScript 运行。

为什么服务器是不必要的 - 浏览器自己的 Web Crypto 在本地计算每个 SHA-2 摘要

验证哈希工具是否是本地只需打开 DevTools 网络面板并观察该工具通过网络发送的内容。在大多数浏览器中,DevTools 使用 F12 或 Cmd+Option+I 打开,“网络”选项卡是观察网络流量的地方。打开网络选项卡且可见哈希工具后,粘贴明文,单击哈希按钮,然后观察会发生什么。如果使用本地工具,网络面板不会显示新请求。

这种验证方法之所以有效,是因为浏览器实现了同源限制。该页面可以向其自己的源发出请求,而不会触发 CORS 问题,因此本地工具可以根据需要向同一域上的服务器发出请求。当 DevTools 面板中出现网络请求时,就证明该工具正在向某个地方发送数据。检查这一点并看到没有网络流量的开发人员可以强有力地保证输入不会离开浏览器。 ToolAcre SHA 哈希计算器会生成一个网络面板,该面板在哈希时保持为空。

使用网络面板进行验证 — 粘贴、散列并观察零请求

严格的内容安全策略可以提供网络面板检查之外的额外保证。内容安全策略是服务器发送的 HTTP 标头,声明浏览器应允许哪些域加载脚本并发出请求。禁止所有外部脚本、所有外部样式表和所有表单提交到外部源的策略限制了受感染页面的行为。如果策略禁止外部请求,则攻击者无法发送将输入发送到外部服务器的恶意代码。

内容安全策略标头与 HTTP 响应一起发送,可以在 DevTools 网络选项卡的响应标头部分中进行检查。像 Content-Security-Policy: default-src 'self'; 这样的行script-src 'self' 声明脚本只能来自同一来源。包含框架祖先“none”的更严格策略可防止页面嵌入 iframe,如果恶意 iframe 试图窃取焦点,它会阻止一个攻击向量。这些详细信息对于了解防御措施很有用,但网络面板检查仍然是主要验证。

CSP 是纵深防御;此处读取的存储库源未建立已部署的标头

一个有效示例:将 AWS 或 Azure 中的 API 密钥粘贴到 ToolAcre SHA 哈希计算器中,以根据存储的指纹对其进行验证。打开 DevTools,选择“网络”选项卡,并确保它正在录制。将 API 密钥粘贴到哈希工具中,选择 SHA-256,然后单击哈希。摘要显示在工具中,网络面板显示没有新请求。该工具的文档中提供了测试向量,以便在需要时交叉检查哈希的正确性。关键是 API 密钥从未离开过浏览器,现在可以将摘要与存储的值进行比较,而无需暴露秘密。

此工作流程不涵盖浏览器扩展程序是否已受到损害或浏览器本身是否已受到损害。具有广泛权限的恶意扩展可以查看所有流量、拦截剪贴板内容并观察用户键入的内容。通过零日漏洞或恶意安装,受损的浏览器可能被迫将输入发送到任何地方。对于这些威胁,没有网络工具可以提供保护。正确的防御措施是信任浏览器安装、保持更新并检查已安装的扩展。

工作示例:使用无害的标记并检查请求,而不是粘贴实时 API 密钥

对于将机密粘贴到工具中的任何人的建议是在粘贴之前验证该工具是本地的。这是一个简单的步骤,消除了一个最大的风险:服务器操作员、他们的员工、他们的备份和他们的日志都看到明文。使用 DevTools 网络面板,观察零请求,然后将密钥信任该工具。 ToolAcre SHA 哈希计算器旨在以这种方式使用。它不存储任何内容,也不上传任何内容,并且“网络”面板保持为空。

对于已将机密粘贴到服务器端工具中的开发人员,下一步是轮换这些机密。发送到未知服务器的 API 密钥应被视为已泄露。应该撤销它,并颁发新的。应该更改密码。应更换 SSH 密钥。对于基础设施 API 密钥等静态机密,这是一次性操作。对于会话令牌或临时凭证,轮换会在令牌过期时自动发生。

这不包括浏览器扩展和受感染的机器,任何网络工具都无法防御它们

建立对在线工具的信任始于了解计算发生的位置并使用浏览器开发人员工具验证这种理解。网络面板是一个明确的信号:如果数据离开浏览器,它就会出现在那里。如果没有请求包含独特的测试输入,则该会话提供本地转换路径的证据。它不能保证扩展、受损的浏览器代码或未来的部署。将此检查与审查源代码(如果有)结合起来可以提供信心。

对于评估用于敏感数据的加密工具的组织,原则保持不变:验证计算是否在您控制的地方进行。对于散列 API 密钥或验证文件的个人,请首先使用网络面板检查。对于生产系统,使用 HMAC 或签名而不是普通哈希进行身份验证。 ToolAcre SHA 哈希计算器是一种用于学习和本地摘要计算的工具。它不适用于生产认证。

要点:验证,然后信任 — ToolAcre SHA 哈希计算器在您的浏览器中运行,在访问之间不上传任何内容,也不存储任何内容

透明度原则是 ToolAcre 方法的核心:每个工具都记录其功能、浏览器提供的内容以及开发人员必须执行的操作。 SHA 哈希计算器记录其使用浏览器的 Web Crypto 实现 SHA-256、SHA-384 和 SHA-512,并且它不实现 HMAC 或密钥派生。对于散列来说,该工具是精确的。对于身份验证,开发人员必须寻找其他地方。这种清晰度可以防止当单个工具试图做太多事情时出现的混乱。

当开发人员看到网络面板是空的并且源代码是开放的时,信任关系就建立在坚实的基础上。该工具的作用正如它所声称的那样:使用浏览器自己的实现在本地计算哈希值。然后,开发人员可以就该工具是否适合他们的用例做出明智的决定。对于验证 API 密钥来说,它非常适合。对于生产认证,需要 HMAC。对于密码存储,需要像 Argon2id 这样的密钥导出函数。了解这些边界是构建安全系统的第一步。