我有一个Web应用程序,我的任务是添加安全登录以增强安全性,类似于Google添加到Google账户的内容。
使用情况: 基本上,当用户登录时,我们希望检测用户是否先前已经授权过此计算机。如果计算机没有被授权,那么用户将收到一次性密码(通过电子邮件、短信或电话呼叫),并需要输入该密码,用户可以选择记住此计算机。在Web应用程序中,我们将跟踪授权设备,允许用户查看他们上次从该设备登录的时间/地点,并取消授权任何设备(如果他们选择这样做)。
我们需要一个非常轻量级的解决方案(即不需要客户端软件安装),并且与Safari、Chrome、Firefox和IE 7+(不幸的是)兼容。我们将提供x509安全性,这提供了足够的安全性,但我们仍然需要为无法或不会使用x509的客户提供解决方案。
我的意图是使用cookie存储授权信息(或者,潜在地使用本地存储,降级到Flash cookie,然后是普通cookie)。
乍一看: 跟踪两个分离的值(本地数据或cookie):表示安全登录令牌的哈希,以及设备令牌。这两个值都由Web应用程序驱动(并记录),并由客户端指定。SSO令牌取决于设备以及序列号。这有效地允许设备被取消授权(所有SSO令牌变为无效),并通过使用序列号和使用nonce来减轻重放攻击(虽然不是很有效,这就是我提出此问题的原因)。
问题: 使用此解决方案,有人可能只需复制SSO和设备令牌,并在另一个请求中使用。虽然序列号将帮助我检测此类滥用并因此取消授权设备,但检测和响应只能在有效设备和恶意请求都尝试访问后发生,这给了足够的时间造成损害。
我觉得使用HMAC会更好。跟踪设备、序列号、创建nonce、时间戳和哈希以及私钥,然后发送明文的哈希加上这些值。服务器也会这样做(除了验证设备和序列号之外),并进行比较。这似乎更容易,更可靠……假设我们可以安全地协商、交换和存储私钥。
问题: 那么,如何安全地协商授权设备的私钥,然后安全地存储该密钥呢?如果我同意使用本地存储或Flash cookie存储私钥并且只说“足够好”,那么是否更有可能?或者,我是否可以对我的原始草案进行一些处理来减轻我所描述的漏洞?
使用情况: 基本上,当用户登录时,我们希望检测用户是否先前已经授权过此计算机。如果计算机没有被授权,那么用户将收到一次性密码(通过电子邮件、短信或电话呼叫),并需要输入该密码,用户可以选择记住此计算机。在Web应用程序中,我们将跟踪授权设备,允许用户查看他们上次从该设备登录的时间/地点,并取消授权任何设备(如果他们选择这样做)。
我们需要一个非常轻量级的解决方案(即不需要客户端软件安装),并且与Safari、Chrome、Firefox和IE 7+(不幸的是)兼容。我们将提供x509安全性,这提供了足够的安全性,但我们仍然需要为无法或不会使用x509的客户提供解决方案。
我的意图是使用cookie存储授权信息(或者,潜在地使用本地存储,降级到Flash cookie,然后是普通cookie)。
乍一看: 跟踪两个分离的值(本地数据或cookie):表示安全登录令牌的哈希,以及设备令牌。这两个值都由Web应用程序驱动(并记录),并由客户端指定。SSO令牌取决于设备以及序列号。这有效地允许设备被取消授权(所有SSO令牌变为无效),并通过使用序列号和使用nonce来减轻重放攻击(虽然不是很有效,这就是我提出此问题的原因)。
问题: 使用此解决方案,有人可能只需复制SSO和设备令牌,并在另一个请求中使用。虽然序列号将帮助我检测此类滥用并因此取消授权设备,但检测和响应只能在有效设备和恶意请求都尝试访问后发生,这给了足够的时间造成损害。
我觉得使用HMAC会更好。跟踪设备、序列号、创建nonce、时间戳和哈希以及私钥,然后发送明文的哈希加上这些值。服务器也会这样做(除了验证设备和序列号之外),并进行比较。这似乎更容易,更可靠……假设我们可以安全地协商、交换和存储私钥。
问题: 那么,如何安全地协商授权设备的私钥,然后安全地存储该密钥呢?如果我同意使用本地存储或Flash cookie存储私钥并且只说“足够好”,那么是否更有可能?或者,我是否可以对我的原始草案进行一些处理来减轻我所描述的漏洞?