PHP中类似公钥/私钥的系统


Public/private key alike system in PHP

对于我的自动登录脚本,我正在考虑实现以下内容:

  • 用户获得某种存储在cookie中的个人"公钥"
  • 因为我不想在数据库中保存完全相同的密钥,所以我想创建一个匹配的"私钥"
  • 当检测到cookie时,将检索存储在数据库中的密钥,并检查这两个密钥之间的公共/私有关系

在没有openSSL等的情况下,在php中实现这一点的最佳方法是什么?

这就是我现在拥有的:

$public = hash($hash_algorithm, uniqid(rand()));
$private = hash_hmac($hash_algorithm, $public, $encryption_key);

并验证:

$check = hash_hmac($hash_algorithm, $public, $encryption_key);
return $check == $private;

$encryption_key是配置文件中的一个随机密钥。

我是觉得这太简单了,还是这已经足够好了?当然,当使用密钥时,会生成一个新的密钥,就像这里的原理一样:http://jaspan.com/improved_persistent_login_cookie_best_practice

尽管创建一个只使用对称密钥加密基元的公钥加密系统是严格可行的(请参阅:SPHINCS),但您可能不应该在这里推出自己的设计并期望它是安全的。

在没有openSSL等的情况下,在php中实现这一点的最佳方法是什么?

2018年,答案是:"使用利钠"。但当你问这个问题时,那并不是一个真正的选择。

但本着这个问题的精神:在为您提供非对称加密或重新发明轮子的加密库之外,没有解决方案