Skip to content

安全加密模块

安全加密模块是 DocuSnap-Backend 系统的关键安全组件,负责实现端到端加密和请求验证,保护敏感文档和表单数据的传输安全。该模块采用 RSA 和 AES 混合加密方案,结合哈希验证机制,提供全面的数据安全保障。

模块职责

安全加密模块的主要职责包括:

  1. 密钥管理:生成、存储和管理 RSA 密钥对
  2. 请求解密:解密客户端发送的加密请求
  3. 响应加密:加密返回给客户端的响应数据
  4. 请求验证:验证请求的完整性和真实性
  5. 安全配置:管理系统的安全相关配置

核心组件

1. RSA 加密/解密器

RSA 加密/解密器负责处理非对称加密操作,主要用于密钥交换。系统使用 RSA 加密保护 AES 密钥的传输安全。

代码示例

def load_private_key():
    """加载 RSA 私钥"""
    try:
        with open(PRIVATE_KEY_PATH, 'rb') as f:
            private_key = RSA.import_key(f.read())
        return private_key
    except Exception as e:
        raise Exception(f"加载私钥失败: {str(e)}")

def rsa_decrypt(encrypted_data, private_key):
    """使用 RSA 私钥解密数据"""
    try:
        cipher = PKCS1_OAEP.new(private_key)
        decrypted_data = cipher.decrypt(base64.b64decode(encrypted_data))
        return decrypted_data
    except Exception as e:
        raise Exception(f"RSA 解密失败: {str(e)}")

2. AES 加密/解密器

AES 加密/解密器负责处理对称加密操作,用于加密和解密实际的请求和响应数据。系统使用 AES 加密提供高效的数据加密。

代码示例

def aes_decrypt(encrypted_data, key):
    """使用 AES 密钥解密数据"""
    try:
        # 从 Base64 解码加密数据
        encrypted_data_bytes = base64.b64decode(encrypted_data)

        # 提取 IV(前 16 字节)
        iv = encrypted_data_bytes[:16]
        ciphertext = encrypted_data_bytes[16:]

        # 创建 AES 解密器
        cipher = AES.new(key, AES.MODE_CBC, iv)

        # 解密数据
        padded_data = cipher.decrypt(ciphertext)

        # 移除填充
        unpadder = padding.PKCS7(AES.block_size).unpadder()
        data = unpadder.update(padded_data) + unpadder.finalize()

        return data.decode('utf-8')
    except Exception as e:
        raise Exception(f"AES 解密失败: {str(e)}")

def aes_encrypt(data, key):
    """使用 AES 密钥加密数据"""
    try:
        # 生成随机 IV
        iv = get_random_bytes(16)

        # 创建 AES 加密器
        cipher = AES.new(key, AES.MODE_CBC, iv)

        # 添加填充
        padder = padding.PKCS7(AES.block_size).padder()
        padded_data = padder.update(data.encode('utf-8')) + padder.finalize()

        # 加密数据
        ciphertext = cipher.encrypt(padded_data)

        # 组合 IV 和密文,并进行 Base64 编码
        encrypted_data = base64.b64encode(iv + ciphertext).decode('utf-8')

        return encrypted_data
    except Exception as e:
        raise Exception(f"AES 加密失败: {str(e)}")

3. 哈希验证器

哈希验证器负责生成和验证数据的哈希值,确保数据的完整性和真实性。系统使用 SHA256 哈希算法进行验证。

代码示例

def sha256_hash(data):
    """计算数据的 SHA256 哈希值"""
    try:
        if isinstance(data, str):
            data = data.encode('utf-8')
        return hashlib.sha256(data).hexdigest()
    except Exception as e:
        raise Exception(f"计算哈希失败: {str(e)}")

def verify_signature(data, signature):
    """验证数据的签名(哈希值)"""
    computed_hash = sha256_hash(data)
    return computed_hash == signature

4. 请求处理器

请求处理器负责解密和验证客户端请求,以及加密返回给客户端的响应。

代码示例

def decrypt_request(encrypted_data, encrypted_key, signature):
    """解密请求数据并验证完整性"""
    try:
        # 使用私钥解密 AES 密钥
        private_key = load_private_key()
        aes_key = rsa_decrypt(encrypted_key, private_key)

        # 使用 AES 密钥解密数据
        data = aes_decrypt(encrypted_data, aes_key)

        # 验证签名
        if not verify_signature(data, signature):
            raise Exception("签名验证失败")

        return json.loads(data), aes_key
    except Exception as e:
        raise Exception(f"请求解密失败: {str(e)}")

def encrypt_response(data, aes_key):
    """加密响应数据"""
    try:
        # 将数据转换为 JSON 字符串
        json_data = json.dumps(data, ensure_ascii=False)

        # 使用 AES 密钥加密数据
        encrypted_data = aes_encrypt(json_data, aes_key)

        # 计算签名
        signature = sha256_hash(json_data)

        return {
            "encrypted_data": encrypted_data,
            "signature": signature
        }
    except Exception as e:
        raise Exception(f"响应加密失败: {str(e)}")

