安全加密模块¶
安全加密模块是 DocuSnap-Backend 系统的关键安全组件,负责实现端到端加密和请求验证,保护敏感文档和表单数据的传输安全。该模块采用 RSA 和 AES 混合加密方案,结合哈希验证机制,提供全面的数据安全保障。
模块职责¶
安全加密模块的主要职责包括:
- 密钥管理:生成、存储和管理 RSA 密钥对
- 请求解密:解密客户端发送的加密请求
- 响应加密:加密返回给客户端的响应数据
- 请求验证:验证请求的完整性和真实性
- 安全配置:管理系统的安全相关配置
核心组件¶
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 混合加密方案,结合了两种加密技术的优势:
- RSA 非对称加密:
- 用于安全传输 AES 密钥
- 服务器持有私钥,客户端使用公钥加密
-
解决了密钥分发问题
-
AES 对称加密:
- 用于加密实际的请求和响应数据
- 提供高效的数据加密
-
支持大量数据的加密
-
SHA256 哈希验证:
- 验证数据的完整性
- 防止数据被篡改
- 提供额外的安全保障
这种混合加密方案平衡了安全性和性能,适合处理敏感文档和表单数据的传输安全需求。
工作流程¶
安全加密模块的工作流程如下:
请求处理流程¶
- 接收加密请求:
- 客户端使用服务器的 RSA 公钥加密 AES 密钥
- 客户端使用 AES 密钥加密请求数据
- 客户端计算请求数据的 SHA256 哈希值作为签名
-
客户端发送加密的 AES 密钥、加密的请求数据和签名
-
解密和验证:
- 服务器使用 RSA 私钥解密 AES 密钥
- 服务器使用 AES 密钥解密请求数据
- 服务器计算解密后数据的 SHA256 哈希值
-
服务器验证计算的哈希值与签名是否匹配
-
处理请求:
- 如果验证通过,服务器处理解密后的请求
- 如果验证失败,服务器返回错误响应
响应处理流程¶
- 准备响应:
- 服务器准备响应数据
-
服务器将响应数据转换为 JSON 格式
-
加密响应:
- 服务器使用之前解密得到的 AES 密钥加密响应数据
-
服务器计算响应数据的 SHA256 哈希值作为签名
-
发送加密响应:
- 服务器发送加密的响应数据和签名给客户端
- 客户端使用 AES 密钥解密响应数据
- 客户端验证响应数据的完整性
密钥管理¶
安全加密模块实现了以下密钥管理机制:
- RSA 密钥对生成:
- 使用
genKeyPairs.sh
脚本生成 RSA 密钥对 -
私钥保存在服务器,公钥分发给客户端
-
密钥存储:
- 私钥存储在服务器的安全位置
-
访问权限受到严格控制
-
AES 密钥生成:
- 每个请求使用新的随机 AES 密钥
- 增强安全性,防止重放攻击
安全措施¶
安全加密模块实现了多层安全措施:
- 端到端加密:
- 数据在传输过程中始终保持加密状态
-
只有合法的接收方可以解密数据
-
完整性验证:
- 使用 SHA256 哈希验证数据完整性
-
防止数据被篡改或损坏
-
参数验证:
- 验证请求参数的格式和内容
-
防止恶意输入和注入攻击
-
错误处理:
- 安全的错误处理机制
- 不泄露敏感信息的错误消息
模块接口¶
安全加密模块提供以下主要接口:
- 对外接口:
decrypt_request
:解密和验证客户端请求-
encrypt_response
:加密返回给客户端的响应 -
对内接口:
load_private_key
:加载 RSA 私钥rsa_decrypt
:使用 RSA 私钥解密数据aes_decrypt
:使用 AES 密钥解密数据aes_encrypt
:使用 AES 密钥加密数据sha256_hash
:计算数据的 SHA256 哈希值verify_signature
:验证数据的签名
安全最佳实践¶
安全加密模块遵循以下安全最佳实践:
- 使用标准加密算法:
- RSA 用于非对称加密
- AES 用于对称加密
-
SHA256 用于哈希验证
-
安全的密钥管理:
- 私钥安全存储
- 每个请求使用新的 AES 密钥
-
密钥长度符合安全标准
-
完整的验证机制:
- 验证请求的完整性和真实性
-
多层验证确保安全性
-
安全的错误处理:
- 不泄露敏感信息
- 提供适当的错误消息
扩展性¶
安全加密模块的扩展性体现在:
- 支持多种加密算法:
- 设计支持未来升级或更换加密算法
-
可以根据安全需求调整参数
-
可配置的安全策略:
- 可以根据需求调整安全级别
-
支持添加新的安全措施
-
密钥轮换机制:
- 支持定期轮换 RSA 密钥对
- 增强长期安全性
通过这些设计和实现,安全加密模块为 DocuSnap-Backend 系统提供了全面的数据安全保障,确保敏感文档和表单数据的传输安全。