# 敏感的东西， 要讲清楚。

> 全卡卡如何加密你的卡片与账户资料：数据流、密钥层级、网络连接清单、谁能看到什么、可自行验证的方法，以及尚未完成的安全工作。

Source: https://quancard.app/security/

全卡卡保存的是银行卡和账户资料，你有理由怀疑它。这一页按实际代码写明：数据怎么加密、钥匙在哪、会连到哪里、谁能看到什么，以及我们还没做到的部分。

## 不需要账号

本地使用不注册、不登录全卡卡账号。我们没有你的邮箱，也没有你的保险库。

## 默认不联网

未开启同步时，App 不发起任何网络请求。本地模式下开飞行模式，全部功能照常。

## 我们没有存数据的服务器

同步只去两个地方：你自己的 iCloud，或你自己部署的服务器。全卡卡团队收不到你的卡片。

## 和 Apple Wallet 有什么不同

Wallet 很好，全卡卡不是它的替代品。需要付款，请继续使用 Wallet；两者可以并用。

| 需求 | Apple Wallet | 全卡卡 |
| --- | --- | --- |
| 付款 | 支持（受支持的发卡机构） | 不支持，也不会支持 |
| 不支持 Apple Pay、已注销或只为收藏的卡 | 可存卡号用于自动填充，但不能付款或展示收藏 | 主要用途：卡面、状态、备注一并保存 |
| 银行账户、IBAN、SWIFT / BIC 等转账资料 | 不是 Wallet 的设计用途 | 分账户管理，支持全球多种路由标识 |
| 自定义卡面、标签、排序、地区分组 | 有限 | 支持 |
| 数据位置 | Apple 设备与 iCloud | 本机；可选你的 iCloud 或你自己的服务器 |
| 导出与迁移 | 没有导出文件，随 Apple 设备与 iCloud 迁移 | 口令加密的 .qvault 备份，格式测试向量公开 |

## 数据从哪里来， 到哪里去。

明文只在你解锁后、在 App 的内存里出现。写入磁盘或离开手机之前，它已经是密文。

- 本机存储默认: SQLite 中只有逐条密文；卡面照片单独加密成文件。

- 你的 iCloud可选: CloudKit 私有数据库里只有 App 加密后的记录。

- 你的服务器可选: 自己部署的 QuanCard Server 只保存不透明的加密版本。

- 全卡卡团队的服务器: 不存在。App 没有统计、广告或崩溃上报 SDK，也没有把保险库数据传给我们的通道。

## 一层钥匙， 锁住下一层。

没有自创算法，全部使用 Apple CryptoKit、Secure Enclave 和 libsodium 提供的标准实现。

- 01: Secure Enclave 设备密钥: P-256，生成在手机的安全芯片里、无法导出。使用它需要 Face ID / 触控 ID 或设备密码，且仅在设置了锁屏密码的本机有效。

- 02: 保险库根密钥（VRK）: 随机生成的 256 位密钥，只存在这台手机上，不同步、不进入 iCloud 钥匙串，也不从设备 ID 或卡号推导。

- 03: 每条记录的数据密钥（DEK）: 每张卡片、每个账户各有一把随机 256 位密钥，互不复用。

- 04: 卡片、账户、备注与照片的密文: 加密时绑定记录 ID 与类型。篡改、错钥匙或把一条记录搬到另一条，都会被拒绝。

### 加密备份 .qvault

由你设置的备份口令经 Argon2id（256 MiB 内存、3 轮）派生密钥，再用 AES-256-GCM 加密。口令越长越难被离线猜测。

### iCloud 同步密钥

另一把随机 256 位密钥，通过 Apple 端到端加密的 iCloud 钥匙串传给你的其他设备；根密钥 VRK 不随之同步。恢复依赖 Apple 的钥匙串恢复机制，丢失全部受信任设备时可能无法恢复。

### 自建服务配对

在网页生成二维码，用 iPhone 扫码配对。二维码里是保险库的长期密钥，由浏览器在本地生成，正常运行的服务器看不到。

## 谁能读到你的资料

每一格写的是对方实际能拿到什么。绿色表示读不到内容；琥珀色表示能看到，但只是数量、时间这类信息，不是卡片内容。

- 读不到内容

- 能看到元数据（不是卡片内容）

- 你自己

| 数据 | 你（已解锁） | 拿到你锁定手机的人 | Apple（开启 iCloud 时） | 你的服务器（自建时） | 全卡卡团队 |
| --- | --- | --- | --- | --- | --- |
| 卡号、有效期、CVC、账户号 | 能查看 | 无法解锁 | 只有密文 | 只有密文 | 接触不到 |
| 备注、标签、卡面照片 | 能查看 | 无法解锁 | 只有密文 | 只有密文 | 接触不到 |
| 条目数量、数据大小、修改时间 | 能查看 | 取证时可能看到 | 能看到 | 能看到 | 接触不到 |
| 账户身份（Apple 账户 / 服务器用户名、设备名） | 能查看 | 无法解锁 | 能看到 | 能看到 | 接触不到 |

