# Implementing End To End Encryption For Messaging

> 端对端加密（E2EE）确保只有通信双方能够读取消息，任何中间方（包括服务器）都无法解密。本技能实现 Signal 协议的双棘轮（Double Ratchet）算法简化版本，使用 X25519 进行密钥交换，HKDF 进行密钥派生，AES-256-GCM 进行消息加密。

- Skill: `killvxk/implementing-end-to-end-encryption-for-messaging` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/implementing-end-to-end-encryption-for-messaging`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/implementing-end-to-end-encryption-for-messaging/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/implementing-end-to-end-encryption-for-messaging

---

# 为消息传递实现端对端加密

## 概述

端对端加密（E2EE，End-to-End Encryption）确保只有通信双方能够读取消息，任何中间方（包括服务器）都无法解密。本技能实现 Signal 协议的双棘轮（Double Ratchet）算法简化版本，使用 X25519 进行密钥交换，HKDF 进行密钥派生，AES-256-GCM 进行消息加密。

## 目标

- 实现 X25519 Diffie-Hellman 密钥交换以建立会话
- 构建双棘轮密钥管理算法
- 使用每条消息独立的密钥加密和解密消息
- 实现前向保密（Forward Secrecy）（当前密钥泄露不会暴露过去的消息）
- 处理乱序消息投递
- 使用 X3DH（扩展三重 Diffie-Hellman）实现密钥协商

## 核心概念

### Signal 协议组件

| 组件 | 用途 | 算法 |
|------|------|------|
| X3DH | 初始密钥协商 | X25519 |
| Double Ratchet | 持续密钥管理 | X25519 + HKDF + AES-GCM |
| Sending Chain | 每条消息的加密密钥 | HMAC-SHA256 链 |
| Receiving Chain | 每条消息的解密密钥 | HMAC-SHA256 链 |
| Root Chain | 在 DH 棘轮时派生新链密钥 | HKDF |

### 前向保密

每条消息使用从棘轮链派生的唯一加密密钥。密钥使用后立即删除，确保当前状态的泄露不会暴露之前发送/接收的消息。

## 安全注意事项

- 解密后立即删除消息密钥
- 实现消息排序和重放保护
- 对所有消息使用认证加密（AES-GCM）
- 使用设备级安全保护身份密钥
- 通过带外方式（safety numbers）验证身份密钥

## 验证标准

- [ ] X25519 密钥交换产生共享密钥
- [ ] 消息在双方之间能正确加密和解密
- [ ] 不同消息产生不同密文
- [ ] 前向保密：旧密钥无法解密新消息
- [ ] 乱序消息可被解密
- [ ] 被篡改的消息被认证机制拒绝

