首页
/ MDN Web Crypto API 技术详解:现代Web应用的安全基石

MDN Web Crypto API 技术详解:现代Web应用的安全基石

2025-07-07 02:39:32作者:何将鹤

什么是Web Crypto API?

Web Crypto API是现代浏览器提供的一套JavaScript接口,它允许开发者在Web应用中使用基础的加密功能。这套API为开发者提供了密码学原语,可以用来构建各种需要加密功能的系统。

核心概念

1. 接口架构

Web Crypto API主要由三个核心接口组成:

  1. Crypto接口:提供基础加密功能,包括:

    • 密码学安全的随机数生成器
    • 通过subtle属性访问SubtleCrypto对象
  2. SubtleCrypto接口:提供底层加密操作,包括:

    • 密钥生成
    • 加密/解密
    • 数字签名
    • 密钥派生
    • 密钥包装/解包
  3. CryptoKey接口:表示加密密钥,可通过以下方式获得:

    • generateKey()生成新密钥
    • deriveKey()派生密钥
    • importKey()导入现有密钥
    • unwrapKey()解包密钥

2. 算法支持

Web Crypto API支持多种加密算法,主要分为以下几类:

对称加密算法

  • AES-CBC (AES分组密码的CBC模式)
  • AES-CTR (AES计数器模式)
  • AES-GCM (AES伽罗瓦/计数器模式)
  • AES-KW (AES密钥包装算法)

非对称加密算法

  • RSA (包括RSASSA-PKCS1-v1_5、RSA-PSS和RSA-OAEP)
  • ECDSA (椭圆曲线数字签名算法)
  • ECDH (椭圆曲线Diffie-Hellman密钥交换)

哈希和消息认证

  • HMAC (基于哈希的消息认证码)
  • SHA家族哈希函数 (SHA-1、SHA-256、SHA-384、SHA-512)

密钥派生函数

  • PBKDF2 (基于密码的密钥派生函数2)
  • HKDF (HMAC-based Extract-and-Expand Key Derivation Function)

使用注意事项

  1. 安全警告

    • Web Crypto API提供的是底层加密原语,非常容易被误用
    • 密钥管理和整体安全系统设计极其复杂,通常需要安全专家参与
    • 设计和实现中的错误可能导致整个安全系统失效
  2. 最佳实践

    • 学习和实验是可以的,但在未经安全专家审查前,不要声称或暗示你的系统是安全的
    • 考虑使用经过验证的高级加密库,而不是直接使用这些底层API
    • 始终使用最新的加密标准和算法

实际应用示例

生成随机数

const array = new Uint8Array(10);
window.crypto.getRandomValues(array);
console.log(array); // 输出10个密码学安全的随机字节

使用AES-GCM加密数据

async function encryptData(plaintext) {
  const key = await window.crypto.subtle.generateKey(
    { name: "AES-GCM", length: 256 },
    true,
    ["encrypt", "decrypt"]
  );
  
  const iv = window.crypto.getRandomValues(new Uint8Array(12));
  
  const ciphertext = await window.crypto.subtle.encrypt(
    { name: "AES-GCM", iv },
    key,
    plaintext
  );
  
  return { key, iv, ciphertext };
}

浏览器兼容性

Web Crypto API在现代浏览器中得到广泛支持,包括:

  • Chrome 37+
  • Firefox 34+
  • Safari 11+
  • Edge 12+
  • Opera 24+

总结

Web Crypto API为Web应用提供了强大的加密功能,使开发者能够在客户端实现各种安全功能,如数据加密、数字签名和安全通信等。然而,正确使用这些API需要深入理解密码学原理和安全最佳实践。对于大多数应用场景,建议考虑使用构建在这些底层API之上的高级安全库,除非你有特殊需求或具备足够的安全专业知识。