双因素认证系统

时间:2011-04-26 04:02:01

标签: php security

我正在尝试使用SMS作为第二个auth方法设计双因素身份验证系统(在PHP上)。这是一个测试项目,因此任何人都可以帮我设计这项服务吗?

这将是一个基于网络的系统,以下是我迄今为止所做的。

  1. 一旦客户输入用户名和密码,网站就会向我们的服务器发送一个安全的HTTP请求,其中包括MSISDN,一个UID(用于识别会话),他们的UserID&密码

  2. 我们的服务器会将请求添加到MySQL数据库,并使用代码,UID和其他一些信息回复网站。

  3. 我们的服务器会向客户端发送一次性密码短信。

  4. 一旦客户端将OTP输入网站,网站将向我们的服务器发送带有加密OTP的另一个HTTPS请求,我们将发送成功或失败代码作为响应。

  5. 这是我想过的流程。谁有更好的流量?还是建议?

    感谢。

6 个答案:

答案 0 :(得分:6)

这可能很好,但不是双因素身份验证

除了密码,第二个因素可以是:

  • 你拥有的东西(例如secureid,智能卡等)。
  • 你是什么东西(即各种形式的生物识别技术)。

因为我假设你不是针对生物识别技术;),让我澄清为什么我说这不是第二个因素(你有的东西)。

为了获得第二个因素,您需要保证设备的持有者(即预先注册的手机)是 only 的人可能已收到短信 在今天的蜂窝网络中,仅仅是这样。有一些黑客可以复制,例如一张SIM卡;蜂窝运营商可以拦截;智能手机可以有拦截和重发的应用程序;等
此外,让用户将代码键入网站允许对该额外密码进行所有标准网络攻击:嗅探,拦截,MITM,会话劫持等......

现在,要清楚,这仍然有价值 - 带外通信可以帮助确保明显的用户不会受到简单的网络攻击,XSS等的伤害。
我和许多喜欢这种解决方案的电信公司合作过(它也恰好是他们商业模式的一部分,但无论如何;)

但是,根据您的情况,某些地方(例如银行,政府)需要真正的第二个因素 - 即加密证明(通常)。这不是它。

答案 1 :(得分:4)

似乎是一种有效的机制。但是如果SMS设备不在服务区呢?还是死电池?

答案 2 :(得分:2)

我只想补充说,通过短信发送OTP仍然被认为是双因素身份验证。 Avid的评论很明确

  

第二个因素,您需要保证设备的持有者(即预先注册的手机)是唯一可能收到短信的人。

但是,对于基于2FA的硬件令牌,同样适用。如何才能保证只有一个人使用硬件令牌?窃取加密狗(或在屏幕上查找OTP)比拦截短信更容易

@megazoid,您是否考虑过使用" 2FA作为服务"供应商?例如Authy.comToken2.comDuoSecurity

答案 3 :(得分:1)

每个人都喜欢短信,但在我看来很糟糕。无论SMS Passcode多少都试图改善工作流程。

攻击者可以请求短信并拦截短信,而无需用户注意到。为此,他甚至不需要偷电话。 在我看来,这是最严重的攻击,因为受害者不会意识到,他已经受到了损害。

当窃取加密狗时,用户知道他已被盗用并且可以执行相关的反措施。

从供应商那里窃取加密狗的种子是一个更好的攻击媒介,过去也会显示出来; - )

这就是为什么你应该考虑使用硬件令牌,你可以自己种子。所以你可以肯定,种子只属于你。可种子代币是yubikey,eToken Pass和eToken NG OTP。

无论如何,对于低安全性"即使使用短信环境也可以。但是你需要意识到后果。顺便说一下,开源项目privacyIDEA支持所有这些令牌。

答案 4 :(得分:0)

我邀请您在我们为Duo开源的客户中寻找我们的双因素身份验证系统的想法:

https://github.com/duosecurity/duo_web

另一个值得关注的地方是现有的第三方身份验证协议,例如OAuth和OpenID。

你没有提到的两件事:

  • 签名的响应应包含用户ID,以便与本地用户进行比较(可能存储在安全会话中)以避免重放
  • 签名的回复应包括过期,或返回已签名请求中给出的现时

答案 5 :(得分:0)

来自Twilio的Ricky。

我们刚刚发布了non-trivial, production-ready example Two-Factor Authentication tutorial,您可以查看是否正在寻找如何构建此类系统的灵感。