# HSM（硬件安全模块）是什么？定义、例子与常见误区

> HSM 是一种防篡改的硬件设备，在内部生成、保存并使用密钥，私钥不会以明文形式离开设备。

Source: https://ssl.sh/zh/glossary/hsm/
Last updated: 2026-11-10

HSM（Hardware Security Module，硬件安全模块）是专门执行密码运算的设备，形态可以是机架式设备、PCIe 卡、USB 令牌或云服务。签名、解密等操作都在受保护的边界内完成：密钥在模块内部生成，通常被标记为不可导出，应用只是通过 PKCS #11 等接口把数据送进去、拿结果出来。国际上 HSM 一般通过 FIPS 140-2/140-3 或 Common Criteria 认证；国内常称"密码机"或"服务器密码机"，通常需要具备商用密码产品认证，涉及密评（商用密码应用安全性评估）的系统一般要求使用经过认证的密码产品。

## 为什么重要
HSM 是 PKI 中最贵重密钥的安身之处。CA/浏览器论坛要求 CA 在经过认证的硬件中生成并保护 CA [私钥](https://ssl.sh/zh/glossary/private-key/)；代码签名规则也要求用户的签名私钥必须放在硬件里，所以[代码签名证书](https://ssl.sh/zh/glossary/code-signing-certificate/)通常以 USB Key 或云签名服务的形式交付。大型网站、支付系统和银行也会把 TLS 私钥放在 HSM 里，有时与 [SSL 卸载](https://ssl.sh/zh/glossary/ssl-offloading/)设备结合使用。

## 例子
```bash
# 在 PKCS #11 令牌上生成不可导出的 P-256 密钥（以 SoftHSM 测试为例）
pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login \
  --keypairgen --key-type EC:prime256v1 --label tls-key
pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --list-objects
```

## 常见误区
- **有了 HSM，服务器被攻破也没事。** HSM 防的是私钥被拷走，攻击者控制服务器期间仍然可以让 HSM 替他签名。
- **只有 CA 才需要 HSM。** 代码签名私钥同样必须硬件保护，金融等受监管行业也常要求用 HSM 保存 TLS 或签名密钥。
- **TPM 就是 HSM。** TPM 是绑定在单台机器上的小芯片，HSM 面向高吞吐、多应用的密钥管理。

## 相关术语

- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [密钥轮换](https://ssl.sh/zh/glossary/key-rotation/): 密钥轮换是按计划或在安全事件后，用新生成的密钥替换旧密钥，以限制密钥泄露造成损失的做法。
- [代码签名证书](https://ssl.sh/zh/glossary/code-signing-certificate/): 代码签名证书是带有 codeSigning 扩展密钥用途、用来给软件做数字签名，让用户能核实发布者身份和文件完整性的 X.509 证书。
- [证书颁发机构](https://ssl.sh/zh/glossary/certificate-authority/): 证书颁发机构（CA）是负责审核申请者、签发数字证书，并把公钥与域名或身份绑定在一起的机构。
- [PKI](https://ssl.sh/zh/glossary/pki/): PKI 即公钥基础设施，指用于签发、分发、验证和吊销数字证书的一整套角色、策略、软件和操作流程。
- [SSL 卸载](https://ssl.sh/zh/glossary/ssl-offloading/): SSL 卸载是把 TLS 握手和加解密的计算工作从应用服务器转移到专门的代理、负载均衡或硬件设备上。
- [KEY 文件](https://ssl.sh/zh/glossary/key-file/): KEY 文件是按惯例存放私钥的 .key 文件，通常为 PEM 编码，但扩展名本身并不说明里面的具体格式。
