我根本没有关于加密的线索.但我需要它.怎么样?
假设您有一个节点系统通过异步消息在网络上相互通信.节点不维护有关其他节点的会话信息(这是设计限制).
假设您要确保只有您的节点可以读取正在发送的消息.我相信加密就是解决这个问题的方法.
由于节点不维护会话并且通信必须以无状态,无连接的方式工作,我猜测不对称加密被排除在外.
所以这就是我想做的事情:
消息作为UDP数据报发送
每条消息都包含一个时间戳,使消息不同(计数器重放攻击)
每条消息都使用共享密钥对称密钥加密,并通过网络发送
另一端可以用共享秘密对称密钥解密
显然,密钥可以通过危害任何单个节点而受到损害.同时,在这种情况下,访问任何单个被入侵的节点无论如何都会显示所有有趣的信息,因此密钥不是最薄弱的环节.
我应该使用什么密码进行此加密?什么关键长度?
我更喜欢使用ezPyCrypto支持的东西.
假设,正如大多数人指出的那样,我选择了AES.我应该使用哪些模式?
我无法弄清楚如何使用ezPyCrypto,PyCrypto似乎挂在主持人交换和谷歌keyczar没有解释如何设置它 - 我担心,如果我不只是得到它,那么我冒险引入不安全感.所以准系统会更好.这家伙声称在python中有一个很好的AES模块,但他也声称这是他的第一个python项目 - 尽管他可能比我更聪明,也许他被绊倒了?
编辑:我将搜索python实现移动到另一个问题,以阻止clobber ...
我根本没有关于加密的线索.但我需要它.怎么样?
危险!如果您对密码学了解不多,请不要尝试自己实现.密码学很难做到.除了实际破解密钥之外,还有许多不同的方法可以破解加密系统的安全性(这通常非常困难).
如果您只是对流式数据采用密码,如果没有仔细的密钥管理和其他对加密系统细微之处的理解,您可能会遇到各种漏洞.例如,您描述的方案在没有针对节点之间的密钥分发的特定计划的情况下将容易受到中间人攻击,并且可能易受选择明文和/或已知明文攻击的影响,具体取决于您的分布式系统与外界通信,以及密码和操作模式的确切选择.
所以......在你可以安全地使用它之前,你必须阅读一般的加密.
您的第一个想法应该是渠道安全 - SSL/TLS或IPSec.
不可否认,这两者都有一定的设置开销,IPSec比SSL/TLS更多,特别是在涉及PKI等时 - 但它在开发,可靠性,安全性等方面不仅仅是自己付出的代价.请确保您使用的是强密码套件,以适应协议.
如果SSL/TLS或IPSec都不适合您的场景/环境,那么您的下一个选择应该是AES(又名Rijndael).
使用至少256位长的键,如果你想要你可以更长.
密钥应该由加密安全的随机数生成器(而不是简单的rnd()调用)随机生成.
将密码模式设置为CBC.
使用PKCS7填充.
生成一个独特的加密随机初始化向量(IV).不要忘记妥善保护和管理密钥,也可以考虑定期进行密钥轮换.
根据您的数据,您可能还希望实现密钥散列,以提供消息完整性 - 使用SHA-256进行散列.
在极少数情况下,您可能希望使用流密码,但这通常更复杂,我建议您在第一次使用时避免使用它.
现在,我不熟悉ezpycrypto(或者通常是python),并且不能说它支持所有这些; 但是这里的一切都是非常标准和推荐的最佳实践,如果你的加密库不支持它,我会建议找到一个;-).