3、密码学基础回顾:对称加密、非对称加密、哈希函数、数字签名

在进入模型加密实操之前,必须先厘清密码学的四大核心支柱:对称加密、非对称加密、哈希函数与数字签名。这四者并非孤立的技术点,而是构成模型加密、密钥管理、完整性校验与身份认证体系的基石。模型文件在存储、传输、分发和推理过程中,往往需要组合运用这些原语——例如用对称加密保护模型权重的大体量数据,用非对称加密安全协商会话密钥,用哈希函数校验模型是否被篡改,再用数字签名确认模型发布者的身份。理解它们各自的数学原理、适用场景与安全边界,是后续设计模型加密方案的前提。

密码学四大核心原语在模型加密中的协同关系 对称加密 AES / ChaCha20 加密模型权重文件 高速、适合大数据量 密钥需安全分发 非对称加密 RSA / ECC 协商对称密钥 数字信封 / 密钥交换 慢,仅加密小数据 哈希函数 SHA-256 / BLAKE2 模型完整性校验 指纹 / 摘要 不可逆、无碰撞 数字签名 ECDSA / Ed25519 身份认证 + 防抵赖 私钥签名,公钥验签 模型发布者身份确认 模型加密典型链路:非对称加密协商密钥 → 对称加密加密模型 → 哈希校验完整性 → 数字签名确认来源

上图展示了四者在模型加密链路中的协同位置。对称加密负责“加密内容”,非对称加密负责“安全传钥”,哈希函数负责“完整性校验”,数字签名负责“来源认证”。下面逐一深入剖析。

3.1 对称加密:模型加密的主力引擎

核心原理

对称加密使用同一个密钥进行加密和解密。发送方用密钥K将明文模型权重加密为密文,接收方用同一个密钥K解密密文还原模型。其数学基础是混淆与扩散——通过多轮替代、置换、异或等操作,使密文与明文、密钥之间的关系变得极其复杂。主流算法包括AES(高级加密标准,分组长度128位,密钥长度128/192/256位)和ChaCha20(流密码,适合无硬件AES加速的环境)。在模型加密场景中,由于模型文件动辄数百MB甚至数GB,对称加密是唯一性能可接受的方案。

操作流程

  1. 生成随机密钥:使用安全的随机数生成器(如/dev/urandom)产生256位密钥。
  2. 选择工作模式:推荐AES-256-GCM,该模式同时提供加密和完整性校验(认证加密)。
  3. 加密模型文件:将模型权重文件按块读入,使用密钥加密,输出密文文件。
  4. 安全存储密钥:密钥不能与密文放在一起,应存入密钥管理服务(KMS)或硬件安全模块(HSM)。

案例拆解:加密一个PyTorch模型文件

假设有一个训练好的resnet50.pth文件(约100MB),需要加密后分发给内部团队。使用OpenSSL命令行工具进行AES-256-GCM加密:

# 生成随机密钥文件
openssl rand -base64 32 > model_key.bin

# 使用AES-256-GCM加密模型
openssl enc -aes-256-gcm -salt -pbkdf2 \
  -in resnet50.pth -out resnet50.pth.enc \
  -pass file:model_key.bin

# 解密时使用同一密钥
openssl enc -d -aes-256-gcm -pbkdf2 \
  -in resnet50.pth.enc -out resnet50_decrypted.pth \
  -pass file:model_key.bin

实测加密100MB文件耗时约1.2秒,解密约1.1秒,性能损耗可接受。关键约束是密钥文件必须通过安全通道(如企业内部KMS API)获取,不能随密文一起传输。

风险提示:GCM模式虽然提供认证加密,但使用时必须保证IV(初始化向量)唯一。重复使用同一IV会导致密钥流重用,攻击者可恢复明文。建议每次加密生成随机96位IV,并将其与密文拼接存储。

常见误区

  • 误区一:使用ECB模式加密模型。ECB模式相同明文块产生相同密文块,模型权重中大量重复模式会泄露结构信息。
  • 误区二:将密钥硬编码在代码中。攻击者反编译即可获取密钥,加密形同虚设。
  • 误区三:忽略密钥轮换。长期使用同一密钥加密多个模型版本,一旦泄露,所有历史版本全部暴露。

