我有一个应用程序,我必须使用UDP每秒通过网络发送几个小数据。应用程序需要实时发送数据(无需等待)。我想对这些数据进行加密,并确保我所做的事情尽可能安全。
因为我使用的是UDP,所以没有办法使用SSL/TLS,所以我必须单独加密每个数据包,因为该协议是无连接/不可靠/不受监管的。
现在,我正在使用一个128位密钥,该密钥来自用户的密码短语,AES采用CBC模式(使用AES-CBC的PBE)。我决定使用带有密码短语的随机盐来派生128位密钥(防止对密码短语的字典攻击),当然还使用I(以防止对数据包进行统计分析)。
然而,我关心的是几件事:每个包包含少量的数据(就像每个包的几个整数值),这将使加密的包容易受到已知明文攻击(这将导致更容易破解密钥)。此外,由于加密密钥是从密码短语派生的,这将使密钥空间变得更小(我知道salt会有所帮助,但我必须通过网络发送salt一次,任何人都可以获得它)。有了这两件事,任何人都可以嗅探并存储发送的数据,并尝试破解密钥。虽然这个过程可能需要一些时间,但一旦密钥被破解,所有存储的数据都将被解密,这对我的应用程序来说将是一个真正的问题。
所以我的问题是,使用无连接协议(UDP)发送/加密连续的小型数据的最佳实践是什么?我的方式是最好的方式吗?...flowed?...Overkill?
请注意,我不是要求一个100%安全的解决方案,因为没有这样的事情。
发布于 2010-06-15 07:58:32
发布于 2010-06-15 03:20:23
如果你的问题是数据太小,用随机字节扩展数据怎么样?这将使明文更难猜测。
发布于 2014-04-16 00:07:20
这个问题有点老了,但是如果使用One Time Pad类型的方法呢?您可以使用安全可靠的传输机制(如HTTPS)将一次性密钥从服务器传输到客户端。可能有两组密钥--一组用于客户端到服务器,另一组用于服务器到客户端。然后,每个数据报将包括序列号(用于标识一次性密钥),然后包括加密消息。因为每个键只用于一个数据报,所以您不应该暴露在小数据问题中。也就是说,我不是这方面的专家,所以在使用之前一定要检查一下这个想法……
https://stackoverflow.com/questions/3040123
复制相似问题