隐私与加密说明

这一页写的是实际做法,不是承诺姿态。防不住的事情也写在里面。

和教师工具箱不是一套规则

教师工具箱的承诺是"教学数据只存在你这台设备上,不上服务器"。 这个站不一样:要把填写者的回答收回来,回答就必须经过服务器。 所以它单独立了这一页,也单独部署,两边互不牵扯。

加密是怎么做的

  • 发布问卷时,在发卷人的浏览器里生成一对 ECDH P-256 密钥。公钥进链接和二维码,私钥只留在发卷人手里。
  • 填写者提交时,浏览器生成一次性密钥对,与公钥协商出会话密钥(HKDF-SHA256),用 AES-GCM-256 加密整份回答。
  • 服务器收到的是 一次性公钥 + 初始向量 + 密文 三段。它不具备解密能力 —— 这不是"没实现",是设计如此。
  • 发卷人用管理链接打开汇总页,在自己浏览器里解密、统计、出图。
  • 密文按 512 字节整数倍补齐,避免从长度上看出"这个人写了一大段"还是"全部跳过"。
  • 密钥和令牌都放在网址 # 后面。URL fragment 浏览器不会发给服务器,也不进任何访问日志。

为什么用非对称而不是"链接里带一把对称密钥":填写链接是要投影、发群的, 拿到链接的人就是拿到密钥的人。对称方案下,班上任何一个填写者都能解开全班的回答 —— 而这恰恰是问卷里最该防的人。

端到端加密防不住什么

必须说清楚:加密用的 JS 是这个服务器发给浏览器的。 服务器如果被攻破,可以发一份偷密钥的 JS 出去。所以这套东西防得住 "数据库被偷、云厂商窥视、传输被截",防不住"站点本身被攻陷"

  • 它也防不住填写者自己知道自己填了什么。
  • 管理链接就是钥匙,转发给谁等于把数据给谁。
  • 私钥丢了,回答就永久解不开,没有找回通道 —— 这是端到端的定义,不是故障。

缓解手段是严格 CSP、第三方库全部本地托管、代码开源可比对。但不会写成"绝对安全"。

服务器上到底存了什么

  • 存:问卷标题、说明、题目(填写者本来就要看到)、公钥、密文、提交时间、到期时间。
  • 存哈希:管理令牌、填写口令。原值从不上服务器。
  • 不存:任何可解密的回答内容、填写者的账号或身份、原始 IP。
  • 限流需要认人,所以 IP 只存掺了当天日期的哈希,隔天就变,攒不出"某个 IP 一周内干了什么"。
  • 服务器仍然看得到提交时间和次数 —— 这是元数据,加密堵不住,写在这里让你知道。

保留多久

  • 普通问卷:发卷人可选 7 / 30 / 90 天。只收姓名、或只收手机号,也按这一档。
  • 收集的信息足以定位到具体的人时:最长 7 天,硬上限,不给"我知道风险继续 90 天"的口子。判定办法是给每种标识字段一个识别力分数,按种类去重后加起来,到 2 分就收紧:
    • 姓名 1 分、手机号 1 分 —— 单独一项在班级范围里定位不到具体的人,凑成两项就可以
    • 身份证号 2 分 —— 它本身就是唯一标识个人的号码,单独一项的识别力不比"姓名 + 手机号"低,所以只收身份证号也照样收紧
  • 种类去重:同一份问卷问两次手机号(本人 + 家长)仍然只算一种。
  • 中途达到收紧线,保留期会自动收紧并明确告知;之后再删掉一种也不会自动涨回去。
  • 改保留期只影响之后的提交。已收到的回答按各自提交时算好的时间删 —— 追溯延长等于偷偷多留,填写者当初看到的承诺不是那个。缩短则立即生效。
  • 到期是物理删除,不做备份、无法恢复。读取时也一律过滤已过期的行,所以即便清理任务没跑,过期数据也不会被发出去。

脱敏做到哪一层

脱敏和加密解决的是两件不同的事:加密防服务器那一侧,脱敏防发卷人自己这一侧——汇总页投在教室大屏上、截图发群里、CSV 导出后到处转发。

  • 姓名 张*、手机号 138****5678、身份证 3301**********1234
  • 汇总和明细默认脱敏,要看完整值得逐行点开,没有全局开关。
  • 投影/全屏模式下没有"显示完整"的入口,打印出来的也永远是脱敏值。
  • CSV 默认脱敏;导出完整值必须二次确认,文件名自动带"含完整个人信息"。
  • 脱敏、必填收集用途、给填写者的"会收集可识别信息"告知,都是一个字段就触发 —— 识别力分数只决定保留期这一项。
  • 标识字段不进统计图 —— 它们是标识,不是统计维度。

给填写者的一句话

问卷里如果出现姓名、手机号或身份证号,页面顶部会明确写着"这份问卷会收集可识别到你本人的信息", 每一栏还会写明发卷人填的收集用途。你可以据此决定填不填。