You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止向零访问加密系统提交未加密数据?SvelteKit项目求助

解决方案:在零访问加密前提下让服务器验证数据已加密(抗量子+密钥不共享)

针对你的问题,核心是要让服务器在不接触客户端对称密钥的前提下,判断接收的数据是加密后的密文而非明文,同时满足抗量子要求,以下是几个可落地的方案:

方案1:抗量子AEAD算法+固定格式校验

选用抗量子的认证加密算法(AEAD),比如Ascon(NIST轻量级抗量子标准,能抵御Grover和Shor算法),客户端流程:

  • 用对称密钥+Ascon加密数据,生成包含nonce + 密文 + 认证标签的标准结构密文
  • 给密文添加固定前缀(比如"AQ-CRYPT-"),确保服务器能快速识别合法加密格式
  • 将完整加密数据(前缀+Ascon密文)发送给服务器

服务器侧校验逻辑:

  1. 检查数据是否包含约定的固定前缀,没有则直接拒绝请求
  2. 校验前缀后的内容长度是否符合Ascon的结构要求(Ascon-128的nonce是16字节,标签是16字节,密文长度=明文长度,所以整体长度=前缀长度+16+明文长度+16)
  3. 拒绝不符合格式的请求,不执行写入/修改操作

这个方案的核心是:攻击者无法构造符合Ascon格式的明文数据,因为明文不会自带nonce和认证标签结构,而服务器不需要密钥就能完成格式校验,完全满足密钥不共享和抗量子要求。

方案2:抗量子HMAC+熵检测双校验

结合抗量子哈希算法和熵检测,流程如下:
客户端侧:

  • 用对称密钥加密数据得到密文
  • 用SHA-3-256(抗量子,能抵御Grover算法)作为哈希函数,计算密文的HMAC值(用客户端对称密钥作为HMAC密钥)
  • 将密文、HMAC值(十六进制字符串)一起封装进请求体发送给服务器

服务器侧校验逻辑:

  1. 检查请求体是否包含ciphertext和hmac字段,且hmac是64位十六进制字符串(SHA-3-256的输出长度)
  2. 计算ciphertext的香农熵,若熵值低于7比特/字节(明文数据通常熵值在4-6之间,加密后的密文熵值接近8),直接拒绝
  3. 拒绝不符合以上条件的请求

这个方案的好处是:即使攻击者伪造高熵的明文数据,也无法生成正确的HMAC值(因为没有客户端对称密钥),虽然服务器无法验证HMAC的有效性,但可以通过HMAC格式+熵值双重过滤掉绝大多数明文请求。

方案3:抗量子KEM绑定加密证明

如果需要更强的验证力度,可以结合CRYSTALS-Kyber(NIST标准抗量子密钥交换算法):

  1. 服务器提前生成CRYSTALS-Kyber密钥对,将公钥分发给所有客户端
  2. 客户端每次加密数据时,生成一个随机数R,用自身对称密钥加密R得到R_enc,再用服务器公钥加密R得到R_wrapped
  3. 将密文、R_enc、R_wrapped一起发送给服务器
  4. 服务器用私钥解密R_wrapped得到R,然后检查R_enc是否符合抗量子对称加密算法(比如Ascon)的格式——这一步能证明客户端确实持有对称密钥,且发送的密文大概率是用该密钥加密的

这个方案验证力度最强,但实现复杂度稍高,适合对安全性要求极高的场景。

关键注意事项

  • 所有API请求必须强制使用约定的格式(比如JSON结构),服务器先校验格式合法性,再处理业务逻辑
  • 对于高熵明文(比如随机二进制文件),熵检测会误判,此时必须依赖格式校验(方案1的前缀+结构,或方案2的HMAC格式)来避免误拒绝
  • 所有加密算法必须选用NIST认可的抗量子标准,避免使用自定义算法

内容的提问来源于stack exchange,提问作者standard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:53:22