生成我可以证明我生成的令牌

Cra*_*Day 9 security encryption

我需要生成随机令牌,这样当我稍后看到它们时我绝对可以确定它们实际上是由我生成的,即其他人几乎不可能生成假令牌.这有点像序列号生成,除了我不需要唯一性.实际上,它很像数字签名,除了我是唯一需要验证"签名"的人.

我的解决方案如下:

  1. 有一个秘密字符串S(这是唯一没有打开的数据)
  2. 对于每个令牌,生成随机字符串K.
  3. 令牌= K + MD5(K + S)

验证令牌是我生成的:

  1. 将传入令牌分成K + H.
  2. 计算MD5(K + S),确保等于H.

在我看来,任何人都不可能可靠地生成H,给定K没有S.这个解决方案太简单了吗?

Dus*_*tin 5

查看HMAC.


小智 3

您提出的解决方案是正确的。您本质上是在与自己执行质询-响应身份验证。每个令牌可以包含一个非秘密质询字符串 C 和 HMAC(C, K),其中 K 是服务器的秘密密钥。

要验证令牌,只需使用提供的 C 值重新计算 HMAC 并查看它是否与提供的 HMAC 值匹配。

另外,正如 Vinko 提到的,你不应该使用 MD5;SHA-256 是一个不错的选择。