我知道可以使用CCM、GCM或EAX进行认证加密,但我注意到它们使用相同的密钥来加密和解密数据。我不想这样做,我宁愿使用非对称密钥来加密和解密我的数据。
我所知道的所有方案都将使用对称密码来进行大量数据加密。对称密码可以是块密码或流密码。
我也看到了一些错误的RSA应用程序,其中RSA在ECB模式下运行。也就是说,数据被“分块”或“分段”,然后对每个块应用RSA。
应用密码学手册明确警告了这一点。
你可能能够做到最好的是
椭圆曲线综合加密方案(ECIES)或
离散对数综合加密系统(DLIES)。两者都可在Crypto++中使用,都使用公钥(非对称)密码学。
ECIES和DLIES结合了密钥封装机制(KEM)和数据封装机制(DEM)。该系统从共同的秘密中独立推导出对称密码密钥和MAC密钥。首先使用对称密码对数据进行加密,然后在认证方案下对密文进行MAC处理。最后,将共同的秘密加密为公钥/私钥对的公共部分。加密函数的输出是元组
{K,C,T}
,其中
K
是加密的共同秘密,
C
是密文,
T
是认证标记。
关于“共同秘密”,实际上它是应用密钥协商功能得出的结果,并随后使用KDF进行摘要处理。它使用静态公钥和临时密钥对。执行解密操作的人使用其公钥执行密钥交换的另一半,以得到“共同秘密”。
KEM和DEM避免填充,因此填充奥拉克尔不是一个问题。这就是为什么在KEM下使用KDF来消化大型“公共秘密”的原因。省略填充极大地简化了系统的安全证明。由于安全证明,ECIES和DLIES是
IND-CCA2,这是您可以实现的最强安全性之一。
如果我使用非对称算法签署数据,然后使用对称算法加密它...这里有一些相关阅读材料...首先是Hugo Krawczyk的
加密和认证保护通信的顺序。第二个是Don Davis的
S/MIME、PKCS#7、MOSS、PEM、PGP和XML中有缺陷的签名和加密。
这里的相关性是:Krawczyk的论文涉及对称键密码学和“先加密再验证”式的认证加密(以及如何执行认证加密)。Davis的论文涉及非对称密码学和签署和加密之间的脱节(以及如何修复它)。
在我提供方案之前,有没有已经有的加密库能够满足你的需求?
是的(但这取决于你想做什么)。Crypto ++ 是唯一我知道的提供ECIES、DLIES和一系列PSSR的库。
Bouncy Castle 是第二选择,因为它提供了ECIES,但没有DLIES。我不确定它提供了多少个PSSR。
Crypto ++、Bouncy Castle、OpenSSL(以及其他一些库)都提供PSSR。你不应该有任何问题找到带有PSSR的库。