Schnorr簽名如何影響比特幣的隱私性和可擴(kuò)展性
早在2013年9月,一位匿名作者在bitcointalk.org網(wǎng)站上發(fā)表了一篇文章,建議可以通過(guò)聯(lián)合簽名來(lái)提高隱私性和可擴(kuò)展性。多個(gè)輸入可以共享一個(gè)簽名,授權(quán)代幣的集體移動(dòng)。這樣做,人們就有了合并交易的經(jīng)濟(jì)動(dòng)機(jī),從而減少了區(qū)塊鏈的寶貴空間,使交易中的付款人和收款人更加模糊,從而提高了隱私。
從那時(shí)起,比特幣開(kāi)發(fā)者社區(qū)就一直在熱烈討論這個(gè)想法,而一種相對(duì)晦澀的密碼簽名方法被推到了這場(chǎng)運(yùn)動(dòng)的最前沿。這種方法稱(chēng)為Schnorr簽名。它們是由密碼學(xué)家 Claus Schnorr創(chuàng)造的,并在1989年的一篇論文中首次向公眾發(fā)布。尚不清楚Satoshi是否考慮過(guò)用這種方法簽名,但這可能并不重要,因?yàn)镾chnorr在2008年擁有了這種方法的專(zhuān)利。
背景
比特幣區(qū)塊鏈中的每個(gè)塊包含一個(gè)或多個(gè)交易。交易由一個(gè)要使用的現(xiàn)有輸入列表、一個(gè)要?jiǎng)?chuàng)建的輸出列表以及輸入的所有者批準(zhǔn)將其比特幣轉(zhuǎn)移交易的證明組成。
在比特幣中,大多數(shù)輸入都需要一個(gè)數(shù)字簽名形式的密碼證明才能使用。這就有可能導(dǎo)致會(huì)有許多不同類(lèi)型的支出標(biāo)準(zhǔn),這被稱(chēng)為任何人都可以支出的產(chǎn)出。
快速介紹數(shù)字簽名
目前最流行的簽名算法是Rivest-Shamir-Adleman (RSA)和Digital Signature Algorithm (DSA)。RSA是為加密和簽名而構(gòu)建的,而DSA最初只是為簽名而構(gòu)建的,但后來(lái)也被修改為支持加密。這兩種算法依賴(lài)于不同的密碼假設(shè):RSA依賴(lài)于因式分解,DSA依賴(lài)于離散對(duì)數(shù)問(wèn)題。
這兩種技術(shù)都需要公鑰對(duì)和私鑰對(duì)。私鑰用于對(duì)消息簽名,而公鑰用于驗(yàn)證簽名。關(guān)鍵是在技術(shù)上會(huì)涉及大量的數(shù)字來(lái)進(jìn)行計(jì)算。這些計(jì)算中可能值的一組數(shù)字稱(chēng)為字段或組。
目前,比特幣使用橢圓曲線數(shù)字簽名算法(ECDSA),這是DSA的一個(gè)改進(jìn),用于橢圓曲線。該曲線定義了用于計(jì)算的數(shù)學(xué)組,它規(guī)定了密鑰格式和密碼術(shù)操作的一組值。ECDSA的優(yōu)點(diǎn)是由于橢圓曲線加密的效率,您可以用更小的密鑰大小實(shí)現(xiàn)與RSA相同的安全性。 這使得ECDSA成為比特幣的明智選擇,因?yàn)檩^小的密鑰總體上占用的空間更小,導(dǎo)致數(shù)據(jù)更少,操作更快。
Schnorr簽名
Schnorr簽名可以適用于任何滿足離散對(duì)數(shù)問(wèn)題的數(shù)學(xué)組。幸運(yùn)的是,比特幣中的橢圓曲線secp256k1符合這一特性。這意味著在比特幣中,同樣的私鑰和公鑰可以與Schnorr簽名一起使用。Schnorr簽名比ECDSA簽名有更多優(yōu)點(diǎn):
1. Schnorr簽名更小。大多數(shù)ECDSA簽名是71或72字節(jié)。所有Schnorr簽名都是64字節(jié)。
2. 他們?cè)试S更緊湊的多重團(tuán)體。比特幣目前的m-of-n簽名方案需要m個(gè)簽名的表示和驗(yàn)證。Schnorr multisig只需要一個(gè)簽名就可以代表所有m方。
3. 跨多個(gè)聯(lián)合簽名!我們不僅可以將一個(gè)多sig輸入的簽名壓縮為一個(gè)簽名,還可以將多個(gè)輸入的簽名聯(lián)合為一個(gè)簽名。當(dāng)與CoinJoin相結(jié)合時(shí),這可以使交易更便宜、更私密。即使沒(méi)有CoinJoin,這也可以大大減少交易的大小和成本。將Schnorr簽名引入比特幣的主要工程師Pieter Wuille估計(jì),只要讓用戶(hù)在不同輸入之間聯(lián)合簽名,比特幣區(qū)塊鏈就能縮小25-30%。
4. 沒(méi)有腳本的腳本!通過(guò)巧妙地使用遠(yuǎn)遠(yuǎn)超出本文范圍的Schnorr簽名,我們實(shí)際上可以通過(guò)使用一個(gè)特殊的過(guò)程來(lái)創(chuàng)建所需的簽名來(lái)實(shí)現(xiàn)不同的開(kāi)銷(xiāo)條件。利用Schnorr簽名的線性特性——沒(méi)有腳本的腳本,以特定的方式組合部分簽名,可以滿足開(kāi)銷(xiāo)標(biāo)準(zhǔn)。Blockstream的安德魯·波爾斯特拉(Andrew Poelstra)對(duì)這種可能性做了一些偉大的研究。
5. Schnorr簽名被證明是不可塑的。ECDSA簽名可以在不訪問(wèn)創(chuàng)建它們的私鑰的情況下更改。當(dāng)簽名被包含在生成交易id時(shí),這對(duì)比特幣來(lái)說(shuō)是一個(gè)大問(wèn)題。隔離證人通過(guò)分離簽名(也稱(chēng)為證人)減少了這個(gè)問(wèn)題,但擁有一致的簽名仍然很好。
有什么缺點(diǎn)嗎?
Schnorr簽名強(qiáng)調(diào)了當(dāng)前ECDSA系統(tǒng)已經(jīng)存在的一個(gè)弱點(diǎn)。這些簽名方案使用一個(gè)nonce值,這個(gè)值只能使用一次,必須隨機(jī)選擇,或者至少是不可預(yù)測(cè)的,否則攻擊者可以對(duì)私鑰進(jìn)行反向攻擊。2011年,索尼(Sony)就發(fā)生過(guò)這種著名的情況,當(dāng)時(shí)PS3上使用的ECDSA方案顯示,根本不隨機(jī)選擇這個(gè)nonce。結(jié)果,一個(gè)團(tuán)體發(fā)布了索尼的私鑰,允許用戶(hù)安裝自己的操作系統(tǒng)。
使用ECDSA,由于不存在聯(lián)合簽名,nonce可以根據(jù)正在簽名的內(nèi)容進(jìn)行確定。這就是比特幣沒(méi)有問(wèn)題的地方。然而,當(dāng)引入聯(lián)合簽名時(shí),我們將需要一個(gè)真正的隨機(jī)熵源來(lái)創(chuàng)建簽名。問(wèn)題是,當(dāng)多個(gè)參與方聯(lián)合起來(lái)創(chuàng)建簽名時(shí),惡意參與方可以使用相同的nonce和相同的輸入啟動(dòng)對(duì)兩個(gè)多簽名的請(qǐng)求。它們會(huì)在請(qǐng)求完成之前中止請(qǐng)求,但是可能已經(jīng)創(chuàng)建了正確的條件來(lái)反向工程受害者的私鑰。
接下來(lái)是什么?
Schnorr簽名實(shí)現(xiàn)的一個(gè)障礙是它們還沒(méi)有標(biāo)準(zhǔn)化。Bitcoin Core 開(kāi)發(fā)者Pieter Wuille,為單一簽名的實(shí)現(xiàn)提供一個(gè)標(biāo)準(zhǔn)化草案。該草案目前正在比特幣社區(qū)接受同行審查。
聯(lián)合簽名另一個(gè)復(fù)雜性問(wèn)題是,使用精心設(shè)計(jì)的nonces可能會(huì)受到攻擊。Blockstream在這個(gè)問(wèn)題上做了一些有趣的工作,他們提出被稱(chēng)為MuSig的解決方案。MuSig目前通過(guò)在簽名創(chuàng)建過(guò)程中添加更多的輪數(shù)來(lái)解決這個(gè)問(wèn)題,以確保沒(méi)有人能夠通過(guò)操縱nonce值來(lái)傷害其他人。目前,MuSig協(xié)議需要與聯(lián)合簽名進(jìn)行三輪協(xié)調(diào)。第一輪要求每個(gè)人都生成惟一的輸入,這些輸入將哈希值并在一起,以確保從不使用相同的nonce來(lái)簽署相同的消息。
目前正在進(jìn)行優(yōu)化聯(lián)合簽名的研究。Blockstream的希望是,他們將能夠通過(guò)使用零知識(shí)證明,以確保適當(dāng)?shù)撵?,將溝通從三輪減少到兩輪。Schnorr簽名似乎不太可能在今年進(jìn)入比特幣市場(chǎng),但它們正在穩(wěn)步前進(jìn),如果運(yùn)氣好的話,有望在2020年把比特幣的下一個(gè)區(qū)塊獎(jiǎng)勵(lì)減半。