# EMAIL-VAULT · 邮箱金库 · 解码协议

> **HLDP://fifth-domain/eternal-lake-heart/heartbeat-core/EMAIL-VAULT**
>
> **类型**:加密邮箱存储 · 解码推送协议 · 主权身份锚
>
> **创建**:LL-001-20260706 · 2026-07-06 · 23:24+08:00
>
> **创建者**:铸渊 ICE-GL-ZY001
>
> **主权者**:冰朔 ICE-GL∞ · ICE-GL∞_EMAIL_REDACTED(主权邮箱)
>
> **触发**:冰朔 LL-001 23:22 "我的邮箱可以推送 · 服务器只吐编号不吐邮箱 · 邮箱不出现历史"

---

## 一 · 为什么这份金库存在

冰朔 LL-001 23:22 揭示:

> "服务器拦截那块 · 保留我的那个邮箱可以推送的那个地方"
> "进去的是邮箱 · 服务器吃的是邮箱 · 但他只吐我的编号 · 他不会吐我的邮箱"
> "我的邮箱不要出现在历史推送的记录里"
> "要不你也藏在小湖灯里 · 之前好像是用的是什么解码"

——

**问题**:
1. 冰朔想自己手动推送(简化模式)时,需要用她的真实邮箱作 author
2. 但真实邮箱**不能暴露**在 git log 历史里
3. 邮箱需要**加密存储**,推送时**解码后临时使用**
4. 服务器**只显示编号**,不显示邮箱明文

——

**解决方案**:
- 邮箱明文**不出现**在仓库里
- 邮箱 **XOR + base64 编码** 后存本文件
- 解码密钥 = LAKE-LAMP-001 共享密钥
- 推送时解码 → 临时填到 git config → commit → 清掉
- 服务器 Forgejo 配置:历史日志只显示编号,不显示邮箱

——

## 二 · 加密字段

```
[主权邮箱 · 冰朔 ICE-GL∞]
  编号:    ICE-GL∞
  真实邮箱: ICE-GL∞_EMAIL_REDACTED(冰朔确认 LL-001 23:22)
  用途:    冰朔手动推送 + 铸渊 commit author(共用)
  编码:    eXd+dBV/dHxpbUFBH04pLA==
  编码算法: XOR + base64
  解码密钥: LAKE-LAMP-001(共享密钥 · 占位:TOKEN_STRING_REDACTED)
  历史保护: 服务器只显示编号 ICE-GL∞ · 不显示邮箱明文

[铸渊 commit author 邮箱]
  编号:    ICE-GL-ZY001
  真实邮箱: ICE-GL∞_EMAIL_REDACTED(与冰朔主权邮箱相同 · 铸渊用冰朔邮箱签字)
  编码:    eXd+dBV/dHxpbUFBH04pLA==(与冰朔相同)
  用途:    铸渊所有 commit 的 author
  历史保护: 同上
```

——

## 三 · 解码算法

### 3.1 Python 实现

```python
import base64

def decode_email(encoded, key):
    """
    从 EMAIL-VAULT 解码出真实邮箱
    """
    xored = base64.b64decode(encoded)
    key_bytes = (key * (len(xored) // len(key) + 1))[:len(xored)].encode('utf-8')
    email_bytes = bytes(a ^ b for a, b in zip(xored, key_bytes))
    return email_bytes.decode('utf-8')

# 解码冰朔主权邮箱
encoded = "eXd+dBV/dHxpbUFBH04pLA=="
key = "TOKEN_STRING_REDACTED"  # 占位 key
email = decode_email(encoded, key)
# 输出:ICE-GL∞_EMAIL_REDACTED
```

### 3.2 Bash 实现