3.2 非对称加密:密钥分发的安全桥梁

核心原理

非对称加密使用一对密钥:公钥(公开)和私钥(保密)。用公钥加密的数据只能用对应的私钥解密,反之亦然。其数学基础是大整数分解难题(RSA)或椭圆曲线离散对数难题(ECC)。在模型加密中,非对称加密不直接加密模型文件(性能太慢),而是用于加密对称密钥——即“数字信封”机制:发送方用接收方的公钥加密对称密钥,接收方用私钥解密得到对称密钥,再用对称密钥解密模型。

判断方法:何时使用非对称加密

场景对称加密非对称加密
加密模型文件本体✅ 推荐,性能高❌ 不推荐,性能极低
加密对称密钥❌ 无法解决密钥分发✅ 推荐,安全分发
身份认证❌ 无法实现✅ 推荐,数字签名
密钥交换❌ 需要预先共享✅ 推荐,DH/ECDH

案例拆解:数字信封保护模型密钥

某AI公司需要向外部合作方分发加密模型。模型用AES-256-GCM加密,对称密钥K长度为32字节。使用接收方的RSA-2048公钥加密K:

# 生成RSA密钥对(接收方操作)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out rsa_private.pem
openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem

# 发送方:用接收方公钥加密对称密钥
openssl pkeyutl -encrypt -pubin -inkey rsa_public.pem \
  -in model_key.bin -out model_key.bin.enc

# 接收方:用私钥解密得到对称密钥
openssl pkeyutl -decrypt -inkey rsa_private.pem \
  -in model_key.bin.enc -out model_key_decrypted.bin

整个过程,对称密钥K以密文形式传输,即使被截获也无法解密。RSA-2048加密32字节数据耗时约5ms,完全可接受。实际部署中,建议使用ECC(如P-256曲线)替代RSA,密钥更短、速度更快、安全性更高。

经验提醒:混合加密是标准实践——对称加密负责数据,非对称加密负责密钥。TLS/HTTPS协议正是采用这一机制。在模型加密系统中,务必遵循此模式,不要试图用非对称加密直接加密大文件。

常见误区

  • 误区一:使用非对称加密直接加密模型文件。RSA-2048最多只能加密245字节数据,且速度慢数百倍。
  • 误区二:公钥未经验证。攻击者替换公钥即可实施中间人攻击,必须通过证书颁发机构(CA)或指纹验证公钥真实性。
  • 误区三:私钥权限管理松散。私钥应存储在HSM或安全隔离区,禁止明文导出。

3.3 哈希函数:模型完整性的“指纹”

核心原理

哈希函数将任意长度的数据映射为固定长度的摘要(如SHA-256输出256位)。其核心性质包括:单向性(由摘要无法反推原文)、抗碰撞性(难以找到两个不同输入产生相同摘要)、雪崩效应(输入微小变化导致摘要剧烈变化)。在模型加密中,哈希函数用于校验模型文件在传输或存储过程中是否被篡改。发布模型时,官方提供模型的SHA-256摘要;用户下载后计算摘要并比对,一致则说明文件完整。

操作流程:校验模型完整性

  1. 发布方计算模型文件的SHA-256摘要,并公布在官方网站或证书中。
  2. 用户下载模型文件后,在本地计算SHA-256摘要。
  3. 比对两个摘要是否完全一致。
  4. 若一致,确认模型未被篡改;若不一致,丢弃文件并重新下载。
# 计算模型文件的SHA-256摘要
sha256sum resnet50.pth
# 输出示例:a3f5c8d1e9b2...  resnet50.pth

# 计算加密后文件的摘要
sha256sum resnet50.pth.enc
# 输出示例:7d2e4f6a8b1c...  resnet50.pth.enc

案例拆解:检测模型投毒

某开源模型仓库发布了一个BERT模型,官方提供的SHA-256摘要为9f2c4e8a1b6d...。安全团队下载后计算实际摘要为3a7b1e5d9c2f...,两者不一致。进一步分析发现,模型文件被植入了后门——攻击者在权重中嵌入了恶意触发模式,使模型在特定输入下产生错误分类。由于哈希校验失败,该模型被及时拦截,避免了部署到生产环境。

