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