加密连续/小型UDP数据的最佳实践

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (109)

我有一个应用程序,在这个应用程序中,我必须使用UDP每秒通过网络发送几个小数据。应用程序需要实时发送数据(不需要等待)。我想加密这些数据,并确保我所做的工作是尽可能安全的。

由于我使用的是UDP,所以无法使用SSL/TLS,所以我必须单独加密每个数据包,因为协议是无连接/不可靠/不受监管的。

现在,我使用的是来自用户的密码的128位密钥和CBC模式下的AES(PBE使用AES-CBC)。我决定使用带有密码的随机来派生128位密钥(防止字典对密码的攻击),当然使用IVs(防止对数据包的统计分析)。

然而,我关心的事情很少:每个数据包包含少量的数据(就像每个数据包中的两个整数值),这将使加密的数据包易受已知的明文攻击(这将导致更容易破解密钥)。而且,由于加密密钥是从密码中派生的,这将使密钥空间变得更少(我知道SALT会有所帮助,但我必须一次通过网络发送SALT,任何人都可以得到它)。考虑到这两种情况,任何人都可以嗅探和存储发送的数据,并试图破解密钥。虽然这个过程可能需要一些时间,但一旦密钥被破解,所有存储的数据都将被解密,这对我的应用程序来说将是一个真正的问题。

因此,我的问题是,使用无连接协议(UDP)发送/加密连续小数据的最佳实践是什么?我的方式是最好的方法吗?

请注意,我不是要求一个100%的安全解决方案,因为没有这样的事情。

提问于
用户回答回答于

你有几个选择,你可以使用DTLS,它是为数据报自适应的TLS的一个版本。在RFC并在OpenSSL库中实现。还可以使用IKE/IPsec协议,并使用IPsec部分的UDP封装。通常IPsec在操作系统级别上可用。也可以使用n.openvpn,它看起来是用于密钥交换的TLS和基于UDP的专有分组加密协议的混合。

用户回答回答于

如果你的问题是数据太小,那么用随机字节扩展数据如何?这将使明文更加难以猜测。

扫码关注云+社区

领取腾讯云代金券