比特幣地址擁有者的公鑰和簽名,如何防範被中間人替換呢?

比特幣地址的擁有者,在支付時,需要在交易中提交,公鑰和簽名,以供驗證其擁有權。

但是,比特幣網路是如何保證不會發生中間人攻擊,將公鑰和簽名同時替換掉呢?


付款方用私鑰對交易信息(包括收款方的地址)簽名,修改交易後簽名就失效了,如果你連簽名都能修改,那你就是盜號而就不是中間人替換了。

評論區題主的意思是同時替換公鑰和簽名,當然可以,公鑰和簽名是付款方提供的,收款方只有一個地址。等於你硬塞錢給別人,這個,我們,誰都,阻止不了。


並沒有很明白題主的意思,簡述一下比特幣簽名及其驗證的原理好了

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

李大貓1btc1muwjBgyeuRQm9Mfx5yLxeLSPqSWq

我要和別人交易就要開門拿錢

然後一個黑中介想神不知鬼不覺的賣掉我房子裡面所有的錢(在我不知情的情況下中間人攻擊)

他可以向所有人廣播說這所房子是他所有的,然後帶買家來家門口

但是他沒用我鑰匙(私鑰)

沒有鑰匙就沒法開門(所有權簽名)

所以理論上說,中間人攻擊不會導致你的錢丟掉

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

那對方拿錢就好了幹嘛中間人?


這跟比特幣網路有啥關係… 比方說我在支乎發個公鑰 zhihusb 支乎灌里原給我改成了zhihuniubinicaishishabi … 自始至終沒有經過BTC ledger啊


當然可以被替換,但是——

要是能夠將公鑰和簽名替換掉就好了,等於不花自己的錢完成了一次支付。

當然天底下沒有這樣的好事,因為——

簽名和公鑰的作用對象不是那個還沒有記錄進區塊鏈的交易,而是一個已經記錄進區塊鏈的未花費的交易輸出——UTXO(Unspent Transaction Output)。要想花費這筆錢通常需要兩次驗證:

第一次,通過公鑰hash兩次,得出地址,比對一下地址是否一致;

第二次,通過公鑰來驗證簽名是否正確。


發起一個交易,付款人對交易進行簽名(Signature),並且帶上付款人公鑰(&)。驗證這筆交易,會先驗證付款人公鑰(公鑰雙hash得到btc地址,與交易付的款人地址對比),人後才用公鑰對簽名進行驗證。偽造者A用自己的公鑰和簽名,想從B地址轉錢,首先公鑰驗證就會不通過。


我也有這個疑問,比如A要把錢支付給B,中間人C只篡改交易中輸出的部分,把公鑰、簽名和地址都替換成自己的,也可以通過驗證啊,scriptSig欄位只確保支出的輸入是屬於A的,並沒有一個欄位用於驗證接受者必須是B


使用公鑰基礎設施。


比特幣本質是一個賬單,所以每個地址有多少餘額都查的到的。你換掉公鑰和簽名,那麼根據公鑰推算出地址,地址上沒有這麼多餘額,就沒人認可這個交易。


數字簽名機制就是為了防止信息被篡改和偽造。

所有納入blockchain的tx都是能通過簽名驗證的。

要是你指在發送地址信息給別人的時候被人截胡了,那是另外一個問題了。這個問題可以通過預先約定地址前綴來解決,如此仿冒者要投入至少一樣的算力才可能找到相似的地址來完成欺詐。


推薦閱讀:

TAG:比特幣Bitcoin | 區塊鏈Blockchain |