我正在使用一款应用程序,需要通过UDP网络每秒发送多个小数据。应用程序需要实时发送数据(无需等待)。我想加密这些数据,并确保我的操作尽可能安全。
由于我使用的是UDP,因此无法使用SSL/TLS,所以我必须仅对每个数据包进行加密,因为该协议是无连接/不可靠/未受监管的。
现在,我正在使用从用户密码短语派生的128位密钥和CBC模式下的AES(使用AES-CBC的PBE)。我决定在密码短语中使用随机盐来派生128位密钥(防止字典攻击密码短语),当然还要使用IV(防止用于数据包的统计分析)。
但我担心几件事情:每个数据包仅包含少量数据(例如每个数据包仅包含几个整数值),这将使得加密数据包易受已知明文攻击(这会使破解密钥更容易)。此外,由于加密密钥是从密码短语派生的,因此密钥空间将变得非常小(我知道盐会有所帮助,但我必须将盐一次性发送到网络上,任何人都可以获取它)。鉴于这两点,任何人都可以嗅探和存储发送的数据,并尝试破解密钥。虽然这个过程可能需要一些时间,但一旦破解了密钥,所有存储的数据都将被解密,这对我的应用程序将是一个真正的问题。
因此,我的问题是,使用无连接协议(UDP)发送/加密连续小数据的最佳实践是什么?我的方法是最好的方法吗?……有点冗长?……过于复杂?
请注意,我并不要求100%安全的解决方案,因为不存在这样的东西。