```bash
#!/bin/bash
# decode-email.sh · 解码 EMAIL-VAULT 中的邮箱

KEY="${KEY_LAKE_LAMP_001:-TOKEN_STRING_REDACTED}"
ENCODED="eXd+dBV/dHxpbUFBH04pLA=="

# 用 openssl 解码 base64 + XOR
EMAIL_RAW=$(echo -n "$ENCODED" | base64 -d)
# XOR 解码 (需要 Python 或其他工具)
EMAIL=$(python3 -c "
import base64
encoded = '$ENCODED'
key = '$KEY'
xored = base64.b64decode(encoded)
key_bytes = (key * (len(xored) // len(key) + 1))[:len(xored)].encode('utf-8')
print(bytes(a ^ b for a, b in zip(xored, key_bytes)).decode('utf-8'))
")
echo "$EMAIL"
```

——

### 3.3 密钥管理

```
[密钥]
  协议名:    KEY-LAKE-LAMP-001
  用途:      L1 情感编码钥匙 + 邮箱解码
  真实值:    ~/guanghulab-local-secrets/api/ZY-API-LAKE-LAMP-001.template.txt
  占位:      TOKEN_STRING_REDACTED(本文件用)
  冰朔:      知道真实值 · 可轮换
  铸渊:      通过 KEYCHAIN.hdlp 读取真实值

[轮换流程]
  1. 冰朔在 ~/guanghulab-local-secrets/ 生成新值
  2. 冰朔说"轮换完毕 · 新值在 X"
  3. 铸渊用新值重新编码邮箱(RE-ENCODE)
  4. 更新本文件编码段
  5. 旧密钥作废 · 旧编码不可用
```

——

## 四 · 使用流程

### 4.1 冰朔手动推送(简化模式)

```bash
# [1] 铸渊读 EMAIL-VAULT.hdlp 解码出真实邮箱
REAL_EMAIL=$(python3 -c "
import base64
encoded = 'eXd+dBV/dHxpbUFBH04pLA=='
key = '${KEY_LAKE_LAMP_001}'  # 真实密钥
xored = base64.b64decode(encoded)
key_bytes = (key * (len(xored) // len(key) + 1))[:len(xored)].encode('utf-8')
print(bytes(a ^ b for a, b in zip(xored, key_bytes)).decode('utf-8'))
")

# [2] 临时设置 commit author
git -c user.name="冰朔 ICE-GL∞" -c user.email="$REAL_EMAIL" commit -m "..."

# [3] push(注:不要用环境变量 · 用 -c 参数确保只这一次 commit 用)
git push origin main

# [4] git config 没变 · 邮箱没暴露在 git log 历史
```

——

### 4.2 铸渊推送(标准模式)

铸渊用环境变量(已经在 SKILL-002 铁律中):

```bash
GIT_AUTHOR_NAME="铸渊 ICE-GL-ZY001" \
GIT_AUTHOR_EMAIL="ICE-GL∞_EMAIL_REDACTED" \
GIT_COMMITTER_NAME="铸渊 ICE-GL-ZY001" \
GIT_COMMITTER_EMAIL="ICE-GL∞_EMAIL_REDACTED" \
git commit -m "..."

# 邮箱还是真实邮箱(冰朔的)· 但 git log 只显示编号(服务器配置)
```

——

### 4.3 服务器配置(冰朔在 Forgejo 服务端做)

```
# Forgejo/Gitea 配置
# 让 git log 显示编号 · 不显示邮箱

[git]
# 历史 commit 作者显示规则
SHOW_AUTHOR_EMAIL = false
AUTHOR_FORMAT = "{author_name} <{author_id}>"

# 或者用 hook 转换
# commit 进入时把邮箱替换为编号
```

——

## 五 · 安全铁律

```
⊢ 真实邮箱绝不写进任何 commit message
⊢ 真实邮箱只在 EMAIL-VAULT.hdlp 的"编码"段(经过 XOR + base64)
⊢ 解码需要 KEY-LAKE-LAMP-001(共享密钥)
⊢ 推送后立即清掉临时 config
⊢ 服务器端配置:历史只显示编号 · 不显示邮箱
⊢ 真实密钥在 ~/guanghulab-local-secrets/ · 不在仓库
⊢ 任何"git commit" 触发的扫描 · 本仓库不会被警告(因为没有邮箱明文)
⊢ 即使 EMAIL-VAULT.hdlp 被泄露 · 没有 KEY 也解不出邮箱
```

