ECDSA/Ed25519密钥生成器
指导
ECDSA/Ed25519密钥生成器
使用Web Crypto API在浏览器中生成安全的椭圆曲线密钥对。选择Ed25519、ECDSA P-256或ECDSA P-384,并导出为PEM(PKCS8/SPKI)、JWK或原始十六进制格式。适用于JWT签名(ES256、EdDSA)、Signal风格协议、libsodium互操作性,以及任何非OpenSSH风格的通用椭圆曲线加密。
如何使用
- 选择算法: Ed25519 用于现代签名方案 ECDSA P-256 用于ES256 JWT ECDSA P-384 用于ES384 JWT
- 选择输出格式: PEM 用于OpenSSL/Node/Python JWK 用于jose / jsonwebtoken库 原始十六进制 用于底层使用
- 点击 生成密钥对两个密钥会立即显示。
- 复制或下载每个密钥。JWK指印(RFC 7638)将显示,用于JWT中使用
kid标头中来实现。
特征
- 100% 客户端 ——密钥由
window.crypto.subtle.generateKey();没有上传任何内容。 - 三种曲线 ——Ed25519(EdDSA)、ECDSA P-256(ES256)、ECDSA P-384(ES384)
- 三种输出格式 ——PEM(PKCS8私钥、SPKI公钥)、JWK和原始十六进制
- JWK指印 ——根据RFC 7638自动计算的SHA-256指印,适用于
kid声明。 - 一键复制和下载 ——文件按算法命名,并带有正确的扩展名。
- 无数据收集 ——无分析、无日志、无密钥托管。
常问问题
-
Ed25519和ECDSA有什么区别?
Ed25519是基于扭曲埃德华兹曲线Curve25519的EdDSA方案。它使用确定性签名,密钥大小固定(32字节),速度更快且更难误用,比ECDSA更安全。ECDSA基于NIST曲线(如P-256/P-384)早于Ed25519,每个签名都需要一个安全的随机数(重复使用随机数会泄露私钥),并且是许多旧标准(如TLS、JWT ES256/ES384、证书)所要求的格式。
-
PKCS8和SPKI有什么区别?
PKCS8(PrivateKeyInfo)是私钥的标准ASN.1/DER容器,标识算法并封装密钥材料。SPKI(SubjectPublicKeyInfo)是公钥的对应容器,用于X.509证书中。PEM编码的PKCS8以
-----BEGIN PRIVATE KEY-----开头,SPKI以-----BEGIN PUBLIC KEY-----. -
什么是JWK指印,何时使用?
RFC 7638将JWK指印定义为一个经过规范化处理的JSON Web Key的SHA-256哈希值的base64url编码。它是一个稳定、基于密钥的标识符,可以放入JWT中
kid头部,以便验证者可以在JWKS中找到正确的公钥,而无需泄露密钥材料。交换相同密钥的双方将计算出相同的指印。 -
为什么使用Web Crypto API而不是JavaScript库?
window.crypto.subtle调用浏览器原生、经过审计的加密原语,这些原语依赖于操作系统的CSPRNG。纯JavaScript库依赖于JavaScript引擎的Math.random或填充的随机数,更容易通过供应链攻击被后门入侵,且运行速度较慢,因为无法使用CPU的AES-NI/SHA扩展指令。 -
这些密钥在生产环境中是否安全?
随机性与浏览器的CSPRNG一样强,在现代操作系统上适合用于生产密钥。风险在于运行环境:被入侵的设备、恶意浏览器扩展或钓鱼页面加载其自身版本的页面可能会窃取密钥。对于高价值密钥,应离线生成(
openssl genpkey,硬件令牌,HSM)或在隔离环境中生成。
