跳到主要内容
uencoder

生成 cryptographically secure session keys

会话关键必须是 unpredictable 和唯一 per 会话. Learn 到生成它们 using CSPRNG 和 derive sub-keys 具有 HKDF.

  1. 1

    会话键 是 fresh symmetric 键 generated 为单个会话. 它必须 come 从 CSPRNG (cryptographically 安全 pseudorandom 数字 generator) — 从不 Math.random(). 为 TLS, 会话键 是 derived via ECDHE; 为应用-级别, 生成 256 random bits.

  2. 2
    随机字节生成器 →

    生成 32 bytes (256 bits) of cryptographically secure random data. This is your session key. Use the Web Crypto API (crypto.getRandomValues) or Node.js crypto.randomBytes — never Math.random() or Date.now().

  3. 3
    HMAC 生成器 →

    Derive sub-keys 从主 会话键 using HKDF (HMAC-based 键 Derivation 函数). 为示例, derive separate 关键为 加密和 MAC: K_enc = HKDF(主, "加密"), K_mac = HKDF(主, "mac").

  4. 4
    AES 加密器 →

    Use derived 加密键 到 protect 会话数据. 键 exists 仅在 内存为 会话时长和 是 zeroed 开 logout 或会话超时.

  5. 5

    为 forward secrecy, 生成新 ephemeral 键对 per 会话, exchange 公共关键 via Diffie-Hellman, 和 derive 会话键 从 shared secret. Discard ephemeral 关键之后会话 — past sessions cannot 是 decrypted even 如果长-项关键是 compromised.

常见问题

为什么不 use Math.random()?
Math.random() 是不 cryptographically 安全 — 其输出是 predictable 具有 enough observations. 它我们 PRNG (不 CSPRNG) 该能够是 反转-engineered. 总是 use crypto.getRandomValues() (browser) 或 crypto.randomBytes() (Node.js).
什么是 HKDF 和为什么 use 它?
HKDF (RFC 5869) expands 主键 为多个 independent sub-keys using HMAC. 它 ensures 该 compromising one sub-键不 reveal 其他. Use 它到 derive separate 关键为 加密, 认证, 和 IV generation 从单个主 键.

解决此任务的工作流

相关工具