去中心化社交模块
本文档是 系统设计主文档 的子文档,详细描述去中心化社交模块的设计。
2.2 去中心化社交模块
2.2.1 功能描述
构建基于身份自主权(DID)的去中心化社交网络,用户完全掌控自己的社交图谱和内容,无需依赖中心化平台。
2.2.2 架构设计
去中心化社交
├── 身份层 (DID - Decentralized Identity)
│ ├── 身份生成 (基于U盾/SIMKey的公私钥对)
│ ├── DID文档
│ │ ├── DID标识符: did:chainlesschain:<public_key_hash>
│ │ ├── 公钥列表 (加密、签名、认证)
│ │ ├── 服务端点 (个人节点地址)
│ │ └── 验证方法
│ └── 可验证凭证 (Verifiable Credentials)
│ ├── 自我声明 (昵称、头像、简介)
│ ├── 信任背书 (他人签名的凭证)
│ └── 技能证书 (链上存证)
│
├── 通信层 (P2P Network)
│ ├── 节点发现
│ │ ├── DHT (分布式哈希表) - Kademlia
│ │ ├── 引导节点 (Bootstrap Nodes)
│ │ └── mDNS (本地网络发现)
│ │
│ ├── 消息传输
│ │ ├── WebRTC (直接P2P通信)
│ │ ├── QUIC协议 (低延迟)
│ │ ├── 中继节点 (NAT穿透失败时)
│ │ └── 离线消息存储 (临时中继)
│ │
│ └── 消息加密
│ ├── Signal协议 (端到端加密)
│ ├── 双棘轮算法 (前向安全)
│ └── 会话密钥管理
│
├── 内容层
│ ├── 内容类型
│ │ ├── 文本动态 (类似微博)
│ │ ├── 长文章 (类似博客)
│ │ ├── 私密消息 (加密聊天)
│ │ └── 群组讨论
│ │
│ ├── 内容存储
│ │ ├── 本地存储 (自己的内容)
│ │ ├── IPFS (公开内容的分布式存储)
│ │ ├── 缓存 (关注者的内容)
│ │ └── Git仓库 (版本历史)
│ │
│ └── 内容分发
│ ├── 关注者推送 (主动推送给在线关注者)
│ ├── 拉取同步 (用户主动拉取更新)
│ └── 中继广播 (通过友好节点传播)
│
├── 社交图谱层
│ ├── 关系管理
│ │ ├── 关注/粉丝 (单向关注)
│ │ ├── 好友 (双向关注)
│ │ ├── 分组 (自定义标签)
│ │ └── 黑名单
│ │
│ ├── 信任网络
│ │ ├── 信任评分 (基于互动历史)
│ │ ├── Web of Trust (信任传递)
│ │ └── 信誉证明 (区块链锚定)
│ │
│ └── 隐私控制
│ ├── 内容可见性 (公开/仅好友/私密)
│ ├── 选择性同步 (只缓存感兴趣的内容)
│ └── 匿名模式 (临时身份)
│
└── 发现层
├── 内容发现
│ ├── 时间线 (关注者内容流)
│ ├── 话题标签 (#hashtag)
│ ├── 全文搜索 (本地索引)
│ └── 推荐算法 (本地AI推荐)
│
└── 用户发现
├── 好友推荐 (共同好友)
├── 兴趣匹配 (基于内容分析)
└── 附近的人 (蓝牙/GPS可选)2.2.3 核心流程
用户注册流程:
1. 用户选择创建新身份
2. U盾/SIMKey生成密钥对 (Ed25519签名 + X25519加密)
3. 生成DID标识符: did:chainlesschain:<pubkey_hash>
4. 创建DID文档并自签名
5. 配置个人节点 (可选自托管或使用免费中继)
6. 发布DID文档到DHT网络
7. 生成DID二维码/链接供他人添加添加好友流程:
1. 用户A扫描用户B的DID二维码
2. 从DHT网络获取B的DID文档
3. 验证DID文档签名
4. 发送好友请求 (使用B的加密公钥加密)
- 消息内容: A的DID + 公钥 + 自我介绍 + 签名
5. B收到请求后验证签名
6. B同意后建立Signal加密会话
7. 双方交换公钥,存储到本地联系人数据库
8. 开始P2P通信发布动态流程:
1. 用户撰写动态内容
2. 选择可见性级别 (公开/好友/私密)
3. 内容签名 (私钥签名证明authorship)
4. 如果是公开内容:
- 上传到IPFS获取CID
- 将CID + 元数据发布到DHT
5. 如果是好友可见:
- 加密内容 (每个好友的公钥单独加密)
- 通过P2P推送给在线好友
- 离线好友消息存储在中继节点
6. 记录到本地Git仓库 (版本历史)
7. 更新本地内容索引查看时间线流程:
1. 用户打开时间线
2. 从本地数据库读取缓存内容
3. 并行向所有关注者的节点拉取更新
- 发送最后同步时间戳
- 获取增量更新
4. 验证每条内容的签名
5. 解密私密内容
6. 合并排序显示 (按时间/算法推荐)
7. 异步下载多媒体资源 (图片、视频)
8. 更新本地缓存2.2.4 数据模型
本地社交数据库表结构:
sql
-- DID身份表 (本人的多个身份)
CREATE TABLE identities (
did TEXT PRIMARY KEY,
nickname TEXT,
avatar_path TEXT,
bio TEXT,
public_key_sign TEXT NOT NULL, -- 签名公钥
public_key_encrypt TEXT NOT NULL, -- 加密公钥
private_key_ref TEXT NOT NULL, -- U盾/SIMKey中的私钥引用
did_document TEXT NOT NULL, -- JSON格式的DID文档
created_at INTEGER NOT NULL,
is_default INTEGER DEFAULT 0
);
-- 联系人表
CREATE TABLE contacts (
did TEXT PRIMARY KEY,
nickname TEXT,
avatar_url TEXT,
bio TEXT,
public_key_sign TEXT NOT NULL,
public_key_encrypt TEXT NOT NULL,
did_document TEXT,
relationship TEXT, -- 'following', 'follower', 'friend', 'blocked'
trust_score REAL DEFAULT 0.0, -- 0-1之间的信任评分
tags TEXT, -- JSON数组: 分组标签
node_address TEXT, -- 对方的节点地址
last_seen INTEGER,
added_at INTEGER NOT NULL
);
-- 动态内容表
CREATE TABLE posts (
id TEXT PRIMARY KEY,
author_did TEXT NOT NULL,
content TEXT NOT NULL,
content_type TEXT DEFAULT 'text', -- 'text', 'article', 'image', 'video'
media_urls TEXT, -- JSON数组: 多媒体附件
visibility TEXT DEFAULT 'public', -- 'public', 'friends', 'private'
ipfs_cid TEXT, -- 公开内容的IPFS CID
signature TEXT NOT NULL, -- 作者签名
created_at INTEGER NOT NULL,
synced_at INTEGER,
is_local INTEGER DEFAULT 0, -- 是否本人发布
FOREIGN KEY (author_did) REFERENCES contacts(did)
);
-- 私密消息表
CREATE TABLE messages (
id TEXT PRIMARY KEY,
conversation_id TEXT NOT NULL,
sender_did TEXT NOT NULL,
receiver_did TEXT NOT NULL,
content_encrypted BLOB NOT NULL, -- Signal协议加密
media_encrypted BLOB,
ratchet_state TEXT, -- Signal双棘轮状态
signature TEXT NOT NULL,
created_at INTEGER NOT NULL,
delivered_at INTEGER,
read_at INTEGER,
FOREIGN KEY (sender_did) REFERENCES contacts(did),
FOREIGN KEY (receiver_did) REFERENCES contacts(did)
);
-- 群组表
CREATE TABLE groups (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
avatar_path TEXT,
creator_did TEXT NOT NULL,
group_key_encrypted BLOB NOT NULL, -- 群组对称密钥(用成员公钥加密)
created_at INTEGER NOT NULL,
FOREIGN KEY (creator_did) REFERENCES contacts(did)
);
-- 群组成员表
CREATE TABLE group_members (
group_id TEXT,
member_did TEXT,
role TEXT DEFAULT 'member', -- 'admin', 'member'
joined_at INTEGER NOT NULL,
PRIMARY KEY (group_id, member_did),
FOREIGN KEY (group_id) REFERENCES groups(id),
FOREIGN KEY (member_did) REFERENCES contacts(did)
);
-- 信任背书表 (Web of Trust)
CREATE TABLE endorsements (
id TEXT PRIMARY KEY,
endorser_did TEXT NOT NULL, -- 背书人
endorsee_did TEXT NOT NULL, -- 被背书人
skill_or_trait TEXT NOT NULL, -- 背书的技能或特质
comment TEXT,
signature TEXT NOT NULL, -- 背书人签名
created_at INTEGER NOT NULL,
FOREIGN KEY (endorser_did) REFERENCES contacts(did),
FOREIGN KEY (endorsee_did) REFERENCES contacts(did)
);2.2.5 技术选型 (实际实现 v0.26.0)
桌面端 (100%完成):
| 组件 | 技术选择 | 版本/说明 |
|---|---|---|
| DID标准 | W3C DID Core | 符合国际标准 |
| P2P网络 | libp2p 3.1.2 | 成熟的P2P通信库 |
| P2P子模块 | @libp2p/webrtc 6.0.10 | WebRTC传输层 |
| @libp2p/noise 1.0.1 | Noise协议加密 | |
| @libp2p/kad-dht 16.1.2 | Kademlia DHT | |
| @libp2p/circuit-relay-v2 4.1.2 | 中继节点支持 | |
| WebRTC | werift 0.22.2 | WebRTC实现 |
| WebRTC兼容 | wrtc-compat.js ⭐新增 | 兼容层(152行,v0.20.0) |
| 端到端加密 | Signal协议 | @privacyresearch/libsignal-protocol-typescript 0.0.16 |
| 分布式存储 | IPFS | 公开内容的永久存储 |
| DHT | Kademlia | 节点发现和路由 |
| 签名算法 | Ed25519 | 高效的椭圆曲线签名 |
| 加密算法 | X25519 + ChaCha20-Poly1305 | 现代加密组合 |
实现文件 (29个文件):
p2p-manager.js(58KB) - 核心P2P编排signal-session-manager.js(23KB) - Signal协议加密voice-video-manager.js(23KB) - WebRTC音视频wrtc-compat.js(152行) - WebRTC兼容层 ⭐v0.20.0新增file-transfer-manager.js- 大文件传输(64KB分块)message-manager.js- P2P消息传递device-sync-manager.js- 跨设备同步
iOS (20%完成, v0.2.0) ⭐最新:
| 组件 | 技术选择 | 实现状态 |
|---|---|---|
| DID实现 | CoreDID模块 | ✅ 100% - did:key, Ed25519 |
| DID方法 | did:key | ✅ Multibase + Multicodec |
| 签名算法 | Ed25519 | ✅ CryptoKit原生实现 |
| E2EE | Signal Protocol | ✅ 100% - CryptoKit实现 |
| 密钥交换 | X3DH | ✅ P256曲线 |
| 消息加密 | Double Ratchet | ✅ CryptoKit实现 |
| P2P网络 | WebRTC | ✅ 框架完成 - Google WebRTC iOS SDK |
| 信令服务 | WebSocket | ✅ Starscream库 |
| 设备发现 | Bonjour (NSD) | ✅ iOS原生支持 |
| P2P管理 | P2PManager | ✅ 596行 - 连接管理/状态同步 |
| WebRTC管理 | WebRTCManager | ✅ 466行 - 音视频/数据通道 |
| Signal管理 | SignalProtocolManager | ✅ 431行 - 会话管理/密钥轮转 |
| 消息管理 | MessageManager | ✅ 294行 - 发送/接收/存储 |
| 图像处理 | ImageProcessor | ✅ 499行 - 压缩/格式转换/滤镜 |
| 图像缓存 | ImageCacheManager | ✅ 394行 - 三级缓存系统 |
| 图像存储 | ImageStorageManager | ✅ 417行 - 文件管理/元数据 |
| UI集成 | SwiftUI视图 | 🚧 进行中 - P2PChatView等 |
核心模块 (Swift Package Manager) ⭐最新:
- CoreDID: DID生成,文档创建,数字签名验证 (100%)
DIDManager.swift(236行): did:key生成, Ed25519签名
- CoreE2EE: Signal Protocol完整实现
E2EESessionManager.swift(203行): X3DH + Double Ratchet- P256曲线密钥协议
- 预密钥包系统 (100个一次性预密钥)
- 会话持久化 (UserDefaults)
- 安全码验证 (Safety Numbers)
- CoreP2P: P2P网络框架
WebRTCManager.swift(466行): DataChannel/音视频通道P2PManager.swift(596行): 连接管理/状态同步SignalProtocolManager.swift(431行): 会话管理/密钥轮转MessageManager.swift(294行): 消息发送/接收/存储
图像处理系统 ⭐新增 (v0.2.0):
ImageProcessor.swift(499行): 压缩, 格式转换, 滤镜ImageCacheManager.swift(394行): 三级缓存 (内存/磁盘/远程)ImageStorageManager.swift(417行): 文件管理, 元数据
UI模块 (SwiftUI):
- ✅ P2PChatView (452行): P2P聊天界面
- ✅ ConversationListView (137行): 会话列表
- ✅ 设置界面 (DID显示, PIN修改)
代码规模: ~8,500行 P2P/E2EE代码
Android (60%完成, v0.4.1) ⭐最新:
| 组件 | 技术选择 | 实现状态 |
|---|---|---|
| DID实现 | core-did模块 | ✅ 100% - DID管理 |
| E2EE | Signal Protocol | ✅ 100% - 完整实现 (~8,195行) ⭐ |
| 密钥交换 | X3DH | ✅ 密钥协商 + 预密钥包 |
| 双棘轮 | Double Ratchet | ✅ 前向安全 + 密钥轮转 |
| 会话管理 | PersistentSessionManager | ✅ 持久化 + 密钥导出/导入 |
| 身份验证 | SafetyNumbers | ✅ 60位安全码 + 会话指纹 |
| 高级E2EE | ReadReceiptManager | ✅ 已读回执加密 + 批量确认 |
| MessageRecallManager | ✅ 消息撤回 + 灵活策略 | |
| MessageQueueManager | ✅ 离线消息队列 + 优先级 | |
| GroupEncryptionManager | ✅ 群组加密接口 + AES-256 | |
| P2P网络 | core-p2p模块 | ✅ 100% - WebRTC连接 |
| WebRTC | WebRTC 120.0.0 | ✅ STUN/TURN配置 |
| P2P UI | feature-p2p模块 | ✅ 100% - 8个完整界面 ⭐ |
| 设备发现 | DeviceListScreen | ✅ NSD实时扫描 + 配对状态 |
| 设备配对 | DevicePairingScreen | ✅ 5阶段流程 + QR扫描 |
| 安全验证 | SafetyNumbersScreen | ✅ 60位数字 + QR扫描 |
| 会话指纹 | SessionFingerprintDisplay | ✅ 色块可视化 |
| DID管理 | DIDManagementScreen | ✅ 导出 + 分享 |
| P2P聊天 | P2PChatScreen | ✅ 端到端加密聊天 |
| QR扫描 | QRCodeScannerScreen | ✅ CameraX集成 |
| 消息队列 | MessageQueueScreen | ✅ 离线消息管理 |
核心模块 (Kotlin + Hilt DI):
- core-e2ee:
- SignalProtocolManager (X3DH + Double Ratchet)
- EncryptedReceiptManager (加密回执)
- MessageRecallManager (消息撤回)
- SessionSyncManager (会话同步)
- GroupEncryptionHelper (群组加密)
- KeyRotationManager (密钥轮换)
- BackupManager (密钥备份)
- core-p2p:
- WebRTCManager (点对点连接)
- SignalingClient (WebSocket信令)
- STUNServerConfig (NAT穿透)
- core-did:
- DIDManager (身份管理)
- DIDRepository (持久化)
UI导航集成 (Jetpack Compose):
- ✅ 主导航图集成 (commit edc563d0)
- ✅ 嵌套P2P导航图
- ✅ Material 3 设计规范
- ✅ 完整的用户交互流程
性能优化 (commit 34359aa6):
- ✅ buildSrc统一依赖管理 (6,228行)
- ✅ Gradle并行构建 + G1GC
- ✅ 构建速度提升 30-50%
- ✅ 启动速度提升 20-40%
- ✅ APK大小减小 15-25%
- ✅ 数据库WAL模式 (+60%性能)
测试覆盖 (64+ test cases):
- ✅ Unit tests (ViewModels, repositories, crypto)
- ✅ Integration tests (Database, E2EE protocols)
- ✅ UI tests (P2P flows, authentication, chat)
- ✅ Performance tests (Database benchmarks)
代码规模: ~15,000行 P2P/E2EE代码
跨平台对比:
| 特性 | 桌面端 | iOS | Android |
|---|---|---|---|
| DID身份 | ✅ 100% | ✅ 100% | ✅ 100% |
| Signal E2EE | ✅ 100% | ✅ 100% | ✅ 100% |
| WebRTC P2P | ✅ 100% | 🚧 30% | ✅ 100% |
| P2P UI | ✅ 100% | 🚧 10% | ✅ 100% |
| 音视频通话 | ✅ 100% | ❌ 0% | 🚧 50% |
| 文件传输 | ✅ 100% | ❌ 0% | 🚧 30% |
| 群组加密 | ✅ 100% | ❌ 0% | ✅ 100% |
| 离线消息 | ✅ 100% | 🚧 50% | ✅ 100% |
架构一致性:
- ✅ 统一的DID did:key格式 (Ed25519)
- ✅ 相同的Signal Protocol实现
- ✅ 兼容的消息加密格式
- 🚧 P2P协议对齐 (iOS WebRTC集成中)
