【发布时间】:2015-07-12 04:07:39
【问题描述】:
如果我收到来自发件人的可靠消息,我需要检查我的服务器。基本上我有一个只有 Sender(客户端)和 Receiver(服务器)知道的私钥。发送方生成一个公钥(基于私钥)并将其发送给接收方,并执行操作。接收方检查此公钥是否有效。如果是,执行 Sender 想要的。
我的疑问是我需要如何散列公钥。如果我需要使用简单的哈希算法(如hash(sha256))或者我可以使用password_hash()。
有关流程的更多信息(可选阅读):
发送者和接收者知道私钥。发送者根据私钥、当前时间和可选的附加数据生成公钥。所以它通过动作发送到服务器,所以我发送类似的东西:
command:key = 12345678901234567890123456789012
command:timestamp = 1234567890
action:name = truncate:users
接收方将检查command:key 是否有效,在服务器端重新生成公钥,重复发送方完成的相同过程,使用相同的私钥。如果它通过了,它也会检查此密钥是否以前使用过,以及时间戳是否最接近当前时间(以避免使用较旧的有效密钥)。如果都有效,则服务器执行action:name并向发送者返回响应。
示例:
Bob(客户端)想要在 Alpha(服务器)上执行
truncate-users函数。 Bob 知道服务器私钥。所以他创建了一个公钥(令牌)来验证你在服务器上的命令。服务器将收到 Bob 命令并根据服务器私钥检查您的公钥是否有效。怎么样,所以服务器会执行 Bob 命令并返回一个成功值。
这个想法不是将 Bob 消息加密到服务器,而只是告诉服务器他是一个值得信赖的人。
【问题讨论】:
-
你永远不应该散列一个公钥。在第二次阅读时,我不确定您是否尝试发明自己的Public-key cryptograph 版本。如果您确定查看现有的完善和工作版本
-
基本上,我试图让我的服务器识别收到的消息是否可信。所以我有一个私钥(只有客户端和服务器知道),所以客户端和服务器可以检查生成的公钥。我认为这个 wiki 基本上就是我想要做的,真的。 -- 也许吧,只是我不想解密,只检查是否可信。
-
这是新的,你更好地了解公钥-私钥的实现而不是构建自己的
-
检查我的例子。我不想重新实现一个安全协议,比如 HTTPS,但是例如验证用户。基本上,公钥是客户端在服务器上执行命令的“密码”。
标签: php