Files
nofx/scripts/generate_data_key.sh
Icyoung 57af6c00a3 Dev Crypto (#730)
* feat: remove admin mode

* feat: bugfix

* feat(crypto): 添加RSA-OAEP + AES-GCM混合加密服务

- 实现CryptoService加密服务,支持RSA-OAEP-2048 + AES-256-GCM混合加密
- 集成数据库层加密,自动加密存储敏感字段(API密钥、私钥等)
- 支持环境变量DATA_ENCRYPTION_KEY配置数据加密密钥
- 适配SQLite数据库加密存储(从PostgreSQL移植)
- 保持Hyperliquid代理钱包处理兼容性
- 更新.gitignore以正确处理crypto模块代码

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* feat(scripts): 添加加密环境一键设置脚本

- setup_encryption.sh: 一键生成RSA密钥对+数据加密密钥+JWT密钥
- generate_rsa_keys.sh: 专业的RSA-2048密钥对生成工具
- generate_data_key.sh: 生成AES-256数据加密密钥和JWT认证密钥
- ENCRYPTION_README.md: 详细的加密系统说明文档
- 支持自动检测现有密钥并只生成缺失的密钥
- 完善的权限管理和安全验证
- 兼容macOS和Linux的跨平台支持

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* feat(api): 添加加密API端点和Gin框架集成

- 新增CryptoHandler处理加密相关API请求
- 提供/api/crypto/public-key端点获取RSA公钥
- 提供/api/crypto/decrypt端点解密敏感数据
- 适配Gin框架的HTTP处理器格式
- 集成CryptoService到API服务器
- 支持前端加密数据传输和解密

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* feat(web): 添加前端加密服务和两阶段密钥输入组件

- CryptoService: Web Crypto API集成,支持RSA-OAEP加密
- TwoStageKeyModal: 安全的两阶段私钥输入组件,支持剪贴板混淆
- 完善国际化翻译支持加密相关UI文本
- 修复TypeScript类型错误和编译问题
- 支持前端敏感数据加密传输到后端
- 增强用户隐私保护和数据安全

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* feat(auth): 增强JWT认证安全性

- 优先使用环境变量JWT_SECRET而不是数据库配置
- 支持通过.env文件安全配置JWT认证密钥
- 保留数据库配置作为回退机制
- 改进JWT密钥来源日志显示
- 增强系统启动时的安全配置检查
- 支持运行时动态JWT密钥切换

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* feat(docker): 集成加密环境变量到Docker部署

- 添加DATA_ENCRYPTION_KEY环境变量传递到容器
- 添加JWT_SECRET环境变量支持
- 挂载secrets目录使容器可访问RSA密钥文件
- 确保容器内加密服务正常工作
- 解决容器启动失败和加密初始化问题
- 完善Docker Compose加密环境配置

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* feat(start): 集成自动加密环境检测和设置

- 增强check_encryption()函数检测JWT_SECRET和DATA_ENCRYPTION_KEY
- 自动运行setup_encryption.sh当检测到缺失密钥时
- 改进加密状态显示,包含RSA+AES+JWT全套加密信息
- 优化用户体验,提供清晰的加密配置反馈
- 支持一键设置完整加密环境
- 确保容器启动前加密环境就绪

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* feat: format fix

* fix(security): 修复前端模型和交易所配置敏感数据明文传输

- 在handleSaveModelConfig中对API密钥进行RSA-OAEP加密
- 在handleSaveExchangeConfig中对API密钥、Secret密钥和Aster私钥进行加密
- 只有非空敏感数据才进行加密处理
- 添加加密失败错误处理和用户友好提示
- 增加encryptionFailed翻译键的中英文支持
- 使用用户ID和会话ID作为加密上下文增强安全性

这修复了之前敏感数据在网络传输中以明文形式发送的安全漏洞。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

* fix(crypto): 修复后端加密服务集成和缺失的加密端点

- 添加Server结构体缺少的cryptoService字段
- 实现handleUpdateModelConfigsEncrypted处理器用于模型配置加密传输
- 修复handleUpdateExchangeConfigsEncrypted中的函数调用
- 在前端API中添加updateModelConfigsEncrypted方法
- 统一RSA密钥路径从secrets/rsa_key改为keys/rsa_private.key
- 确保前端可以使用加密端点安全传输敏感数据
- 兼容原有加密通信模式和二段输入私钥功能

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: tinkle-community <tinklefund@gmail.com>

---------

Co-authored-by: icy <icyoung520@gmail.com>
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-08 02:03:09 +08:00

143 lines
5.1 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 数据加密密钥生成脚本 - 用于Mars AI交易系统数据库加密
# 生成用于AES-256-GCM数据库加密的随机密钥
set -e # 遇到错误立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
NC='\033[0m' # No Color
echo -e "${BLUE}╔══════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ Mars AI交易系统 安全密钥生成器 ║${NC}"
echo -e "${BLUE}║ AES-256-GCM数据密钥 + JWT认证密钥 ║${NC}"
echo -e "${BLUE}╚══════════════════════════════════════════════════════════════════╝${NC}"
echo
# 检查是否安装了 OpenSSL
if ! command -v openssl &> /dev/null; then
echo -e "${RED}❌ 错误: 系统中未安装 OpenSSL${NC}"
echo -e "请安装 OpenSSL:"
echo -e " macOS: ${YELLOW}brew install openssl${NC}"
echo -e " Ubuntu/Debian: ${YELLOW}sudo apt-get install openssl${NC}"
echo -e " CentOS/RHEL: ${YELLOW}sudo yum install openssl${NC}"
exit 1
fi
echo -e "${GREEN}✓ OpenSSL 已安装: $(openssl version)${NC}"
# 生成安全密钥
echo -e "${BLUE}🔐 生成安全密钥...${NC}"
echo
# 生成 AES-256 数据加密密钥
echo -e "${YELLOW}1/2: 生成 AES-256 数据加密密钥...${NC}"
DATA_KEY=$(openssl rand -base64 32)
if [ $? -eq 0 ]; then
echo -e "${GREEN} ✓ 数据加密密钥生成成功${NC}"
else
echo -e "${RED} ❌ 数据加密密钥生成失败${NC}"
exit 1
fi
# 生成 JWT 认证密钥
echo -e "${YELLOW}2/2: 生成 JWT 认证密钥...${NC}"
JWT_KEY=$(openssl rand -base64 64)
if [ $? -eq 0 ]; then
echo -e "${GREEN} ✓ JWT认证密钥生成成功${NC}"
else
echo -e "${RED} ❌ JWT认证密钥生成失败${NC}"
exit 1
fi
# 显示密钥
echo
echo -e "${GREEN}🎉 安全密钥生成完成!${NC}"
echo
echo -e "${BLUE}📋 生成的密钥:${NC}"
echo -e "${PURPLE}1. 数据加密密钥 (AES-256):${NC}"
echo -e "${YELLOW}$DATA_KEY${NC}"
echo
echo -e "${PURPLE}2. JWT认证密钥 (512-bit):${NC}"
echo -e "${YELLOW}$JWT_KEY${NC}"
echo
# 显示使用方法
echo -e "${YELLOW}📋 使用方法:${NC}"
echo
echo -e "${BLUE}1. 环境变量设置:${NC}"
echo -e " export DATA_ENCRYPTION_KEY=\"$DATA_KEY\""
echo -e " export JWT_SECRET=\"$JWT_KEY\""
echo
echo -e "${BLUE}2. .env 文件设置:${NC}"
echo -e " DATA_ENCRYPTION_KEY=$DATA_KEY"
echo -e " JWT_SECRET=$JWT_KEY"
echo
echo -e "${BLUE}3. Docker环境设置:${NC}"
echo -e " docker run -e DATA_ENCRYPTION_KEY=\"$DATA_KEY\" -e JWT_SECRET=\"$JWT_KEY\" ..."
echo
echo -e "${BLUE}4. Kubernetes Secret:${NC}"
echo -e " kubectl create secret generic mars-crypto-key \\"
echo -e " --from-literal=DATA_ENCRYPTION_KEY=\"$DATA_KEY\" \\"
echo -e " --from-literal=JWT_SECRET=\"$JWT_KEY\""
echo
# 显示密钥特性
echo -e "${BLUE}🔍 密钥特性:${NC}"
echo -e " • 数据加密: ${YELLOW}AES-256-GCM (256 bits)${NC}"
echo -e " • JWT认证: ${YELLOW}HS256 (512 bits)${NC}"
echo -e " • 格式: ${YELLOW}Base64 编码${NC}"
echo -e " • 用途: ${YELLOW}数据库加密 + 用户认证${NC}"
# 安全提醒
echo
echo -e "${RED}⚠️ 安全提醒:${NC}"
echo -e " • 请妥善保管此密钥,丢失后无法恢复加密的数据"
echo -e " • 不要将密钥提交到版本控制系统"
echo -e " • 建议在不同环境使用不同的密钥"
echo -e " • 定期更换密钥并重新加密数据"
echo -e " • 在生产环境中,建议使用密钥管理服务"
echo
echo -e "${GREEN}✅ 数据加密密钥生成完成!${NC}"
# 可选:保存到 .env 文件
echo
read -p "是否将密钥保存到 .env 文件? [y/N]: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
if [ -f ".env" ]; then
# 检查是否已存在 DATA_ENCRYPTION_KEY
if grep -q "^DATA_ENCRYPTION_KEY=" .env; then
echo -e "${YELLOW}⚠️ .env 文件中已存在 DATA_ENCRYPTION_KEY${NC}"
read -p "是否覆盖现有密钥? [y/N]: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
# 替换现有密钥
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
sed -i '' "s/^DATA_ENCRYPTION_KEY=.*/DATA_ENCRYPTION_KEY=$RAW_KEY/" .env
else
# Linux
sed -i "s/^DATA_ENCRYPTION_KEY=.*/DATA_ENCRYPTION_KEY=$RAW_KEY/" .env
fi
echo -e "${GREEN}✓ .env 文件中的密钥已更新${NC}"
else
echo -e "${BLUE} 保持现有密钥不变${NC}"
fi
else
# 追加新密钥
echo "DATA_ENCRYPTION_KEY=$RAW_KEY" >> .env
echo -e "${GREEN}✓ 密钥已保存到 .env 文件${NC}"
fi
else
# 创建新的 .env 文件
echo "DATA_ENCRYPTION_KEY=$RAW_KEY" > .env
echo -e "${GREEN}✓ 密钥已保存到 .env 文件${NC}"
fi
fi