Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 我的一次性密码实现是否足够安全?_Security_Http_Authentication_Web_One Time Password - Fatal编程技术网

Security 我的一次性密码实现是否足够安全?

Security 我的一次性密码实现是否足够安全?,security,http,authentication,web,one-time-password,Security,Http,Authentication,Web,One Time Password,我想实现一个登录机制来验证我的web应用程序的管理员。但由于我没有使用ssl,我不能依靠用户通过html表单发送密码 所以我考虑使用一次性密码(实际上我不知道这件事,我最终重新发明了这个概念,并最终发现这样的东西已经存在) 我想要的只是你对我的实施有多安全的看法: 1) 客户端请求一个随机且唯一的散列。服务器生成该散列,将其存储在会话变量中,并将散列返回给客户端 2) 从该散列中,客户机使用只有他和服务器才知道的自定义算法导出密码。该密码将发送回服务器 3) 服务器也会执行同样的操作,并检查密码

我想实现一个登录机制来验证我的web应用程序的管理员。但由于我没有使用ssl,我不能依靠用户通过html表单发送密码

所以我考虑使用一次性密码(实际上我不知道这件事,我最终重新发明了这个概念,并最终发现这样的东西已经存在)

我想要的只是你对我的实施有多安全的看法:

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

2) 从该散列中,客户机使用只有他和服务器才知道的自定义算法导出密码。该密码将发送回服务器

3) 服务器也会执行同样的操作,并检查密码是否匹配,如果匹配,则检查用户是否经过身份验证

这能破解吗?

“只有他和服务器知道的自定义算法”。设计打破了这一点,因为您完全依赖于保密的算法

一旦您发布了实现(例如,作为客户端JavaScript),它就不再是一个秘密,更不用说协议中的任何内在弱点了

我的观点:除非你是密码专家,否则永远不要推出自己的解决方案。坚持使用公共、可靠和经验证的协议,并且只使用信誉良好的实现。

“只有他和服务器才知道的自定义算法”。设计打破了这一点,因为您完全依赖于保密的算法

一旦您发布了实现(例如,作为客户端JavaScript),它就不再是一个秘密,更不用说协议中的任何内在弱点了


我的观点:除非你是密码专家,否则永远不要推出自己的解决方案。坚持使用公共、可靠和经验证的协议,只使用信誉良好的实现。

但您知道,我不必也不打算“分发”实现。实现的唯一部分是服务器和单个客户端。它不会有太大的变化。。。底线是,长期以来,默默无闻的安全措施被证明是无效的。密码分析技术可以用来发现算法。如果连接没有安全加密,任何人都可以观察到你与服务器交换的内容,并可能“窃取”你的身份作为最后手段。我认为交换的哈希对任何观察者都是无用的,这一点很清楚。现在我看不出任何技术如何能够发现自定义哈希生成器的所有实现(它可以是任何东西!例如,我可以在每次迭代中使用不同的salt执行md5+sha1+md5 7204134次)。只有攻击者能够进行数以万亿计的测试,但我当然不会允许这么多尝试。例如,如果我每分钟只允许一次尝试,任何人都几乎不可能破解我。也许到了2099年,这个可怜的家伙会陷入困境。此外,人们可能会通过观察请求和响应的时间来猜测应用了哪些操作。我建议学习Diffie-Hellman密钥协议和社会主义百万富翁协议。无论如何,您最终将重新实现TLS/SSL已经提供的大部分功能。记住Kerckhoff的原则:“密码系统应该是安全的,即使系统的所有内容(除了密钥)都是公共知识”(或者,正如Claude Shannon所说,“敌人知道系统”)。此外,散列算法并不意味着要这样组合;这并不能让它们更安全,事实上,它更容易被打破。软件开发人员理解为什么永远不应该发明自己的加密技术,这一点非常重要,我再怎么强调也不为过。进去问问;那些家伙真的很了解他们的东西。但是你看,我不必也不打算“分发”实现。实现的唯一部分是服务器和单个客户端。它不会有太大的变化。。。底线是,长期以来,默默无闻的安全措施被证明是无效的。密码分析技术可以用来发现算法。如果连接没有安全加密,任何人都可以观察到你与服务器交换的内容,并可能“窃取”你的身份作为最后手段。我认为交换的哈希对任何观察者都是无用的,这一点很清楚。现在我看不出任何技术如何能够发现自定义哈希生成器的所有实现(它可以是任何东西!例如,我可以在每次迭代中使用不同的salt执行md5+sha1+md5 7204134次)。只有攻击者能够进行数以万亿计的测试,但我当然不会允许这么多尝试。例如,如果我每分钟只允许一次尝试,任何人都几乎不可能破解我。也许到了2099年,这个可怜的家伙会陷入困境。此外,人们可能会通过观察请求和响应的时间来猜测应用了哪些操作。我建议学习Diffie-Hellman密钥协议和社会主义百万富翁协议。无论如何,您最终将重新实现TLS/SSL已经提供的大部分功能。记住Kerckhoff的原则:“密码系统应该是安全的,即使系统的所有内容(除了密钥)都是公共知识”(或者,正如Claude Shannon所说,“敌人知道系统”)。此外,散列算法并不意味着要这样组合;这并不能让它们更安全,事实上,它更容易被打破。软件开发人员理解为什么永远不应该发明自己的加密技术,这一点非常重要,我再怎么强调也不为过。进去问问;那些家伙真的很在行。