SuperAPI AI 工具集

cryptokit

安全与审计

查看项目

更新于 10-16 09:11

技能介绍

CryptoKit 是 Apple 提供的 Swift 原生密码学 API,覆盖哈希、消息认证、对称加密、公钥签名、密钥协商和 Secure Enclave 密钥存储,适用于 iOS 13 及以上系统。文档建议在面向 Swift 6.3+ 的新代码中优先使用 CryptoKit,而不是 CommonCrypto 或原始 Security 框架 API。

用途

CryptoKit 用于在 Swift 应用中执行常见密码学操作,包括数据完整性校验、消息认证、加密解密、数字签名、密钥协商以及硬件级密钥保护。

主要能力

哈希:提供 SHA256、SHA384、SHA512,均遵循 HashFunction 协议,支持一次性哈希与增量哈希。摘要默认使用常量时间比较,可直接用 == 比较以抵御时序攻击。

HMAC:使用对称密钥和哈希函数生成消息认证码,支持一次性计算、验证和增量计算。验证使用 isValidAuthenticationCode,内部为常量时间比较。

对称加密:提供 AES-GCM 和 ChaChaPoly 两种认证加密算法,均生成包含 nonce、密文和认证标签的 sealed box。AES-GCM 是默认选择,在 Apple 芯片上有硬件加速;ChaChaPoly 适用于无 AES 硬件加速或需要与 ChaCha20-Poly1305 协议(如 TLS、WireGuard)互操作的场景。两者均支持附加认证数据(AAD),AAD 会被认证但不加密。SymmetricKey 支持 .bits128、.bits192、.bits256 三种尺寸,推荐默认使用 .bits256。

公钥签名:支持 NIST 曲线 P256、P384、P521 的 ECDSA 签名,以及 Curve25519 的 Ed25519 签名。NIST 密钥支持 DER、PEM、X9.63 和 raw 表示;Curve25519 仅支持 rawRepresentation。默认推荐 P256,与 Ed25519 协议互操作时使用 Curve25519。

密钥协商:通过 ECDH 让双方从公私钥对派生共享对称密钥,支持 P256 和 Curve25519。SharedSecret 不能直接作为 SymmetricKey 使用,必须通过 HKDF(推荐)或 ANSI X9.63 派生密钥,并始终提供非空的 sharedInfo 字符串以绑定协议上下文。

Secure Enclave:提供硬件支持的密钥存储,私钥不离开硬件。仅支持 P256 签名和密钥协商,在支持的硬件上还提供后量子密钥类型(MLKEM、MLDSA)。使用前需检查 SecureEnclave.isAvailable。支持通过 SecAccessControlCreateWithFlags 要求生物认证,dataRepresentation 为加密 blob,只能由同一设备的 Secure Enclave 恢复,应存入 Keychain。

使用方式

文档以 Swift 代码示例展示各项操作,包括导入 CryptoKit、创建密钥、加密解密、签名验证、密钥协商与派生、Secure Enclave 密钥创建与持久化等。所有代码示例均保留原始形式。

适用场景

适用于需要在 iOS 应用中实现数据哈希校验、消息认证、对称加密、数字签名、密钥协商以及硬件级密钥保护的场景。

限制

CryptoKit 适用于 iOS 13 及以上系统。Secure Enclave 仅支持 P256 签名和密钥协商,Curve25519 不支持 Secure Enclave。Curve25519 密钥仅支持 rawRepresentation,不支持 DER/PEM/X9.63。Insecure.MD5 和 Insecure.SHA1 仅用于遗留兼容(校验和验证、协议互操作),不得用于新的安全敏感操作。文档还列出常见错误,包括直接使用共享密钥、重用 nonce、忽略认证标签验证、使用不安全哈希、将对称密钥存入 UserDefaults、未检查 Secure Enclave 可用性,并提供审查清单,涵盖加密出口合规(ITSAppUsesNonExemptEncryption)等事项。