Ruby:密码签名字符串以确保真实性?

时间:2012-04-09 10:07:09

标签: ruby encryption digital-signature public-key-encryption

假设我有一个源服务器,通过具有特定查询字符串的重定向行为,需要向目标服务器提供详细信息。但是,我需要确保这些详细信息仅来自我的原始服务器。

此外,我无法确定目标服务器的完整性。或者具体而言,目标服务器可能已被泄露,因此恶意方可能已读取任何加密密钥。

我想我可以使用某种形式的公钥/私钥对来签署查询字符串。源服务器使用私钥对字符串进行签名,目标服务器使用公钥来验证它来自我的源服务器,并且消息未被篡改。

我远离密码学专家或其他什么,所以我在这里做出的任何假设都可能是错的,如果是这样,请纠正我:)

我基本上采用(希望)简单的方法在Ruby中执行此操作。

1 个答案:

答案 0 :(得分:1)

可能最简单的签名查询数据形式(在您的情况下是重定向URL)是使用HMAC。在这种情况下,您的源服务器和目标服务器需要共享一个公共密钥 - HMAC不是一种公钥/私钥加密形式,而是一种密钥散列形式。

您正在寻找的模块是ruby-hmac,您的源服务器和目标服务器必须执行以下操作:

require 'hmac-md5'
HMAC::MD5.new("<your shared key>").update("<your URL to check>").hexdigest

并在目的地侧比较HMAC在源侧计算的摘要是等效的:因此双方进行相同的计算。 HMAC的hexdigest可以通过附加的查询参数从源传输到目的地。