- 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>
24 lines
880 B
Bash
Executable File
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 包。"
|