加密方案设计

DocuSnap-Backend 采用 RSA 和 AES 混合加密方案,结合了两种加密技术的优势:

  1. RSA 非对称加密
  2. 用于安全传输 AES 密钥
  3. 服务器持有私钥,客户端使用公钥加密
  4. 解决了密钥分发问题

  5. AES 对称加密

  6. 用于加密实际的请求和响应数据
  7. 提供高效的数据加密
  8. 支持大量数据的加密

  9. SHA256 哈希验证

  10. 验证数据的完整性
  11. 防止数据被篡改
  12. 提供额外的安全保障

这种混合加密方案平衡了安全性和性能,适合处理敏感文档和表单数据的传输安全需求。

工作流程

安全加密模块的工作流程如下:

请求处理流程

  1. 接收加密请求
  2. 客户端使用服务器的 RSA 公钥加密 AES 密钥
  3. 客户端使用 AES 密钥加密请求数据
  4. 客户端计算请求数据的 SHA256 哈希值作为签名
  5. 客户端发送加密的 AES 密钥、加密的请求数据和签名

  6. 解密和验证

  7. 服务器使用 RSA 私钥解密 AES 密钥
  8. 服务器使用 AES 密钥解密请求数据
  9. 服务器计算解密后数据的 SHA256 哈希值
  10. 服务器验证计算的哈希值与签名是否匹配

  11. 处理请求

  12. 如果验证通过,服务器处理解密后的请求
  13. 如果验证失败,服务器返回错误响应

响应处理流程

  1. 准备响应
  2. 服务器准备响应数据
  3. 服务器将响应数据转换为 JSON 格式

  4. 加密响应

  5. 服务器使用之前解密得到的 AES 密钥加密响应数据
  6. 服务器计算响应数据的 SHA256 哈希值作为签名

  7. 发送加密响应

  8. 服务器发送加密的响应数据和签名给客户端
  9. 客户端使用 AES 密钥解密响应数据
  10. 客户端验证响应数据的完整性

密钥管理

安全加密模块实现了以下密钥管理机制:

  1. RSA 密钥对生成
  2. 使用 genKeyPairs.sh 脚本生成 RSA 密钥对
  3. 私钥保存在服务器,公钥分发给客户端

  4. 密钥存储

  5. 私钥存储在服务器的安全位置
  6. 访问权限受到严格控制

  7. AES 密钥生成

  8. 每个请求使用新的随机 AES 密钥
  9. 增强安全性,防止重放攻击

安全措施

安全加密模块实现了多层安全措施:

  1. 端到端加密
  2. 数据在传输过程中始终保持加密状态
  3. 只有合法的接收方可以解密数据

  4. 完整性验证

  5. 使用 SHA256 哈希验证数据完整性
  6. 防止数据被篡改或损坏

  7. 参数验证

  8. 验证请求参数的格式和内容
  9. 防止恶意输入和注入攻击

  10. 错误处理

  11. 安全的错误处理机制
  12. 不泄露敏感信息的错误消息

模块接口

安全加密模块提供以下主要接口:

  1. 对外接口
  2. decrypt_request:解密和验证客户端请求
  3. encrypt_response:加密返回给客户端的响应

  4. 对内接口

  5. load_private_key:加载 RSA 私钥
  6. rsa_decrypt:使用 RSA 私钥解密数据
  7. aes_decrypt:使用 AES 密钥解密数据
  8. aes_encrypt:使用 AES 密钥加密数据
  9. sha256_hash:计算数据的 SHA256 哈希值
  10. verify_signature:验证数据的签名

安全最佳实践

安全加密模块遵循以下安全最佳实践:

  1. 使用标准加密算法
  2. RSA 用于非对称加密
  3. AES 用于对称加密
  4. SHA256 用于哈希验证

  5. 安全的密钥管理

  6. 私钥安全存储
  7. 每个请求使用新的 AES 密钥
  8. 密钥长度符合安全标准

  9. 完整的验证机制

  10. 验证请求的完整性和真实性
  11. 多层验证确保安全性

  12. 安全的错误处理

  13. 不泄露敏感信息
  14. 提供适当的错误消息

扩展性

安全加密模块的扩展性体现在:

  1. 支持多种加密算法
  2. 设计支持未来升级或更换加密算法
  3. 可以根据安全需求调整参数

  4. 可配置的安全策略

  5. 可以根据需求调整安全级别
  6. 支持添加新的安全措施

  7. 密钥轮换机制

  8. 支持定期轮换 RSA 密钥对
  9. 增强长期安全性

通过这些设计和实现,安全加密模块为 DocuSnap-Backend 系统提供了全面的数据安全保障,确保敏感文档和表单数据的传输安全。