我尝试设计一种对文件(音频)进行加密并将其存储在光盘中的系统,以便只有我的客户(小程序)才能解密并播放它们。因此,我决定使用AES密码进行批量加密并将密钥存储在数据库中。我的问题是安全转移密钥。
在现代系统中,使用SSL传输未加密存储的密钥和数据。在SSL/TLS设计中,会话密钥是通过两种方式生成的:
客户端创建密钥的第一种方法是对其加密服务器的公共密钥(证书)。
第二个选项更安全,并且在检测到heartbleed安全漏洞后变得更加重要。在此选项中,客户端和服务器使用每个会话的(EC)DHE密钥约定来创建密钥。
对于我的情况,也有两个选择。
第一种情况;
客户端(小程序)可以创建临时RSA密钥对,并将公共密钥发送到服务器。
服务器使用客户端的公共密钥加密密钥,然后发送给客户端。
客户端(小程序)使用私钥解密私钥。
客户端(小程序)可以流式解密音频文件并播放。
第二种情况;
客户端(小程序)和服务器使用(EC)DHE协商会话密钥。
服务器与会话密钥对称地加密秘密密钥并发送给客户端。
客户端(小程序)使用会话密钥解密秘密密钥。
客户端(小程序)可以轻松解密音频文件并播放。
哪种选择适合我的情况?每种情况的利弊是什么?
感谢您的回答。
最佳答案
这两种解决方案在中间人的位置都容易受到主动攻击者的攻击,因为密钥交换未经身份验证。通过使用X.509 PKI在SSL / TLS中解决了此问题。例如,也可以通过向您的客户端提供服务器的公钥的先验知识来解决。
话虽这么说,但在您的两个选项之间,最好使用(EC)DHE,因为从预先计算的DH组生成新的DH密钥(也称为DH参数)的速度很快,而生成新的RSA密钥的速度却很慢。