比特币地址的拥有者,在支付时,需要在交易中提交,公钥和签名,以供验证其拥有权。

但是,比特币网路是如何保证不会发生中间人攻击,将公钥和签名同时替换掉呢?


付款方用私钥对交易信息(包括收款方的地址)签名,修改交易后签名就失效了,如果你连签名都能修改,那你就是盗号而就不是中间人替换了。

评论区题主的意思是同时替换公钥和签名,当然可以,公钥和签名是付款方提供的,收款方只有一个地址。等于你硬塞钱给别人,这个,我们,谁都,阻止不了。


并没有很明白题主的意思,简述一下比特币签名及其验证的原理好了

你的公钥的就好像一所房子,我的房子地址是

李大猫1btc1muwjBgyeuRQm9Mfx5yLxeLSPqSWq

我要和别人交易就要开门拿钱

然后一个黑中介想神不知鬼不觉的卖掉我房子里面所有的钱(在我不知情的情况下中间人攻击)

他可以向所有人广播说这所房子是他所有的,然后带买家来家门口

但是他没用我钥匙(私钥)

没有钥匙就没法开门(所有权签名)

所以理论上说,中间人攻击不会导致你的钱丢掉

除非你私钥被人拿走了(配了钥匙)

那对方拿钱就好了干嘛中间人?
这跟比特币网路有啥关系… 比方说我在支乎发个公钥 zhihusb 支乎灌里原给我改成了zhihuniubinicaishishabi … 自始至终没有经过BTC ledger啊

当然可以被替换,但是——

要是能够将公钥和签名替换掉就好了,等于不花自己的钱完成了一次支付。

当然天底下没有这样的好事,因为——

签名和公钥的作用对象不是那个还没有记录进区块链的交易,而是一个已经记录进区块链的未花费的交易输出——UTXO(Unspent Transaction Output)。要想花费这笔钱通常需要两次验证:

第一次,通过公钥hash两次,得出地址,比对一下地址是否一致;

第二次,通过公钥来验证签名是否正确。


发起一个交易,付款人对交易进行签名(Signature),并且带上付款人公钥(&)。验证这笔交易,会先验证付款人公钥(公钥双hash得到btc地址,与交易付的款人地址对比),人后才用公钥对签名进行验证。伪造者A用自己的公钥和签名,想从B地址转钱,首先公钥验证就会不通过。


我也有这个疑问,比如A要把钱支付给B,中间人C只篡改交易中输出的部分,把公钥、签名和地址都替换成自己的,也可以通过验证啊,scriptSig栏位只确保支出的输入是属于A的,并没有一个栏位用于验证接受者必须是B
使用公钥基础设施。

比特币本质是一个账单,所以每个地址有多少余额都查的到的。你换掉公钥和签名,那么根据公钥推算出地址,地址上没有这么多余额,就没人认可这个交易。


数字签名机制就是为了防止信息被篡改和伪造。

所有纳入blockchain的tx都是能通过签名验证的。要是你指在发送地址信息给别人的时候被人截胡了,那是另外一个问题了。这个问题可以通过预先约定地址前缀来解决,如此仿冒者要投入至少一样的算力才可能找到相似的地址来完成欺诈。
推荐阅读:
相关文章