- 「拿到锁定手机的人」如果知道你的锁屏密码，就能像你一样解锁。请使用足够强的设备密码。

- 「你的服务器」一栏只针对 iPhone App。网页保险库的代码由服务器下发，被入侵的服务器可以换掉网页代码，在你下次输入密码或生成配对二维码时窃取数据；它也可以扣留更新或返回旧版本，iPhone 只能检测其中一部分。不信任某台主机时，请只用 iPhone App。

- 全卡卡团队一栏是「接触不到」，因为数据根本不经过我们，而不是因为我们承诺不看。

## App 会连到哪里

这是 App 自身发起网络请求的完整清单。除此之外的连接，都应视为 bug，欢迎报告。

- 本地模式（默认）: 无。

- 开启 iCloud 同步后: Apple CloudKit，你自己 Apple 账户下的私有数据库。

- 连接自建服务后: 你填写的 HTTPS 地址。连接前需确认，拒绝跳转到其他地址。

- TestFlight 测试期间: 崩溃日志和你主动提交的反馈（含截图）由 Apple 收集并转给我们。反馈截图里请不要出现真实资料。

第三方库只有两个，均固定版本：GRDB（加密数据库存取）和 swift-sodium（备份口令的 Argon2id）。App 隐私清单声明：不收集数据、不追踪。

## CVC 安全码， 我们这样处理。

这是大家最关心的问题。我们的做法和 1Password、Bitwarden 一致：可以保存，与卡号同等加密，随同步与备份一起走。不同的是，我们不运营存数据的服务器。

| 产品 | 能否保存 CVC | 怎么保护 | 存在哪里 |
| --- | --- | --- | --- |
| 1Password | 能，信用卡条目自带「验证码」字段 | 与条目其他内容一起端到端加密 | 随保险库同步到 1Password 服务器（密文） |
| Bitwarden | 能，卡片条目的「安全码」字段 | 与卡号等字段一样加密，开源客户端可查 | 随保险库同步到 Bitwarden 或自建服务器（密文） |
| Google Chrome | 能，付款时询问是否保存 | 可单独关闭「保存安全码」，并一键删除 | 本机或 Google Wallet |
| Apple Safari 自动填充 / iCloud 钥匙串 | 不保存 | 每次付款手动输入 | — |
| 全卡卡 | 能，可选字段；默认完全隐藏，查看需授权 | 与卡号同等，逐条 AES-256-GCM 加密 | 本机；开启同步时进入你自己的 iCloud 或你部署的服务器（密文），全卡卡团队不经手 |

### 收藏用途无需填写

已注销的卡、收藏卡用不到 CVC。只有打算用这张卡线上付款时，才需要填写。

### 默认完全隐藏

不像卡号会显示尾号，CVC 一位都不显示；查看或复制都要经过 Face ID / 设备密码。

### 随同步与备份保存

开启同步或导出加密备份时一并包含，换手机也不会丢。若你更认同 Apple 的做法，留空即可。

### 随时删除

清空字段即删除。注意同步历史中的旧版本密文仍会保留，见「已知限制」。

### 如果你有顾虑

留空即可：收藏、整理和查看卡片都用不到它，需要付款时再从实体卡上查看。

