P2sh

P2PKH 中的哪些安全威脅導致使用 P2SH?

  • June 12, 2015

要竊取 P2PKH 輸出,您必須找到生成 tx 中使用的散列的公鑰的私鑰。這在可行的時間跨度內是不可能做到的,因此使 tx 安全。是什麼激勵了 P2SH 的使用?根據比特幣開發者指南的這一段,我特別問:

Pubkey 腳本是由對他們目前花費的特定 satoshis 的長期安全性或有用性不感興趣的消費者創建的。接收者確實關心 pubkey 腳本對 satoshis 施加的條件,如果他們願意,他們可以要求消費者使用特定的 pubkey 腳本。不幸的是,自定義公鑰腳本不如短比特幣地址方便,並且比 P2PKH 公鑰雜湊更難以保護。

我一直找不到“reedem script”的例子,你能給一個嗎?

P2PKH 唯一的安全問題是它只需要 1 個密鑰即可花費支付給它的硬幣。P2SH 通過輕鬆地為您的硬幣兌換設置更多條件(例如需要超過 1 個密鑰來花費),讓您更加安全。

所以,假設我是一個想要保證我的比特幣真正安全的人,而我想要做到這一點的方式是需要 5 把鑰匙中的 3 把來花費我的硬幣。所以,scriptPubKey我希望每個人在向我發送硬幣時使用的是:

OP_3 {pubkey1} {pubkey2} {pubkey3} {pubkey4} {pubkey5} OP_5 OP_CHECKMULTISIG

但是每個 pubkey 是 33 個字節,所以這會生成一個大約 170 個字節的腳本,這在 QR 碼中編碼有點多。對於人類來說,這絕對是太多的數據無法處理。

但如果我使用 P2SH,scriptPubKey則只有 23 個字節,發送方不必擔心我在我的硬幣上設置的贖回條件究竟是什麼。P2SH 就是這樣工作的。我將我想成為我的腳本scriptPubKey并序列化它(我將使用 {} 來表示序列化):

redeemScript = {OP_3 {pubkey1} {pubkey2} {pubkey3} {pubkey4} {pubkey5} OP_5 OP_CHECKMULTISIG}
redeemScript_hash = hash160(sha256(redeemScript))

然後scriptPubKey發件人實際使用的是:

OP_HASH160 {redeemScript_hash} OP_EQUAL

總共只有 23 個字節。好處是它提供了一個抽象層。向我發送硬幣的人不需要知道我如何保證硬幣的安全。他們所看到的只是 a 的雜湊值redeemScript,但他們不知道redeemScript兌換硬幣的實際條件是什麼。

基本上,P2SH 本身並不安全,因為兌換腳本可以是任何東西。但它所做的是使硬幣接收者能夠輕鬆地傳達硬幣發送者應該如何發送硬幣,同時讓硬幣接收者決定如何/何時使用這些硬幣的條件。

引用自:https://bitcoin.stackexchange.com/questions/36695