游铛铛-技术方案-安全方案.md 3.1 KB

游铛铛安全加固方案

一、客户端安全

1.1 代码保护

  • PyArmor混淆:混淆Python源码,防止直接查看
  • Nuitka编译:核心模块编译为二进制,提高安全性
  • 字符串加密:关键字符串加密存储

1.2 接口加密

  • RSA加密:所有API请求使用RSA加密
  • 密钥轮换:每10天自动更换密钥对
  • 加密流程:
    1. 客户端获取最新公钥
    2. 使用公钥加密请求数据
    3. 服务端使用私钥解密

1.3 机器码绑定

  • 机器码生成:基于MAC地址、CPU、主板等硬件信息
  • 绑定机制:注册时绑定,登录时验证
  • 解绑机制:用户主动解绑后可换机

1.4 许可证验证

  • 在线验证:启动时验证卡密有效性
  • 心跳检测:运行中定时检测(每30秒)
  • 过期处理:过期后自动退出登录

二、服务端安全

2.1 接口加密

  • 加密开关:支持开发/生产环境切换
  • 密钥管理:私钥仅服务端持有,不泄露
  • 历史密钥:保留历史密钥,支持平滑切换

2.2 数据验证

  • 参数校验:严格校验所有输入参数
  • 签名验证:关键操作添加签名验证
  • 防重放:使用时间戳+随机数防重放攻击

2.3 日志记录

  • 接口日志:记录所有API调用
  • 异常日志:记录异常和错误信息
  • 审计日志:记录关键操作(如卡密生成)

三、数据库安全

3.1 密码存储

  • 哈希加密:使用bcrypt/argon2哈希密码
  • 盐值:每个密码使用唯一盐值
  • 不可逆:密码不可恢复,只能重置

3.2 敏感数据

  • 加密存储:私钥等敏感数据加密存储
  • 访问控制:限制数据库访问IP
  • 备份加密:数据库备份文件加密

四、密钥管理

4.1 密钥生成

from cryptography.hazmat.primitives.asymmetric import rsa

def generate_key_pair():
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048
    )
    public_key = private_key.public_key()
    return private_key, public_key

4.2 密钥轮换

  • 自动轮换:每10天自动生成新密钥对
  • 平滑切换:新旧密钥同时有效7天
  • 历史保留:保留历史密钥用于解密旧数据

4.3 密钥分发

  • 客户端获取:客户端启动时获取最新公钥
  • 缓存机制:客户端缓存公钥,减少请求
  • 更新检测:定期检测密钥是否更新

五、防破解措施

5.1 代码混淆

  • PyArmor混淆所有Python代码
  • 关键逻辑编译为二进制
  • 字符串和常量加密

5.2 反调试

  • 检测调试器附加
  • 检测虚拟机环境
  • 检测代码注入

5.3 完整性校验

  • 校验exe文件完整性
  • 校验关键文件是否被修改
  • 校验配置文件合法性

六、安全配置

6.1 开发环境

# 开发环境关闭加密,方便调试
ENCRYPT_ENABLED = False
DEBUG = True

6.2 生产环境

# 生产环境开启所有安全措施
ENCRYPT_ENABLED = True
DEBUG = False
LOG_LEVEL = 'INFO'