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

时间:2008-11-27 06:41:29

标签: security encryption

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

我的解决方案如下:

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

    1. 将传入令牌拆分为K + H
    2. 计算MD5(K + S),确保等于H
    3. 在我看来,任何人都不可能可靠地生成H,假设K没有S.这个解决方案太简单了吗?

4 个答案:

答案 0 :(得分:5)

查看HMAC

答案 1 :(得分:3)

您提出的解决方案是正确的。你基本上是在做自己的challenge-response authentication。每个令牌可以包含一个非秘密质询字符串C和HMAC(C,K),其中K是您服务器的密钥。

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

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

答案 2 :(得分:1)

这不是太简单,这当然是实现简单数字签名的有效方式。

当然,您无法向任何人 else 证明您在不泄露您的密钥S的情况下生成了签名,但为此您需要使用更复杂的协议,如PKI。< / p>

答案 3 :(得分:1)

只是为了挑剔,你会证明任何有权访问S的人都可以生成令牌。另一个小细节:使用更好的哈希,比如SHA256。因为如果马洛里能够产生碰撞,她甚至不需要知道S。