You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发杀毒软件:RSA密钥生成过慢,求更快非对称加密方案

问题:快速非对称加密方案用于恶意文件加密

我出于兴趣正在用Python开发一款杀毒软件,希望通过RSA这类公钥-私钥(非对称)加密系统加密恶意文件,使其无法传播且无法访问。

当前我用Flask写的代码如下:

@app.route('/getstatus', methods=['GET'])
def getstatus():
    values = request.get_json()
    id = values['id']
    size = values['size']
    if id in IDS:
        status = IDS[id]['status']
    else:
        pubkey, privkey = rsa.newkeys(size)
        IDS[id] = {'id': id, 'status': 'INFECTED', 'pubkey': pubkey.save_pkcs1("PEM").decode('utf-8'), 'privkey': privkey.save_pkcs1("PEM").decode('utf-8')}
        status = 'INFECTED'
    with open("ids.json", "w") as f:
        json.dump({'ids': IDS}, f)

    return jsonify({'status': status})

我会根据最大文件大小(乘以8以预留填充空间)确定密钥尺寸,但即使是图片、文本这类小文件,密钥生成速度也极慢。我需要确保客户端无法设置内容以避免病毒禁用杀毒软件,请问是否有更快的公钥-私钥加密系统?


解决方案

首先要明确:非对称加密本身不适合直接加密大文件,哪怕是RSA或其他算法,因为非对称加密的性能远低于对称加密,且密钥长度对应加密内容的上限(比如RSA 2048位最多加密245字节左右)。你的当前思路里用文件大小来定密钥尺寸是错误的,这也是密钥生成慢的核心原因——你可能生成了远大于实际需要的密钥。

正确的做法是混合加密:用对称加密算法(如AES-256-GCM)加密文件本身,然后用非对称加密算法加密对称密钥。这样既保证了加密速度,又能利用非对称加密的密钥管理优势。

针对你的需求,推荐几个比RSA密钥生成更快的非对称加密方案:

  • ECC(椭圆曲线加密):
    椭圆曲线加密在相同安全强度下,密钥尺寸远小于RSA(比如ECC 256位等价于RSA 3072位的安全强度),因此密钥生成速度快很多,加密解密的性能也更优。Python里可以用cryptography库的cryptography.hazmat.primitives.asymmetric.ec模块实现。

  • Ed25519/Ed448:
    这是基于椭圆曲线的签名算法,结合X25519/X448密钥交换可用于加密场景。这类算法的密钥生成速度极快,且性能出色,适合资源有限的场景。同样可以通过cryptography库实现。

另外,关于客户端不可篡改的问题:

  • 不要让客户端决定密钥尺寸或加密参数,所有加密策略(密钥类型、长度、对称加密算法)都在服务端统一配置,客户端只负责上传文件元数据(如文件ID、大小),服务端生成密钥后返回公钥(或加密后的对称密钥)给客户端执行加密操作。
  • 可以给客户端的操作结果添加数字签名,服务端验证签名确保操作未被篡改。

代码优化方向:

  1. 放弃用文件大小生成对应长度的RSA密钥,改用固定长度的ECC密钥(如secp256r1)。
  2. 采用混合加密流程:
    • 服务端生成ECC密钥对。
    • 客户端生成随机AES密钥,用AES加密恶意文件。
    • 客户端用服务端的公钥加密AES密钥,将加密后的AES密钥和加密文件一起处理(本地存储或上传)。
  3. 不要每次请求都重新生成密钥,对于同一个文件ID,只生成一次密钥并持久化存储。

内容的提问来源于stack exchange,提问作者ShadowProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:37:11