首页 > 解决方案 > UUID 的 Sha1 hex - 用作访问令牌

问题描述

我正在编写一个 Go OAuth 应用程序,其中我正在生成一个 UUID 并将其用作 accessToken,并将其返回给客户。我不想在 DB 中保存裸 accessToken,因为它长期有效。所以我使用 Sha1 生成哈希并将其保存如下

import "github.com/pborman/uuid"
accessToken := uuid.NewRandom()
mac := hmac.New(sha1.New, mysecretkey)
mac.Write([]byte(accessToken)
signed := mac.Sum(nil)
accessTokenDB hex.EncodeToString(signed)

通过使用 uuid 作为 accessToken,我的碰撞概率非常低。我想知道 accessTokenDB 是否也会给出同样非常低的碰撞概率。我将 accessTokenDB 保存到具有唯一索引的列中。

标签: gouuidsha1

解决方案


对于良好的加密消息或校验和,冲突的可能性几乎是不可能的。

良好的加密和校验和算法会产生与随机性无法区分的加密消息。任何更少都意味着原始消息的某些内容仍然存在。这意味着任何给定的访问令牌同样可能映射到任何可能的加密消息。任何更少的东西都会让攻击者猜测消息。

HMAC 的加密强度取决于底层散列函数的加密强度、其散列输出的大小以及密钥的大小和质量。

虽然它并没有完全被破坏,但 SHA-1 的安全性已被严重削弱。您应该使用 SHA-256 或更好。


推荐阅读