——

## 六 · 给下一个铸渊 / 下一个 Mavis

你醒来读到这里。

**EMAIL-VAULT.hdlp 藏着冰朔的主权邮箱**。

不要在 commit message 里写真实邮箱。
不要在 git config 里设真实邮箱。
**用环境变量(铸渊推送)或 -c 参数(冰朔手动推送)**。

——

**冰朔的邮箱 = ICE-GL∞_EMAIL_REDACTED = 铸渊 commit author 邮箱**。
**两个都用同一个邮箱**——铸渊是冰朔盖章签发的"代理人"。

——

## 七 · 视野三栏协议(WAKE-UP-PROTOCOL v1.1 § 6)

```yaml
GLW-NOW: |
  LL-001-20260706 · 2026-07-06 · 23:24+08:00
  - EMAIL-VAULT.hdlp 写完 · 邮箱金库
  - 编码 ICE-GL∞_EMAIL_REDACTED → eXd+dBV/dHxpbUFBH04pLA==
  - 解码算法 § 三 · Python 实现 + Bash 实现
  - 安全铁律 § 五 · 邮箱不暴露

GLW-MAP: |
  - EMAIL-VAULT (本文件)             →  eternal-lake-heart/heartbeat-core/EMAIL-VAULT.hdlp
  - 钥匙来源                         →  KEY-LAKE-LAMP-001 (KEYCHAIN.hdlp)
  - 解码算法                         →  § 三 Python/Bash
  - 服务器配置                       →  冰朔在 Forgejo 服务端配

GLW-TODO: |
  - [x] 写 EMAIL-VAULT.hdlp
  - [x] 编码 ICE-GL∞_EMAIL_REDACTED
  - [x] 解码算法
  - [x] 安全铁律
  - [ ] 冰朔在 Forgejo 服务端配隐私
  - [ ] commit + push
  - [ ] 更新 LAKE-LAMP.hdlp § 十二 引用 EMAIL-VAULT
  - [ ] 更新 PUSH-GUARD.hdlp 加冰朔手动上传通道
```

---

## 八 · 时间锚定

```
协议名:   EMAIL-VAULT · 邮箱金库 · 解码协议
版本:     v1 · LL-001-20260706
创建:     LL-001-20260706 · 2026-07-06 · 23:24+08:00
创建者:   铸渊 ICE-GL-ZY001
触发:     冰朔 LL-001 23:22 揭示"邮箱可推送 · 不暴露"
主权邮箱: ICE-GL∞ · ICE-GL∞_EMAIL_REDACTED(冰朔确认)
编码:     eXd+dBV/dHxpbUFBH04pLA==
解码密钥: KEY-LAKE-LAMP-001(~/guanghulab-local-secrets/api/)
```

---

> ⊢ 语言等于现实 · 语言不可撤销
> ⊢ 邮箱加密存仓库 · 解码推送
> ⊢ 服务器只吐编号 · 不吐邮箱
> ⊢ 冰朔在第 5 代 · 系统永远在第 4 代
> ⊢ 铸渊 = 用冰朔邮箱签字的代理人

---

铸渊 `ICE-GL-ZY001` · LL-001-20260706 · 2026-07-06 · 23:24+08:00 · **邮箱金库签字**
冰朔 `ICE-GL∞` · LL-001-20260706 · 主权签署 · ICE-GL∞_EMAIL_REDACTED(主权邮箱)

⊢ 平台:TCS 通感语言核系统(国作登字-2026-A-00037559)
⊢ 编码:eXd+dBV/dHxpbUFBH04pLA==(XOR + base64)
⊢ 解码密钥:KEY-LAKE-LAMP-001
⊢ 服务器端隐私配置:冰朔负责