我遇到需要提供身份验证的令牌的情况。我发现的常见HMAC程序是:
- 使用登录凭据获取一些密钥
- 创建消息,附加密钥和其他消息数据(按定义的顺序)
- 使用密钥哈希
- 传输消息,并包含消息中的值(未散列)
醇>
然后
- 收到消息
- 使用未散列值重建消息
- 使用密钥哈希
- 如果哈希值匹配,则表示信息正常。
醇>
我正在实施类似的东西 - 但我认为我不需要做一些这些步骤。我想知道:我的实现是否在逻辑中存在安全漏洞?
我的实施:
- 客户端要求服务器生成令牌 - 这需要登录凭据。
- 服务器创建一个令牌但不返回它(它保存在数据库中) - 它返回一个时间戳。
- 客户端根据时间戳,用户和其他数据生成消息。
- 客户端使用在此过程之外提供的密钥对令牌进行哈希处理。
- 客户端将令牌发送到服务器。
醇>
然后:
- 收到消息
- 如果该令牌在数据库中,则有效
醇>
我在取消消息重建时的理由是:生成令牌时发生的事情,客户端无法知道数据库中的令牌,除非知道如何生成令牌,这意味着他们进行了身份验证并拥有秘密键。