預計在bitcoin-qt的下一個版本將包括新的支付協議,multibit/androidbitcoin wallet、coinbase和coinpunk都會支援新的支付協議。bitpay也承諾執行新的支付協議,因此所有使用bitpay服務的商家都自動支援新協議。如果你的應用打算支援新協議,請告訴我,我會加到這裡。
比特幣地址有哪些弊病?
很多。它們會造成隱私洩漏;它們缺乏彈性,很難擴充套件新功能;它們不能驗證;它們只能單向執行。
為什麼比特幣地址會造成隱私洩漏?
使用比特幣的標準方式是每筆收款一個地址。這可能在下面的場合造成隱私洩漏。
假設說,你在一家接受比特幣付款的小咖啡館工作,再假設一杯咖啡的價格是0.01btc。整整一個月,你們收到了很多這樣的小額付款。月底的時候,你要發工資了,你給了老闆一個新的比特幣地址。他收集了許多小額的比特幣咖啡款,然後付款給那個地址,產生了一個工資大小的鉅額輸出。
隨後,你去酒吧,你的朋友說:“嘿,夥記,你上週和我打賭還欠我10美元呢。”於是,你給他傳送了價值10美元的比特幣。你的錢包必然會選擇用你的薪水大小的輸出來付款。你的朋友現在可以檢視他收到的那筆交易,且知道這筆款來自一個鉅額的薪水大小的輸出。現在,你的朋友們知道你的收入是多少了。
有一種更好的收款方式:你給老闆100個比特幣地址,然後他將小額的咖啡款付給100個不同的地址。這樣連結顯示的金額會小很多,但實際上沒有人會那麼做。
新的支付協議如何解決這個問題?
請求的訊息允許你請求的付款分散到多個輸出(你不必使用支付到地址方式的輸出,而且輸出可以包含任何指令碼,比如說多重簽名指令碼)。新協議也使得付款方能夠將同一筆付款分割成多筆交易進行提交。當某個應用生成了一個付款請求(比如說給你發薪水),新協議就會知道請求的付款金額是多少,然後它將這筆款分攤到多個輸出。付款方或許仍然可以生成一筆巨大的交易;但是,為了最大化隱私、最小化漏洞,付款方採用化整為零的付款方式更明智。
為什麼發款方將交易直接提交給收款方?
通常,付款給某人時,你將交易廣播到點對點網路,然後收款方等待這筆錢到賬。這種機制能正常運作,但缺乏彈性。譬如,要是發款方不能夠使用網際網路怎麼辦?要是發款方/收款方的電腦裝有討厭的只允許web流量的防火牆怎麼辦?要是收款方正在經營礦機生意,根本不想廣播交換該怎麼辦?
在新的支付協議中,請求包括如何提交付款的指令。通常,錢包會也收到一個httpsurl來提交資料,但另一種方法或許更簡單。譬如,安卓錢包應用已經支援使用藍芽技術將交易直接傳送給收款方(雙方都要使用安卓錢包)。當你正在旅遊無法獲得網際網路連線時,這是一種很好的付款方式。付款協議將我們的付款行為標準化,而不用限定在某個特定的應用上。
新的支付協議增加了哪些新的特徵?
在協議的v1版中:
退款。發款方在提交交易的同時可向收款方提交一些退款地址。如果賣家希望給買家快速退款,他們可以這樣做。再也不會出現嘗試去“猜測”使用者地址的問題(有時因為共享錢包的問題,你會弄錯使用者的地址)。bitcoin-qt客戶端為每一筆採用這種方式的付款生成一個退款地址,但你只有確實收到了退款才會看到這個地址。
備註。可點選的連結可能已經包含了短字串或是標籤,但它們的長度受到瀏覽器和二維碼的限制。新協議允許付款請求包括長度不限的備註,這種備註可用來註釋你購買的物品。在驗證付款請求時,這種功能超級好用。
驗證是怎麼一回事?
比特幣在某種程度是一個棘手的專案,因為我們通常是在用於普通目的的電腦上轉移資金,這種電腦容易被攻擊或是感染病毒。維薩和萬事卡公司敦促所有人使用晶片卡和專用讀卡器這樣具有特定目的又不能安裝其他應用程式的硬體。我們的方法必須和他們有點差異,但仍會用到專用硬體。trezor裝置是一種僅用於比特幣的迷你電腦,它透過usb介面插入到“真正”的電腦。trezor有一個顯示屏和幾個按鈕,它保管了你的私人金鑰。當你希望付款時,付款明細會顯示在螢幕上,如果資料無誤,你就摁下“確認”按鈕,交易就會獲得簽署認證。
這種設計對於今天的比特幣來說有一個明顯的漏洞。你在螢幕上看到的“付款明細”看起來會是這個樣子:
pay 0.5 btc to 1ezeqfbd8yuc9ir2761987qk3vcalc8yq?
那個收款地址來自哪呢?是的,來自你的電腦。而你的電腦有可能感染了病毒。病毒可能把網路商店發給你的地址換成了病毒作者的比特幣地址,因為地址只是一串隨機的數字,你根本不知道已經被替換了。儘管病毒不會立即清空你的錢包,可它還是能夠在你付款時偷走你的付款,避免這種損失的關鍵就是使用特別的硬體!
新的付款協議允許收款方使用一種“身份”(identity)來簽署他們的請求。“身份”只是一串隨機字串,由某些“認證授權機構”(certificateauthority,以下簡稱ca)簽署。這種機構發放簽署證書,它告訴你:“我bob smith確信比特幣地址1ezeqfbd8yuc9ir2761987qk3vcalc8yq屬於mike hearn”。現在,如果你的trezor裝置碰巧信賴bob smith身份驗證的可靠性,它就會顯示:pay 0.5 btc to mikehearn?
這種訊息不能被任何病毒篡改。所以你知道這種認證機制安全了很多。
收款是如何運作的?
當付款請求籤署時,簽署的不只是地址,備註也會簽署。透過保留簽署的付款請求和你為滿足付款要求創造的交易,你就獲得了一份數學意義上的付款證明。因為付款的備註包含了說明,商家既無法和你爭辯你的付款目的,也不能爭辯說沒有收到款項(當然,除非他們聲稱自己的私人金鑰被竊)。
這種機制很棒,因為它補充了使用多重簽名交易的低信任度第三方爭議調解機制的缺失。現在,如果你試圖調解交易糾紛,就會碰到這種問題:賣家說“賣家沒發貨!”,而商家卻說“買家沒給我付款!”,或者你會碰到更麻煩的問題:買家說“賣家寄來的不是我要買的東西”,賣家卻說“我給他的確實是我們商量好的東西。”
因為新的收款機制,查明某筆交易的細節和賠償佔理的交易人突然變得很簡單,
付款請求必須簽名嗎?
不。沒有簽名這些請求只是一個包含地址和備註的容器。
付款請求會儲存在塊環鏈中嗎?
不。付款請求和付款反饋直接在買家和賣家之間傳送。他們不會被外部環境記錄。
協議還有哪些其他特徵?譬如說小費。
付款請求和付款反饋訊息使用一種叫做“協議緩衝”(protocolbuffer)的容易擴充套件的格式。我編輯了一份未來的協議特徵列表:
http://bitcointalk.org/index.php?topic=270055.msg2890147#msg2890147
這些特徵目前一個都不存在。不過,在創造這些特徵之前,我們需要找到一個存放這些特徵所需要的資料的地方。新的支付協議是一個極完美的地方。
“身份”是如何工作的?
協議能用多種方式擴充套件,但v1版協議只能在x.509數字證書結構下工作。這種結構也被ssl協議採用。
本質上,任何人都能獲得證明某種身份的證書。身份往往只是一個email地址或網站域名(例如,bitcointalk.org就有一個包含其域名的證書)。它也可以是一個合法名稱,比如說“michaelc hearn”或“mt gox ltd”。事實上,如果你有一個帶晶片的(電子)護照,那麼你已經有了一個包含你護照資料的證書,但這個證書沒多少用,因為它和個人金鑰沒有絲毫關係。
有時證書需要付費,有時它們是免費的。ca永遠不會去獲取你的個人金鑰。相反,你在本地生成一個個人金鑰,然後要求ca去簽署你的公用金鑰。同時,你證明了自己的身份,如果你的身份是一個email地址,那麼你通常會收到一個可點選的連結。如果身份是你的名字,你也許得提交某種文書。
這種機制是否會削弱比特幣的匿名性或私有性?
不會。人們總是知道他們準備付款給哪個身份。這種身份不一定要法律意義上的身份。它可以是論壇使用者名稱或是假名,因此即使是在絲綢之路網站,這種機制也是適用的——你知道自己將要付款給“毒販丹”。你基本上不會因為不知道付款的流向而傳送到無效的地址。
你不會經常知道付款方的真實身份,但支付協議不會建立雙向的身份。只有請求付款的實體具有簽名的選擇(當然,他們可以不簽名)。
我能使用pgp信任網路嗎?
不能,v1版的協議不支援pgp。不過任何人都可充當ca,事實上蘋果公司就推出了一種執行在macos作業系統的gui認證授權軟體。但你必須說服其他人相信你,這才是困難之處。“信任網路”(webof trust)沒有解決這個問題——為了簽署金鑰的目的,你必須說服他人相信你。
儘管如此,我們可以想像彼此互信的社羣能建立自己的ca,發放身份認證。例如,bitcointalk可以發放自己的證書,用論壇使用者名稱作為身份。如果錢包建立者/硬錢包設計者決定相任bitcointalk,你就可以看到論壇使用者名稱顯示在你的trezor上面。
ssl是不是被人可怕地破解了?
不,並非如此。有些人說ssl被破解了,但目前沒有更安全的系統。x.509公鑰基礎裝置(pki)是pki多年演變和改良的結果。而且,pki仍然在改進。因為它支援ssl協議,許多實力雄厚的企業希望它變得更完善,比如說google公司就在聘請員工來完善pki。
我們再具體一點。關於x.509公鑰基礎設施人們最關注的問題是該系統的ca太多了。數百個ca意味著每個ca都能發放所有使用者都接受的證書。如何阻止一家ca發放偽造的證書給冒名頂替者呢?
目前發放證書的行為無跡可尋,因此這是一個現實的問題。google正在開發一種叫做“證書透明度”的解決方案:http://www.certificate-transparency.org/
它是一種可公開查閱的、不可偽造的所有已發放證書的檢查日誌。事實上,它的工作機制有點像比特幣的塊環鏈。每份證書可以包括一個驗證連結,連結到公開日誌的某個條目。一旦某個ca開始使用這個系統,如果某個證書由該ca簽署,但不包括驗證連結,那麼它就被視為無效,被拒絕。這意味著ca 不再能私下發放證書。透過檢視檢查日誌,你就能查到一家ca是否以你的名字(或是與你相似的名字)發放了證書(這是一種反釣魚詐騙的方法)……
https://bitcointalk.org/index.php?topic=300809.0