Zisty 技术说明:加密与隐私

更新日期:2026 年 11 月 2 日 · 对应 iOS 版 5.8.x · English below

这份说明写给懂一点技术、想知道"凭什么相信 Zisty"的人。它把加密设计、服务器能看到什么、数据存在哪里、还有哪些做不到的地方一次讲清楚。每一项都按当前代码核对过;看不到的地方我们直说看不到,做不到的地方也直说做不到。

1. 你需要信任什么 · 2. 身份 · 3. 加好友与核验 · 4. 一对一消息 · 5. 信箱与外层封装 · 6. 群聊 · 7. 图片、视频和文件 · 8. 通话 · 9. 附近直连 · 10. 手机上的数据 · 11. 文件库 · 12. 换手机、恢复包、远程擦除 · 13. 服务器知道什么 · 14. 网络连接 · 15. 算法一览 · 16. 已知局限 · 17. 怎么核对

1. 你需要信任什么

2. 身份

第一次打开时,手机在本机生成三把长期密钥:

私钥存在系统钥匙串,属性为 AfterFirstUnlockThisDeviceOnly:不进 iCloud 钥匙串,不随备份到别的设备。

你的指纹 = SHA-256(Ed25519 公钥) 的前 128 位,用 32 个十六进制字符表示。指纹就是你在 Zisty 里的全部身份:没有账号、手机号、邮箱,也不读通讯录。

任何名片都带着这三把公钥。收到名片时会检查指纹是否等于其签名公钥的哈希,对不上的名片一律丢弃。

3. 加好友与核验

4. 一对一消息

4.1 配对密钥

两人之间的静态配对密钥:

HKDF-SHA256(X25519(我的私钥, 对方公钥), salt = 两个指纹排序后拼接, info = "projecty-pairwise-v1"),输出 32 字节。

它是双棘轮的起点,也是外层封装、信箱令牌和附近直连令牌的来源(见第 5、9 节)。

4.2 双棘轮

消息内容走 Signal 式的双棘轮(Double Ratchet)。和 Signal 不同的是没有预密钥服务器:

各个 KDF:

乱序和重放:

用过的消息密钥立即删除。会话状态以加密文件保存在本机(见第 10 节)。

4.3 抗量子

双方都是 3.1 以上的 iOS 版时,会话是 X25519 + ML-KEM-768 的混合会话:

这样,即使将来有人用量子计算机破解了 X25519,也只能拿到过去录下的流量,解不开里面的内容。会话被攻破后能自行恢复安全,这一点在量子攻击者面前同样成立。

消息头的版本号也受认证保护:把 v4 降级成 v3、或把 v3 降级成经典 v2 的消息都会被拒收。

4.4 前向保密从什么时候开始

对方第一次回复之后,每把消息密钥都来自双方的临时密钥,用完即删。这之后,即使有人拿到双方的长期私钥,也解不开之前的消息。

在对方第一次回复之前,你发出的消息只由对方的静态 X25519 和 ML-KEM 密钥保护。所以如果对方的长期私钥日后泄露,这几条消息就能被解开。这一点和不用预密钥的设计取舍有关,我们如实写在这里。

4.5 哪些内容走棘轮

对方是抗量子版本时,除下面这几类外,一切加密内容都走棘轮:消息、动态、名片、回执、通话信令等。

每个信封的密文都附有发送方的 Ed25519 签名。

5. 信箱与外层封装

两个人不在附近时,消息经信箱服务器中转。

外层封装用的是静态配对密钥,本身没有前向保密。它只用来藏住信封的元数据,真正的内容在里面一层,由棘轮保护。

6. 群聊

群聊没有逐条的棘轮。同一把群密钥有效期间的所有群消息,用这把密钥都能解开。所以群聊的前向保密是以天计的,不像一对一那样逐条。

7. 图片、视频和文件

8. 语音和视频通话

9. 附近直连

直连链路本身没有再套 TLS,信封也不做第 5 节的外层封装。同一网络里能接入这条连接的设备,能看到:
· 双方的指纹;
· 握手名片里的昵称;
· 消息的种类和大小。
它看不到内容。

10. 手机上的数据

11. 文件库

12. 换手机、恢复包、远程擦除

13. 服务器知道什么

服务器保存的保留多久
每台手机的指纹、签名公钥、首次和最近连接时间60 天没连接就删除
推送令牌(普通推送和来电推送)直到更换或撤回
每台手机登记的收件令牌列表随好友变动更新
待取的信:收件人指纹、令牌、密文、大小、时间取走即删,最多 5 天
附件密文块、上传者指纹、大小、访问码哈希全部收件人取完即删,最多 5 天
名片(只在开启"允许远程添加好友"时):昵称、公钥、应用版本关闭即撤回
邀请码 → 指纹24 小时,用一次即作废
你自己上传的诊断日志(不含内容)30 天

服务器不知道:

服务器也不会把"谁在线"告诉任何人。

