我有一个应用程序,我必须使用UDP通过网络每秒发送几个小数据.应用程序需要实时发送数据(无需等待).我想加密这些数据并确保我所做的事情尽可能安全.
由于我使用的UDP,没有办法使用SSL/TLS,所以我有,因为协议是无连接/不可靠/不受监管的每个数据包加密孤单.
现在,我使用从用户密码派生的128位密钥,AES CBC模式(PBE使用AES-CBC).我决定使用带密码的随机盐来获取128位密钥(防止对密码短语的字典攻击),当然还要使用IV(以防止对数据包进行统计分析).
不过,我很担心几件事情:每个数据包中含有少量的数据(比如一对夫妇每包的整数值),这将使得加密的数据包受到已知明文攻击(这将导致更容易破解密钥) .此外,由于加密密钥是从口令派生,这将使密钥空间的方式少(我知道盐可以帮助,但我通过网络发送一次盐,任何人都可以得到它).鉴于这两件事,任何人都可以嗅探并存储发送的数据,并尝试破解密钥.虽然这个过程可能需要一些时间,但一旦密钥被破解,所有存储的数据都将被解密,这对我的应用程序来说将是一个真正的问题.
所以我的问题是,使用无连接协议(UDP)发送/加密连续小数据的最佳做法是什么?我的方式是最好的方式吗?...流入?...矫枉过正?
请注意,我不是要求100%安全的解决方案,因为没有这样的事情.
你有几个选择.您可以使用DTLS,它是适用于数据报的TLS版本.它在RFC中指定并在openssl库中实现.您还可以使用IKE/IPsec协议并使用IPsec部分的UDP封装.通常,IPsec在操作系统级别可用.您还可以使用OpenVPN,它看起来是用于密钥交换的TLS和基于UDP的专有数据包加密协议的混合体.