同类产品的做法依据各自官方文档或开源代码，核验于 2026-10-08，之后可能变化： [1Password](https://support.1password.com/item-categories/)[Bitwarden](https://github.com/bitwarden/clients/blob/main/libs/common/src/vault/models/domain/card.ts)[Google Chrome](https://support.google.com/chrome/answer/16580822)[Apple Safari](https://www.apple.com/legal/privacy/data/en/icloud-keychain/)

产品名称与图标归各自权利人所有，仅用于识别，不代表合作或背书。

## 不用信我们， 自己验证。

以下检查不需要专业工具。请用虚构资料测试，不要拿真实卡号做实验。

- 01: 开飞行模式: 本地模式下添加、查看、搜索、排序、导出备份都应正常。需要网络才能用的，只有你主动开启的同步。

- 02: 看「App 隐私报告」: iPhone 设置 › 隐私与安全性 › App 隐私报告。打开后使用一段时间：未开启同步时，不应出现全卡卡自己发起的连接；如果看到，请告诉我们。

- 03: 核对备份与同步协议: 加密备份和同步协议的测试向量公开在 GitHub，可以用自己的实现验证加密格式。

- 04: 读服务端源码: 同步服务与网页保险库以 AGPL-3.0 开源，附威胁模型。你可以自己部署，也可以审计服务器到底存了什么。

[测试向量](https://github.com/zoolapp/quancard-server/tree/main/vectors)[同步协议](https://github.com/zoolapp/quancard-server/tree/main/docs/protocol)[威胁模型](https://github.com/zoolapp/quancard-server/blob/main/THREAT_MODEL.md)[服务端源码](https://github.com/zoolapp/quancard-server)

## 我们还没做到的

下面这些不是「将来会自动变好」的免责声明，而是你现在做决定前应该知道的事实。

### 尚无第三方审计

iOS 端有 400 余项自动化测试，服务端仓库也附带测试，但测试不等于审计，也不能证明没有漏洞。

### iPhone App 闭源

开源的是服务端和网页保险库。App 的行为目前只能通过本页说明、协议测试向量和你自己的观察来判断。

### 硬件路径尚待真机验收

Secure Enclave、Face ID 和系统快照遮罩在模拟器中以软件替代测试，真机验收仍在进行。

### 解锁后的 App 能读取你的资料

这是保险库的本质。越狱、恶意描述文件或已被控制的设备，可以在解锁时读取内存。

### 截图无法完全禁止

App 切到后台时会遮罩并清除显露状态，但 iOS 不允许 App 完全阻止截图或录屏。

### 配对二维码是长期凭据

二维码包含整个保险库的长期密钥，10 分钟时效只限制配对码本身。不要截图或拍照保存；一旦泄露，撤销设备也收不回，需要新建保险库再迁移。

### 剪贴板有窗口期

复制仅限本机剪贴板、45 秒后过期；在此之前，其他 App 仍可能读取。

### 删除依赖「销毁钥匙」

删除通过销毁密钥让密文失效，无法保证立即擦除闪存，也无法回收已经导出的备份。同步历史不会压缩：删除后，旧版本密文仍留在 iCloud 或服务器上，持有同步密钥的设备仍能解密。

## 「上架了苹果，是不是就安全？」

不是。我们不会用 App Store 或 TestFlight 审核来证明安全。

### 苹果审核会做的

- 扫描已知恶意软件

- 人工检查功能描述、截图与权限是否合理

- 要求隐私政策和适当的数据保护措施

### 苹果审核不会做的

- 审计加密实现是否正确

- 证明 App 没有漏洞

- 核实开发者自行申报的隐私标签

### 合规边界

- 全卡卡不发卡、不连接银行、不处理资金、不提供支付，也不协助绕过 KYC 或地区限制。

- 使用加密的 App 须做出口合规申报，由发行主体 ZOOL LLC 负责。

## 透明度路线

信任靠持续可查的记录，而不是一次声明。每完成一项，这里会更新日期与证据。

- 已完成: 服务端与网页保险库开源（AGPL-3.0）

- 已完成: 备份与同步协议测试向量公开（Apache-2.0）

- 已完成: 公开安全说明（本页），写明限制与未验证项

- 进行中: 真机验收：Secure Enclave、Face ID、锁屏与后台快照

- 进行中: iCloud 双设备实际同步与恢复验收

- 计划中: 每个版本公开对应的源码提交与测试摘要

- 计划中: 独立第三方安全审计，公开机构、范围、版本与未关闭问题

## 常见疑问

### 全卡卡是用 AI 写的吗？这样安全吗？

开发中使用了 AI 辅助编码。怎么写出来的代码都不能当安全证明：手写不代表安全，AI 辅助也不代表不安全。能说明问题的是设计是否公开、实现是否经得起检查。所以本页给出数据流、密钥方案、网络清单和你可以自己做的验证，同时写明我们还没有第三方审计。

### 你们能看到我的卡吗？

不能，而且不是因为我们承诺不看：数据从不经过全卡卡的服务器，我们也没有这样的服务器。开启 iCloud 时，数据以密文存放在你自己的 Apple 账户里；自建时，存放在你的服务器上。

### 为什么 iPhone App 不开源？

App 是商业产品。我们开源了服务端、网页保险库、同步协议和测试向量，让「服务器存了什么」可以被完全审计。App 内部实现目前以本页说明和第三方审计计划作为补充。

### 手机丢了怎么办？

在 iOS 本身未被攻破的前提下，没有你的 Face ID 或锁屏密码，拿到手机的人无法解锁保险库；数据库里的记录内容也是密文（条目数、版本号等元数据除外）。要在新手机上恢复，需要一份加密备份（及其口令），或已开启的 iCloud 同步。

### 忘记备份口令怎么办？

无法找回。我们不知道你的口令，也没有后门。这是零知识设计的代价，请把口令存放在可靠的地方。

### CVC 也会被保存和同步吗？

会，做法与 1Password、Bitwarden 一致：CVC 默认完全隐藏，查看需要授权，与卡号同等加密；开启同步或导出备份时一并包含。收藏用途无需填写；如果你更认同 Apple 不保存安全码的做法，留空即可。详见上方「CVC 安全码」一节。

### 官网会收集什么？

官网使用 Google Analytics 做不含个人身份的页面访问统计（会设置 cookie；不开启广告功能，尊重浏览器的 Global Privacy Control）；预约上线时会保存你提交的邮箱。官网不提供卡号录入或保险库解密，也与 App 中的数据无关。

### 发现漏洞怎么报告？

服务端与网页问题请通过 GitHub 的私密漏洞报告提交；App 问题请发邮件到 support@quancard.app，标题注明「安全」。请只使用虚构数据，不要附带真实卡号、密码或备份文件。

## 还有疑问？

安全上的质疑都是合理的。欢迎直接问我们，或在 GitHub 上看代码。
