我的目标是轻量级的消息签名,与PGP相当,除了只需要一个私钥,没有公钥关联。目标仅仅是防止在两个可信实体之间篡改字符串。它从受信任的来源开始,通过互联网,然后到达另一个受信任的目的地。
我想知道我的天真方法是否安全。因为签名算法实际上不会被强制使用。
1)源和目的地都有一个“私钥”,它只是uuidgen生成的一个非常随机的数字。
2)Source有一个打算发送到目的地的字符串。
3)Source将有效负载字符串与私钥连接起来,然后sha1是结果,以产生签名。
4)生成的纯文本值+签名将成对发送到目的地。 “你好// SIG:12345ABCDEFG”
5)Desination接收有符号变量,用其已知的私钥生成签名,并再次比较与接收数据配对的签名。如果匹配,则接受。
此变体将包含舍入到小时的unix时间戳,使签名过期。
我担心的是,在给定一组有选择的数据有效负载并使用这种方法分析结果签名的情况下强制私钥是否可行。
由于
答案 0 :(得分:6)
您希望实现的与HMAC(article on Wikipedia)非常相似。
对于HMAC,您执行一些额外步骤以将消息和密钥组合到散列中。这使得得到的散列比仅通过简单地连接原始消息和秘密密钥以及散列的散列更难以进行攻击。
如果你想尽可能多地使用加密标准(在我看来 - 几乎总是一件好事),我会按照HMAC定义规定的方式来做这件事。为了使签名过期,我只需将过期日期附加到消息上,然后构建该组合字符串的HMAC。