2014-02-22 47 views
0

我想实现一个登录机制来验证我的web应用程序的管理员。但由于我不使用ssl,我不能依靠用户通过html表单发送密码。我的一次性密码的安全性是否足够安全?

所以我想过使用一次性密码(其实我不知道这件事情,我结束了重塑的概念,并最终发现了这样的东西已经存在)

我要的是你的意见我的实现有多安全:

1)客户端请求一个随机且唯一的散列。服务器生成该散列,将其存储在会话变量中并将散列​​返回给客户端。

2)通过该散列,客户端使用仅由他和服务器知道的自定义算法派生密码。该密码被发送回服务器。

3)服务器做同样的事情,并检查密码是否匹配,如果他们确实认证了用户。

这可以破解吗? “

回答

5

”只有他和服务器已知的自定义算法“。这是由设计打破的,因为你完全依赖算法是秘密的。

只要您分发实现(例如,作为客户端JavaScript),它就不再是秘密了,更不用说协议的任何内在弱点了。

我的2cents:除非你是加密专家,否则不要推出自己的解决方案。坚持公开,完善和经过验证的协议,只使用信誉良好的实施。

+0

但你看,我不必也不会“分发”实现。实现的唯一部分是服务器和单个客户端。 – fabio

+0

它不会发生太大的变化......底线是,自从很久以前,通过obscurity_的安全性已被证明是无效的。密码分析技术可以用来发现算法。如果连接没有安全加密,任何人都可以观察你与服务器交换的内容,并有可能“偷走”你的身份作为最后的手段。 –

+0

交换哈希对任何观察者都是没用的,我想这很清楚。现在我看不出有什么技术可以发现自定义哈希生成器的所有实现(它可以是任何东西!例如,我可以在每次迭代中使用不同的salt来完成md5 + sha1 + md5 7204134次)。只有攻击者能够进行数万亿次的测试,当然我不会允许这么多的尝试。如果我每分钟只允许一次尝试,那么任何人都几乎不可能破解我。也许到了2099年,这个可怜的家伙会进入一些事情。 – fabio