我正在做一个关于加密货币的项目。我为一个用户提供了一对公钥和私钥。 以下是我签署数据的方式:
sig = this.hash(trans.details +trans.privKey);
提供散列函数。 我的问题是如何使用给定的公钥验证此签名?
我试过这个
var v = this.hash(trans.details+"");
:var v2=this.hash(sig+trans.pubKey);
我比较了这两个哈希值,它们不一样。
根据我的理解,有一种方法可以让它们相互匹配,以便我可以说签名是有效的。
注意:此项目中提供了公钥和私钥。所以他们应该是正确的。
我错过了什么?有什么想法吗?
答案 0 :(得分:1)
你做不到。该签名方案不起作用。
私钥与其对应的公钥之间的链接仅存在于生成这些密钥的加密算法中。 (例如,如果您有RSA密钥对,则需要使用RSA算法生成签名。)将私钥插入通用散列函数中没有任何有意义的影响。
一般来说,签名是通过对要签名的数据进行 unsalted 哈希生成的,然后使用私钥加密生成的哈希,例如
let signature = RSA_encrypt(H(message), private_key)
然后可以使用公钥来解密哈希,证明它是使用适当的私钥生成的:
let signature_ok = equal(H(message), RSA_decrypt(signature, public_key))