关键要点:哈希校验必须在加密之前或解密之后进行。如果先加密再哈希,哈希值只能验证密文完整性,无法验证明文模型是否被篡改。正确做法是:发布方对明文模型计算哈希,然后加密模型,将哈希值与密文一起分发;接收方解密后计算哈希并比对。

常见误区

  • 误区一:使用MD5或SHA-1。这些算法已被证明存在碰撞攻击,应使用SHA-256或更高强度算法。
  • 误区二:只校验文件大小或修改时间。这些信息极易伪造,必须使用密码学哈希。
  • 误区三:将哈希值随密文一起传输且不加密。攻击者可以同时篡改密文和哈希值,应通过可信渠道(如HTTPS页面)获取哈希值。

3.4 数字签名:模型来源的“身份证”

核心原理

数字签名结合了哈希函数和非对称加密:发送方用私钥对模型文件的哈希值进行签名,接收方用发送方的公钥验证签名。签名成功则证明:(1)来源可信——消息确实来自持有私钥的发送方;(2)内容完整——消息在传输中未被篡改;(3)不可抵赖——发送方无法否认发送过该消息。在模型分发场景中,数字签名是防止模型被仿冒、确保供应链安全的关键手段。

操作流程:签名与验签

步骤发送方(模型发布者)接收方(模型使用者)
1计算模型文件的SHA-256哈希值H获取发布者的公钥(通过CA验证)
2用私钥对H进行签名,生成签名值S计算下载模型的SHA-256哈希值H'
3将模型文件、签名值S、公钥证书一起发布用公钥验证签名S是否匹配H'
4—验证通过则确认模型来源可信且完整
# 生成签名(发送方)
openssl dgst -sha256 -sign rsa_private.pem -out model.sig resnet50.pth

# 验证签名(接收方)
openssl dgst -sha256 -verify rsa_public.pem -signature model.sig resnet50.pth

案例拆解:模型供应链攻击防御

某金融机构计划部署一个开源的风险评分模型。攻击者创建了一个与官方模型同名的恶意模型,并伪造了下载页面。安全团队在部署前执行了以下验证流程:

  1. 从模型官方GitHub仓库获取发布者的公钥(通过HTTPS,并核对公钥指纹)。
  2. 下载模型文件和对应的签名文件model.sig。
  3. 计算模型文件的SHA-256哈希值。
  4. 使用公钥验证签名,结果验证失败。
  5. 进一步检查发现,该模型来自仿冒网站,实际文件被植入了恶意代码。

由于数字签名验证失败,该模型被拒绝部署,避免了潜在的数据泄露风险。整个过程耗时不到1秒,却阻止了一次严重的供应链攻击。

风险提示:数字签名只能证明“持有私钥的人签署了该文件”,但私钥本身可能被泄露。如果发布者的私钥被盗,攻击者可以签署恶意模型。因此,私钥必须存储在HSM中,并实施严格的访问控制和审计日志。

常见误区

  • 误区一:将数字签名与加密混淆。签名不保护内容机密性,只保护完整性和来源。
  • 误区二:使用自签名证书而不验证公钥指纹。自签名证书无法建立信任链,必须通过CA或线下方式验证公钥真实性。
  • 误区三:签名过期后不更新。密钥应定期轮换,旧密钥应妥善销毁。

3.5 四种原语的协同与选型总结

在实际的模型加密系统中,四种原语各司其职、缺一不可。对称加密保证模型机密性,非对称加密解决密钥分发难题,哈希函数确保完整性,数字签名确认来源可信。设计模型加密方案时,应遵循以下选型原则:

  • 加密模型本体:使用AES-256-GCM,兼顾性能与安全。
  • 密钥交换:使用ECDH或RSA-OAEP,建立安全信道。
  • 完整性校验:使用SHA-256或BLAKE2b,配合HMAC防止篡改。
  • 身份认证:使用Ed25519或ECDSA,确保模型来源可信。

总结复盘:密码学不是“用哪个算法”的问题,而是“如何组合”的问题。一个健壮的模型加密方案,必然是四种原语的有机整合。建议在方案设计初期就明确各原语的职责边界,避免“一把钥匙开所有锁”的简化思维。后续章节将在此基础上,深入探讨模型加密的具体实现与密钥管理策略。