基于字符串的协议安全性基础知识

Dav*_*vid 5 python encryption networking cryptography twisted

我不确定如何说出这个问题,如果它与其他内容重复,请提前道歉.

我想要理智地检查我是如何保护我的扭曲应用程序并认为我已经做得很好,但是自从我编写了使用原始或托管套接字的任何东西以来已经过去了十多年.

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

如果用户和客户端之间的连接丢失,则协议类将自身标记为脏,并将自身与用户对象断开连接.在此之后的任何时候,为了再次访问用户对象,客户端必须使用新的盐重复身份验证过程.

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

roo*_*ook 6

您描述的协议解决了一次攻击,即重放攻击.但是,您很容易受到MITM攻击.当攻击者进入协议时,TCP连接不会丢失.通过该系统传输的任何东西都可以被嗅探.如果您在咖啡馆的无线网络上,该区域的每个人都将能够嗅探传输的所有内容,然后MITM进行身份验证会话.另一点是sha1()被证明是不安全的,你应该使用sha256来解决任何安全问题.

永远不要重新使用轮子,特别是在安全方面.

使用SSL!每个人都使用SSL,它有一个久经考验的secuirty历史,这是你无法建立的.SSL不仅解决了中间攻击中的人,而且您还可以使用证书而不是密码来验证客户端和服务器,这使您免受暴力攻击.在攻击者强行获得2048位RSA证书之前,太阳将会燃尽.父亲,你不必担心前夕滴管嗅探传输.

请记住,OpenSSL是免费的,生成证书是免费的,证书的唱歌是免费的.虽然您想要签署证书的唯一原因是您希望实施PKI,这可能不是必需的.客户端可以对服务器的公钥进行硬编码以验证连接.服务器可以具有客户端公钥的数据库.该系统将是自包含的,不需要OCSP或CRL或公钥基础结构的任何其他部分.

  • +1 SSL.使用SSL并不是一个神奇的子弹,并且会有(并且已经存在)漏洞.但是,有很多人关注SSL并为您修复这些漏洞.当您发明一种新的安全方案时,很可能只有那些在其中寻找漏洞的人才会试图攻击您.当他们找到漏洞时,他们不会修复你的漏洞,他们会利用它们. (6认同)
  • 如果使用SSL,请记住客户端必须验证服务器证书是否正确.这不一定由您的SSL库自动完成!太多的应用程序错过了这个,但如果您接受任何随机证书,TLS/SSL完全容易受到MITM攻击. (3认同)