python - 基于字符串的协议(protocol)安全基础

标签 python networking encryption cryptography twisted

我不确定如何表达这个问题,所以如果它与其他问题重复,请提前致歉。

我想检查一下我是如何保护我的基于扭曲的应用程序的,并认为我在这方面做得很好,但我已经十多年没有编写任何使用原始或托管套接字的东西了。

认证交易: 客户端连接并立即发送回一个包含 16 个字符的十六进制字符串的质询响应。 客户端获取用户名和密码,密码转换为 sha1(salt + sha1(password)),凭证作为 { username, password } 发送回服务器。在服务器端,身份验证执行标准查找模式(如果用户存在并且密码等于输入,则授予)。

如果用户和客户端之间的连接丢失,协议(protocol)类将自己标记为脏并断开与用户对象的连接。在此之后的任何时间,要再次访问用户对象,客户端将不得不使用新的盐重复身份验证过程。

我错过了什么吗?对于基于字符流的协议(protocol),是否有更好/更安全的方法?

最佳答案

您描述的协议(protocol)解决了一种攻击,即重放攻击。但是,您很容易受到 MITM 攻击。当攻击者进入协议(protocol)时,TCP 连接不会断开。此外,可以嗅探通过该系统传输的任何内容。如果您在咖啡馆使用无线网络,该地区的每个人都将能够嗅探传输的所有内容,然后对经过身份验证的 session 进行 MITM。另一点是 sha1() 被证明是不安全的,你应该使用 sha256 来处理任何与安全相关的事情。

永远不要重新发明轮子,尤其是在安全方面。

使用 SSL!每个人都使用 SSL,它具有久经考验的安全性,这是您无法构建的。 SSL 不仅解决了中间人攻击,而且您还可以使用证书而不是密码来验证客户端和服务器,从而使您免受暴力破解。在攻击者可以暴力破解 2048 位 RSA 证书之前,太阳会燃烧殆尽。父亲更多,您不必担心夜猫子会嗅探传输。

请记住,OpenSSL 是免费的,生成证书是免费的,证书的颁发也是免费的。虽然您想要签署证书的唯一原因是您想要实现 PKI,但这可能不是必需的。客户端可以硬编码服务器的公钥来验证连接。服务器可以有一个客户端公钥数据库。该系统将是自包含的,不需要 OCSP 或 CRL 或公钥基础设施的任何其他部分。

关于python - 基于字符串的协议(protocol)安全基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155509/

相关文章:

python - 如何使用 django 项目设置 hmail 服务器

python - 高效地获取列特定列表比较中的唯一条目

具有多个 key 和不同密码的 Java keystore

linux - netstat 如何确定符号主机名?

java - 使用 aes/ecb/pkcs5padding 解密字节数组时出现 IllegalBlockSizeException

c# - 在源代码中存储加密 key 有多安全?

python - Matplotlib - 结合文本/注释坐标系

python - 使用 statsmodels 和简单的二维线性回归出现错误 : Shapes not aligned,

linux - 使用 iptables 和 nfqueue 进行数据包转发

encryption - 最好的加密机制是Triple DES或RC4?