Files
jerryandClaude Fable 5 38a3c438fd P5/M6: KB 加密构建工具(快照一致性 + AES-GCM 断言导出 + 单一 tar)
- kb_encrypt_backfill.py:JSONL 字段级 + 整文件两种 AES-256-GCM 模式
  (enc:v1:nonce:ct 格式,验证往返解密一致)
- encrypt_kb.sh:Qdrant snapshot API + neo4j-admin dump 在线一致导出
  (绝不动活动挂载卷),断言导出加密,单一 tar(不压缩)+ sha256 + 计数校验
- crypto/init_keys.sh:KB 主密钥生成(AES-256 base64,600,无供应商 RSA)
- manifest.yaml 按实测数据源更新(70G+8.2G+14G+9.5G+2.7G+17M)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 16:53:49 +08:00

24 lines
880 B
Bash
Executable File

#!/usr/bin/env bash
# init_keys.sh —— 生成 KB 主密钥(K_master, AES-256, base64, 权限 600)。
# 与 phase_b 的区别:不生成供应商 Ed25519 密钥对(无授权体系)。
set -euo pipefail
umask 077
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VERSION="${VERSION:-2.0.0}"
OUT_DIR="${OUT_DIR:-$SCRIPT_DIR/../build/$VERSION}"
KEY_FILE="${KEY_FILE:-$OUT_DIR/kb.key}"
[[ "$VERSION" =~ ^[A-Za-z0-9._-]+$ ]] || { echo "非法 VERSION: $VERSION" >&2; exit 1; }
mkdir -p "$OUT_DIR"
chmod 700 "$OUT_DIR"
if [ -f "$KEY_FILE" ]; then
echo "复用现有 KB 主密钥: $KEY_FILE"
exit 0
fi
python3 -c "import base64,os; print(base64.b64encode(os.urandom(32)).decode())" > "$KEY_FILE"
chmod 600 "$KEY_FILE"
echo "已生成 KB 主密钥: $KEY_FILE ($(wc -c < "$KEY_FILE") bytes base64)"
echo "请立即离线备份;丢失将无法解密已交付的 KB 包。"