服务器能推断的:

一个刻意观察的运营者,结合 IP 和时间,可以猜测哪两台手机在互相发消息。这是所有中转式通讯都有的元数据问题,我们没有用混淆流量的办法去解决它。

14. 网络连接

15. 算法一览

用途算法
密钥协商X25519;ML-KEM-768(混合)
签名Ed25519
对称加密ChaCha20-Poly1305(256 位密钥)
密钥派生HKDF-SHA256;棘轮消息链 HMAC-SHA256
文件库HPKE(X25519 · HKDF-SHA256 · ChaCha20-Poly1305)
由密码派生密钥PBKDF2-HMAC-SHA256,600,000 次
指纹、安全码、令牌SHA-256 / HKDF-SHA256
实现Apple CryptoKit、CommonCrypto(PBKDF2),无第三方加密库

16. 已知局限

17. 怎么核对

Zisty Security Overview

Last updated: November 2, 2026 · iOS 5.8.x

This is for people with some technical background who want to know why they should trust Zisty. It covers the cryptography, what the server can and cannot see, where data lives, and what we do not protect against. Every item was checked against the current code.

1. What you have to trust

2. Identity

On first launch the phone makes three long-term keys:

They live in the Keychain as AfterFirstUnlockThisDeviceOnly: they are never in iCloud Keychain and never in a backup restored elsewhere.

Your fingerprint is the first 128 bits of SHA-256(Ed25519 public key). That is your whole identity: no account, phone number, email or contact upload. A card whose fingerprint does not match its signing key is dropped.

3. Adding and verifying friends

4. One-to-one messages

4.1 Pairwise key

HKDF-SHA256(X25519(mine, theirs), salt = both fingerprints sorted and joined, info = "projecty-pairwise-v1"), 32 bytes.

It seeds the ratchet, the outer seal, the mailbox tokens and the nearby tokens.

4.2 Double Ratchet

Content uses a Signal-style Double Ratchet without a prekey server:

The KDFs:

Out-of-order and replayed messages:

Used keys are deleted.

4.3 Post-quantum

Between iOS builds from 3.1 on, sessions are hybrid X25519 + ML-KEM-768:

Recorded traffic stays closed even if X25519 falls to a quantum computer, and post-compromise recovery holds against such an attacker too. Version downgrades (v4 → v3, v3 → v2) are rejected.

4.4 When forward secrecy starts

From the peer's first reply on, every message key comes from ephemeral keys and is deleted after use. Messages sent before that reply are protected only by the peer's static X25519 and ML-KEM keys; a later leak of those keys would expose them. This is the cost of having no prekey server.

4.5 What goes through the ratchet

For a post-quantum friend, everything sealed goes through the ratchet: messages, posts, profiles, receipts and call signalling. The exceptions are:

Every envelope's ciphertext is signed with the sender's Ed25519 key.

5. Mailbox and outer seal

The outer seal uses the static key and has no forward secrecy. It hides metadata only; the content inside is ratcheted.

6. Groups

Groups have no per-message ratchet: one key opens everything sent while it was current, so group forward secrecy is measured in days.

7. Pictures, videos and files

8. Calls

9. Nearby link

The link has no TLS and no outer seal. A device on the same network that joins the link can see:
· both fingerprints;
· the nickname in the handshake card;
· message kinds and sizes.
It cannot see content.

10. Data on the phone

11. Vault

12. Moving phones, recovery kit, remote wipe

13. What the server knows

StoredFor how long
Each phone's fingerprint, signing key, first and last connectionDeleted after 60 days without a connection
Push tokens (messages and calls)Until replaced or withdrawn
The mailbox tokens each phone registersUpdated as friends change
Waiting mail: recipient fingerprint, token, ciphertext, size, timeUntil picked up, 5 days at most
Attachment chunks, uploader fingerprint, size, access-key hashUntil every recipient has them, 5 days at most
Card (only with remote requests on): nickname, public keys, app versionUntil turned off
Invite code → fingerprint24 hours, single use
Diagnostic logs you upload (no content)30 days

The server does not know:

It never tells anyone who is online.

It can infer:

An operator watching closely could guess, from IPs and timing, which two phones talk to each other. Every relayed messenger has this metadata problem; we do not add cover traffic.

14. Network

15. Algorithms

UseAlgorithm
Key agreementX25519; ML-KEM-768 (hybrid)
SignaturesEd25519
Symmetric encryptionChaCha20-Poly1305 (256-bit keys)
Key derivationHKDF-SHA256; HMAC-SHA256 message chains
VaultHPKE (X25519 · HKDF-SHA256 · ChaCha20-Poly1305)
Password-based keysPBKDF2-HMAC-SHA256, 600,000 iterations
Fingerprints, safety numbers, tokensSHA-256 / HKDF-SHA256
ImplementationApple CryptoKit, CommonCrypto (PBKDF2); no third-party crypto

16. Known limits

17. How to check