2011-12-01 289 views
3

我需要创建一个登录令牌,我可以在查询字符串中将站点1传递给站点2。我并不需要转移的用户名或ID,我只需要知道在现场2,用户对网站的有效登录1.使用sha256登录令牌

我目前创建这样

timestamp|sha256(timestamp+secret) 

在令牌站点2我创建了给定时间戳+秘密的sha256,并将其与给定的哈希匹配。我也检查时间戳,并且不验证它是否大于5分钟。

这是一个合理安全的方式吗?

破解sha256并获得秘密会很容易吗?

+1

我想指出[Crypto.SE](http://crypto.stackexchange.com/)的可用性。你会发现那里的专家可以回答关于这个问题的密码方面的问题。 – derobert

+0

+1本能。 – rook

回答

3

您可以使用HMAC在已有共享密钥的双方之间提供已认证的消息。你所描述的与HMAC非常相似,因为它是一种消息认证码。虽然我实际上会使用HMAC功能来做到这一点。

为了破解hmac,你必须使用认证码(消息的散列部分)暴力破解密码。攻击者知道时间戳,所以他们可以继续猜测秘密。只要将密码设置得非常大而且非常随机,就像/ dev/random的某些输出是一个不错的选择。

+0

这不一样; HMAC可以防止散列扩展攻击,简单的连接不会。 – derobert

+0

这并不意味着这是一种压制,我很遗憾,它就是这样。我想确保它看起来与HMAC非常相似,但安全性方面则与其非常不同。加密是不幸的,就像那样。 OP应该遵循您的建议来使用HMAC。 (而且SHA256很容易受到长度扩展攻击的影响,几乎所有常见的哈希都是,它不是他们设计标准的一部分)。另请参阅http://crypto.stackexchange.com/questions/1186/is-hklengthx-a-secure-mac-construction – derobert

+0

@derobert让我问你,这是一个长度延长攻击sha256一个捷径与暴力强制秘密?我可能会说不。如果他使用md5或更糟糕的md4,那么我会更关心。无论我们是否同意他应该使用hmac。 – rook

1

正如@Rook所说,您应该使用HMAC来验证您的令牌。

此外,您需要确保您的代币不会被盗。例如,如果您以明文形式发送该令牌(无论是从站点1到用户还是从用户到站点2),任何听取(认为Firesheep)的人都可以“证明”他们有帐户。您可以做的最好的做法是防止使用SSL/TLS。