我正在尝试使用SMS作为第二个auth方法设计双因素身份验证系统(在PHP上)。这是一个测试项目,因此任何人都可以帮我设计这项服务吗?
这将是一个基于网络的系统,以下是我迄今为止所做的。
一旦客户输入用户名和密码,网站就会向我们的服务器发送一个安全的HTTP请求,其中包括MSISDN,一个UID(用于识别会话),他们的UserID&密码
我们的服务器会将请求添加到MySQL数据库,并使用代码,UID和其他一些信息回复网站。
我们的服务器会向客户端发送一次性密码短信。
一旦客户端将OTP输入网站,网站将向我们的服务器发送带有加密OTP的另一个HTTPS请求,我们将发送成功或失败代码作为响应。
这是我想过的流程。谁有更好的流量?还是建议?
感谢。
答案 0 :(得分:6)
这可能很好,但不是双因素身份验证。
除了密码,第二个因素可以是:
因为我假设你不是针对生物识别技术;),让我澄清为什么我说这不是第二个因素(你有的东西)。
为了获得第二个因素,您需要保证设备的持有者(即预先注册的手机)是 only 的人可能已收到短信
在今天的蜂窝网络中,仅仅是这样。有一些黑客可以复制,例如一张SIM卡;蜂窝运营商可以拦截;智能手机可以有拦截和重发的应用程序;等
此外,让用户将代码键入网站允许对该额外密码进行所有标准网络攻击:嗅探,拦截,MITM,会话劫持等......
现在,要清楚,这仍然有价值 - 带外通信可以帮助确保明显的用户不会受到简单的网络攻击,XSS等的伤害。
我和许多喜欢这种解决方案的电信公司合作过(它也恰好是他们商业模式的一部分,但无论如何;)
但是,根据您的情况,某些地方(例如银行,政府)需要真正的第二个因素 - 即加密证明(通常)。这不是它。
答案 1 :(得分:4)
似乎是一种有效的机制。但是如果SMS设备不在服务区呢?还是死电池?
答案 2 :(得分:2)
我只想补充说,通过短信发送OTP仍然被认为是双因素身份验证。 Avid的评论很明确
第二个因素,您需要保证设备的持有者(即预先注册的手机)是唯一可能收到短信的人。
但是,对于基于2FA的硬件令牌,同样适用。如何才能保证只有一个人使用硬件令牌?窃取加密狗(或在屏幕上查找OTP)比拦截短信更容易
@megazoid,您是否考虑过使用" 2FA作为服务"供应商?例如Authy.com,Token2.com或DuoSecurity?
答案 3 :(得分:1)
每个人都喜欢短信,但在我看来很糟糕。无论SMS Passcode多少都试图改善工作流程。
攻击者可以请求短信并拦截短信,而无需用户注意到。为此,他甚至不需要偷电话。 在我看来,这是最严重的攻击,因为受害者不会意识到,他已经受到了损害。
当窃取加密狗时,用户知道他已被盗用并且可以执行相关的反措施。
从供应商那里窃取加密狗的种子是一个更好的攻击媒介,过去也会显示出来; - )
这就是为什么你应该考虑使用硬件令牌,你可以自己种子。所以你可以肯定,种子只属于你。可种子代币是yubikey,eToken Pass和eToken NG OTP。
无论如何,对于低安全性"即使使用短信环境也可以。但是你需要意识到后果。顺便说一下,开源项目privacyIDEA支持所有这些令牌。
答案 4 :(得分:0)
我邀请您在我们为Duo开源的客户中寻找我们的双因素身份验证系统的想法:
https://github.com/duosecurity/duo_web
另一个值得关注的地方是现有的第三方身份验证协议,例如OAuth和OpenID。
你没有提到的两件事:
答案 5 :(得分:0)
来自Twilio的Ricky。
我们刚刚发布了non-trivial, production-ready example Two-Factor Authentication tutorial,您可以查看是否正在寻找如何构建此类系统的灵感。