【发布时间】:2014-04-26 01:26:07
【问题描述】:
我为商场制作了一些广告软件,它有一堆客户端(屏幕)和一个服务器,它们从中获取内容。到目前为止,它一直在一个单独的 LAN 中工作,所以我什至没有想到安全性,但他们问我是否可以通过 Internet 对其进行管理。
我尝试提出一个合理的解决方案,例如 A 计划
- 客户端发送“我要登录消息”
- 服务器以随机生成的密钥响应
- 客户端发送使用所述密钥加密的密码
- 服务器用另一个密钥响应,用第一个密钥加密
- 客户端现在可以使用最后一个密钥来加密/解密任何进一步的通信
但后来我开始思考,发送另一个密钥有什么意义?如果有人观察流量可以找出我正在使用的算法,那么我发送多少加密密钥都没有关系,如果他们可以根据原始未加密密钥对它们进行解码。
B计划
- 客户端发送使用密码加密的用户名
停在那里,然后它只是一个固定的消息,将授予访问权限
C计划
- 为客户端和服务器提供用户/密码组合(每个用户)
- 每次客户端使用密码加密的用户登录(用于加密此会话中的所有进一步通信),服务器都会发送一个新密码,因此旧密码不能再次使用
很好,除了它仍然存在 A 计划的问题并带来更多问题,例如如果客户端在发送登录后立即中断通信并且没有获得新密码...
无论我怎么看,如果解密算法是可以计算出来的,那么安全性就会存在漏洞。
好的 D 计划!
- 客户端和服务器手动获得一个加密密钥
- 客户端使用密钥来加密所有通信,甚至可能请求额外的密钥与第一个密钥结合使用以进一步复杂解密
关键是,原始密钥永远不会通过网络发送。
好吧..这个似乎工作。显然,只要花费足够的时间,任何东西都可以被黑客入侵,但也许足以让它变得不值得。问题是,这个有点笨拙,每次安装客户端都需要手动输入密钥。它很可能会很长而且很复杂,而你一般懒惰的人可能只会通过邮件发送它......嗯,目的失败了。
我现在不知道该怎么办。如果我能获得与您运行磨坊登录类型网站(例如这个)相同级别的安全性,那对我来说很好。他们如何仅使用用户+密码来处理它?
【问题讨论】:
-
如果服务器是一个流氓间谍,你刚刚泄露了你的 [plaintext] 密码。此外,“[新] 另一个密钥”也不安全,因为任何监视器也可以看到它被加密的“原始密钥”。安全很难。使用现有经过验证的方法。在这种情况下,请搜索 cryptography Key Exchange。
-
如您所见,密码学就是关于密钥的。有关该主题的更多信息:blogs.msdn.com/b/ericlippert/archive/2011/09/27/…
-
嗯,我从那 2 中得到的是没有最终答案,基于当前的技术可能永远不会:/谢谢。
-
为什么不使用 SSL/TLS 和密码?客户端需要知道服务器的公钥和密码,一旦建立连接就可以安全地发送密码。
-
“合理的解决方案”已经存在。它被称为 SSL。用它。不要试图自己动手。您不会成功地使它比 SSL 更好,或者在实践中几乎没有任何效果。因此,尝试没有意义。到目前为止,您所做的事情并不安全。
标签: security networking encryption cryptography