./security_model.md

我们如何保护你的数据

不是承诺,是数学。这个页面详细解释 PingVaults 的零知识架构,以及为什么即使我们想「作恶」也做不到。

// 核心承诺

你不需要信任我们。

加密发生在你的浏览器里,密钥从不离开你的设备。

我们的服务器只存储它永远无法解开的密文。

就算我们明天跑路,你的数据在 Arweave 上永久存在。

就算我们想作恶——我们能拿到的也只是一堆乱码。

这不是承诺,这是数学。

// data_flow[]

数据流向(你的答案去了哪里)

1
你输入密语答案浏览器内

答案只存在于浏览器内存中,任何地方都不会记录或缓存。

2
normalizeInput() 标准化处理浏览器内

去除空格、统一大小写、全角转半角——确保「Alice」和「alice」派生出相同密钥。完全在浏览器内完成。

3
PBKDF2-SHA256 派生密钥(600,000 次迭代)浏览器内

答案通过 PBKDF2 和随机 salt 派生出 AES-256 密钥。整个过程在浏览器内,密钥材料从不离开。

4
AES-256-GCM 加密服务器端

使用派生密钥加密你的资产线索,生成密文。加密后,答案和密钥在内存中丢弃。

5
密文上传至服务器 + Arweave服务器端

服务器只收到密文、salt、iv 和密钥结构(类型和问题题面)。答案永远不在请求体里。

6
解密时,答案重新在浏览器内派生密钥浏览器内

读取时,密文从 Arweave 下载,在浏览器内用你重新输入的答案解密。服务器全程不参与解密。

// server_access_table[]

服务器能看到什么 / 不能看到什么

✓ 服务器可以看到
✗ 服务器永远看不到
加密密文(乱码,无法解读)
你的密语答案
随机 Salt 和 IV(无密钥没有意义)
派生的 AES 密钥
密钥类型(name, custom_question…)
资产线索明文
自定义问题的题面(如「你最喜欢的地方?」)
自定义问题的答案
你的邮箱(用于登录验证)
与解密密钥相关的任何内容

// open_source[]

开源策略

📂 pingvaults-crypto ↗

加密核心完全开源(MIT),包含完整测试向量和离线解密器 HTML。任何人可以独立审计、运行测试、验证没有后门。

MIT · crypto.ts · test vectors · offline decryptors

🔒 主仓库(商业闭源)

UI、Inactivity Switch 引擎、API 路由等业务代码为商业专有代码。即使这部分被攻破,服务器也只持有无法解密的密文。

UI · API · Inactivity Switch · DynamoDB

// faq[]

FAQ

PingVaults 能偷看我的资产线索吗?+
不能。服务器收到的是 AES-256-GCM 加密后的密文,没有你的答案就永远无法解开。加密核心代码完全开源,任何人可以审计确认没有后门。
如果 PingVaults 跑路了,我的数据还能访问吗?+
可以。所有加密数据永久存储在 Arweave 区块链上,通过 TxID 可从任意 Arweave 网关(arweave.net、ar-io.dev 等)访问,不依赖我们的服务器。离线解密器 HTML 文件也完全脱离平台工作。
离线解密器是否依赖 PingVaults 网站?+
完全不依赖。离线解密器是一个单独的 HTML 文件,包含所有加解密逻辑,没有任何外部依赖。断网状态下可以正常工作。你可以现在就下载并验证它。
你们会不会在 JavaScript 里偷偷发送我的答案?+
浏览器响应头里有 Content-Security-Policy,限制本页面 JS 只能向 self、uploader.irys.xyz、arweave.net 等有限地址发请求。任何向未授权地址的 fetch() 会被浏览器直接拦截。你可以在 DevTools → Network → Response Headers 里亲自查看这个限制。
加密算法足够安全吗?+
使用 AES-256-GCM(带认证的对称加密,业界标准)和 PBKDF2-SHA256(600,000 次迭代,符合 OWASP 2023 建议)。Salt 和 IV 每次加密都重新随机生成。即使攻击者获得密文和 salt,暴力破解 256 位密钥在现有计算能力下不可行。

架构透明,代码可审计,数据永久存储。