使用椭圆曲线加密一个 1mb 的普通文本文件后,elgamal 加密文件的大小是多少?
我得到一个 250mb 的加密文件大小?与正常标准相差多少?
使用椭圆曲线加密一个 1mb 的普通文本文件后,elgamal 加密文件的大小是多少?
我得到一个 250mb 的加密文件大小?与正常标准相差多少?
您不应该只对可能超过密钥大小的任何字节数使用非对称加密,减去一定的最小开销。此开销取决于所使用的算法,例如 RSA PKCS#1 填充开销最少需要 11 个字节,而 OAEP 最少需要大约 42 个字节。如果您直接使用非对称原语,您将获得每个数据块的keylength - overhead
开销。
基本上,为了安全起见,您应该始终加密少量字节。一般来说,这意味着为任何重要的字节量部署混合密码系统(并且,为了保持兼容,通常也用于微量字节)。
混合密码系统为每条要加密的消息随机生成一个对称会话或数据密钥。此对称密钥对数据进行加密。对称密钥本身也使用非对称算法加密(或者,更好的术语,包装)。然后发送两个元素,为对称加密和非对称算法的输出大小(通常是密钥大小)产生 0 到 32 个字节的小开销。解密解包对称密钥,然后解密密文。
如您所见,混合密码系统在密文大小和 CPU 时间方面都更加高效。非对称加密的效率远低于对称加密。
至于使用的算法,ElGamal 是一个相当古老的方案。我建议 RSA OAEP 作为非对称原语,密钥大小为 4096 位,AES-GCM 作为对称原语。由于不对称和对称之间的差异,这个方案仍然会比 ElGamal 更快。