• app_navCreated with Sketch.app_navCreated with Sketch.

    App

    扫码下载APP

  • tougao_navCreated with Sketch.tougao_navCreated with Sketch.

    投稿

  • Sign in_navCreated with Sketch.Sign in_navCreated with Sketch.

    登录

  • register_navCreated with Sketch.register_navCreated with Sketch.

    注册

蚂蚁S17丨史上最强7nm 云算力永续合约上线
关于比特币交易,如何保证交易的安全传递?
2018-05-02 11:55:59

关于比特币交易,如何保证交易的安全传递?不知道读者朋友们想过没有,我们的每一笔交易在传递过程中需要经过许多节点,如果有些作恶的节点冒充我们发出交易,那其它节点怎么确定这笔交易是我们发出的?

我们又要怎么确定其它节点不篡改我们的交易信息,把你原本要转给别人的比特币,转给它自己呢?

要回答这两个问题,有必要先科普一下公钥和私钥

比特币地址其实是一套非对称密钥对中的公钥,这对密钥通过椭圆曲线算法生成,其独特之处在于:使用公钥加密一段信息后,使用公钥解不开,必须使用私钥才能解开;同样,使用私钥加密一段信息后,使用私钥解不开,必须使用公钥才可以解开。

更加独特的是,根据私钥可以很容易得算出私钥,但是更加公钥几乎无法算出私钥。

接下来科普一下加密和签名的区别

加密和签名是两个不同的概念,又都涉及公钥和私钥的概念。公钥和私钥相当于钥匙和锁,锁可以用来锁住东西,钥匙可以用来打开对应的锁,一把钥匙只能开一把锁,当然钥匙和锁都可以复制。哪个交易平台比较靠谱?可以了解一下比特币交易平台排名

加密相当于我自己生成一把锁和一把钥匙,然后把锁发给你,你用我的锁把想发给我的东西锁上再发给我,我收到之后用钥匙打开锁。天下人都能拿到我的锁,但只有我有这把锁的钥匙。这个例子中,钥匙相当于私钥,锁相当于公钥。数字加密涉及三个过程:

生成一对公钥和私钥

加密:公钥+明文->密文

解密:私钥+密文->明文

签名相当于我自己生成一把锁和一把钥匙,然后把我想发布的内容用我的锁锁起来形成一个签名,把内容和签名一起发布,并且告诉大家我的钥匙是什么。人们可以拿到钥匙来打开签名里的内容来验证是不是跟发布的内容一致。天下人都能拿到钥匙来验证签名与内容的一致性,但只有我有签名的锁。这个例子中,钥匙相当于公钥,锁相当于私钥。数字签名涉及三个过程:

生成一对公钥和私钥

签名:私钥+内容->签名

验证:公钥+签名+内容->内容有没有改变

我们每使用一个UTXO,都需要对其解锁,以证明自己是这个UTXO的主人。那要如何证明自己是这个UTXO的主人呢,最好的办法就是你有钥匙,而公钥是公开的,私钥又不能公开,那显然只有数字签名是最好的方式。

机智的你可能已经想到了,使用私钥加内容生成签名,这样矿工在验证交易时,如果用我们的公钥解出了签名,那就证明这笔交易是我们发出的。

从这里不难看出,数字签名不但证明我们拥有当前的UTXO,还确定了交易的发出者。

第一个问题解决,那第二个问题呢?我们又要怎么确定其它节点不篡改我们的交易信息,把你原本要转给别人的比特币,转给它自己呢?

聪明的你可能已经发觉,我们上面提到的内容还没用上,是的,内容就是保证我们的交易信息在传递的过程中不被篡改的关键。

读者朋友们可能有所耳闻,改变一段文字,即使只改变一个字母,他们的哈希就会完全不同,因此哈希可以唯一标识内容。

如果我们把交易打个哈希,作为内容,问题不就解决了。这样的话,其它节点在验证的时候,发现解出来的内容和交易的哈希对不上,那验证就通不过。