数字签名
Last updated
Last updated
银行账户是中心化账户管理,比特币没有账户,但是用户有自己的钱包。用户自己开设钱包,通过使用一对独特的<public key,secret key>来控制。<pk,sk>来源于非对称加密。
由三个算法组成:
(sk, pk) = generateKeys(keysize)
把keysize作为输入,来产生一对公钥和私钥;私钥被安全保存,并用来签名一段信息;公钥pk是人人都可以找到的,拿到它可以用来验证签名。
sig:=sign(sk, msg)
把一段消息和私钥作为输入,输出是签名
isValid:=verify(pk, message, sig)
验证过程
通过把一段消息和签名消息与公钥作为输入;如果返回是真,证明签名属实;否则,证明签名的消息为假。
要求两个性质有效:
有效的签名可以通过验证
签名不可以伪造
实践中,比特币使用的签名算法是随机的,需要良好的随机源。对要签名的信息message大小有限,所以使用哈希函数,因为哈希函数的输出是定长的。
比特币中公钥即身份,比特币中用户的身份:address := Hash(pk || x)
,比特币用户开一个账户则是生成一对公私钥对。
比特币因此可以提供去中心化身份管理,只要生成一对新的公私钥对就可以随机定制新的随机身份。具有匿名性,一个人可以有多个公私钥对,随便使用哪一个身份都可以转帐。