原文 medium.com/swlh/taking…web
回到2009年,比特幣容許 IP 到 IP 的信息交換。在2009年錢包還停留在原型階段,並且因爲開發者們沒能理解比特幣,它的不少最好的功能都被關閉了。算法
上週,我就比特幣如何應用在智能卡上進行了討論,帶防火牆的id模型可以保護隱私。這周,我將展現如何使用web服務器安全地接受比特幣支付,以及如何在進行法幣或者其它token交易的同時保證隱私。數據庫
 後端
這是比特幣的點對點的部分,不是挖礦,這也是Core開發者們移除的東西之一。安全
 服務器
2009年,系統還沒完成。一些可能的功能須要測試,2009年的客戶端留下了不少懸念,只能算是一個原型。網絡
要解決這些問題,首先咱們要清楚一點:節點和錢包是分開的。節點是礦工,而錢包是用戶使用的,並且具備 P2P 交易功能。在本文中,我會解釋:基於ECDSA的網絡證書,SSL/TLS服務器證書,這些讓你安全地上網衝浪的東西,可以成爲一個商業支付系統的基礎——這個系統能保證安全和隱私,這也是創建在單個地址只被支付一次的基礎上。session
換句話說,不重鑰。分佈式
轉帳有兩種方式。收款人在線的話,輸入他的 IP 就能連上,獲取一個新的公鑰,而後發送交易。收款人不在線的話,能夠發送到他的比特幣地址,那是他的公鑰的哈希,事先給到你。在下次鏈接上,並獲得交易所在的區塊的時候,他就能夠收到。缺點就是沒有發送備註信息,並且因爲地址重用,隱私性會受損。但對於沒法同時在線,或者是接收者沒有網絡鏈接的狀況,這仍是一個有用的替代方案。工具
證書是能夠在 S/MIME 和 HTTPS 中使用的東西。
若是咱們使用和CA註冊證書相關聯的密鑰,就不能在保留隱私的同時建立商人收款的公共記錄。
舉個例子,Alice 是一個消費者,Bob是一個網絡商人,他的網站 HTTS://www.bob.com 是有ECDSA證書的。
Alice 有 Bob 的 主密鑰。密鑰不是用於收發比特幣的,它能夠用來建立一個身份密鑰(能夠用在智能卡上)。這樣的密鑰咱們稱爲P(Alice)。
Bob的網站的主密鑰是 P(Bob)。(使用 S-MIME 能夠很簡單地將這套機制用在 email 上,留給你們思考)。
Alice 有一些 coin(UTXO索引),它們和 P(Alice) 毫無關係,也就是 P(Alice) 和她的基礎密鑰沒有任何聯繫。咱們稱其爲 P(A-1-i),i 表明所用過的 coin。
Alice 可使用下面這個文檔裏描述的流程來建立一個通用密碼(s1):
DETERMINING A COMMON SECRET FOR THE SECURE EXCHANGE OF INFORMATION AND HIERARCHICAL, DETERMINISTIC CRYPTOGRAPHIC KEYS
這套機制的其中一種用例:Alice在Bob的網上商店進行支付。雙方能夠計算出一個共用密碼。爲了更安全,Alice可使用她們共享的 web-session ID,發票號碼,或者任何別的東西。可使用於一個基於 HMAC 的值來得到更多的安全和隱私,但爲了便於理解,在這裏我會使用簡單的哈希。
Alice和Bob均可以計算出S的值,它和雙方在網上使用的密鑰有關。Alice有一個用於身份認證的密鑰,這與她的支付沒有公開的聯繫,但可以保證與Bob通訊的安全。
Alice經過一筆比特幣交易發送一個加密的信息。這個交易徹底能夠用於離線或在線的狀況。若是Bob在線,他能夠保留來自Alice的 nonce 做爲網絡檢查的一部分。
若是Bob不在線,並且他的網站很簡單,那麼他可使用區塊鏈來記錄支付信息並檢查它。
Alice發送給一筆交易到 P(Bob)。這個地址Bob不會去使用,因此這個支付是小額的;若是沒有粉塵限制,只發一聰也是能夠的。Alice只是發送了關於支付的信息給 P(Bob)地址,Bob不會動用裏面的資金。能夠這樣說,只有當證書被標記爲過時的時候,Bob纔會花費這個地址(與P(Bob)公鑰相關聯)裏的錢。這個流程相似於分佈式的 「revocation list」,Bob掌控他本身的密鑰。並且,若是Bob的密鑰和證書被攻擊了,粉塵交易被黑客給花費了,這就是一個自動的警報。Bob能夠在這個帳戶裏放一些錢,好讓黑客認爲這是一個使用中的合法地址(例如2000美圓),若是這個帳戶被黑了,那麼它就會警告Bob的用戶們。
Bob可使用一個 subkey 來讓帳戶更加隱私——請看專利中的這幅圖:
Bob甚至能夠有一個流程,讓發票號碼和某個 subkey 相關。
Alice向一個和 P(Bob) 相關聯的地址發送信息——在腳本里,或者是OP_RETURN裏附加一個加密後的值(使用例如AES的加密算法)。使用以前的方法,Bob能夠計算出S。發送給Bob的一聰(加上手續費)交易裏,包含了讓Bob知道Alice從哪裏發起支付所需的全部信息。Bob使用對稱密碼(S)來解密消息中的數據:
M是 Alice 要給到 Bob 的信息。
Bob如今能夠從密鑰中派生出一個密鑰地址:
— P(Bob-Paid) = P(Bob) + HMAC(M ~S)xG
— 消息密碼是 P(Shard Message) = HMAC(M ~S)xG
新密碼 HMAC(M ~S) 只有Bob和Alice知道。
Alice能夠證實她已經支付給了Bob。Bob能夠找到Alice發送的錢,而且驗證交易。
同時,沒有任何第三方能夠肯定Alice用於支付的地址——P(A-1-i)到Bob的P(Bob-Paid)。
Bob在區塊鏈上有着 P(Bob) 的記錄,以及它收到的全部支付地址的完整帳目。這些記錄能夠聯繫到發票,訂單等等,讓Bob可以構造一個無人可刪除,增添,或操控的,完整的關於全部交易的帳目,這個方法知足了Bob在法律上所需的全部審計問題,並且他還能夠有一個分離地址,用於向政府發送 VAT 和其它消費稅。換句話說,Bob不須要經歷昂貴的審計,就能夠馬上交稅。
使用例如 Tokenized 或者 nChain專利中的任意一種協議,Alice 和 Bob 能夠交易 token化的法幣。這意味着Alice在英國可使用由某個銀行發行的 GBP token 來支付 Bob。這種token可使用上面的流程被髮送,使得 Alice 和 Bob 能夠安全地以他們本地貨幣的形式發送數字貨幣,同時以比特幣做爲交易的「管道」。
即便Bob運行的是一個離線網站——沒有後端數據庫——密鑰P(Bob)所收到的記錄也能夠做爲一種不可變的數據存儲。
Alice 加密發送給 Bob 的消息,能夠是完整的訂單。
這可使用現有的 EDI 消息類型來完成。並且比 EDI 更安全,可靠,私密。
更好的是,記錄是不可變的。沒有審計欺詐的空間。你能夠撤銷交易,可是須要把資金髮回其來源。
Bob 能夠持有一系列的分級地址,它們記錄了訂單的每一個環節——從帳單和支付到送貨和收貨。若是 Bob 擁有每位客戶的 sub-master key(見上文 Fig.9 的專利),他也能夠構造另一個 subkey,只有他本身,客戶以及審計稅收的機構會知道,這使得他能保持徹底的隱私,別的客戶和供應商不會知道他到底作了多少交易。除此以外,他還能夠經過構造支付流程,來分隔內部員工,讓他們只知道和本身部門相關的信息。
只要CA相關的key沒有被動過,帳目就能夠被髮送到舊的地址。一個 sub-CA key 能夠和帳目年份相關聯,並在每一個納稅週期被調用。你能夠關閉這個證書,收集全部粉塵支付,同時,合上書本準備迎接新一年的帳目。
EDI 是一種現有的商業編碼格式。
下圖是 ASNI 和 EDIFACT 消息的格式:
在咱們的系統中,咱們使用密鑰以「羣消息」的形式爲消息中的數據進行加密。再也不須要一個「交換信息」。在比特幣裏,咱們消除了對中間人的須要。
新的商業模式是全部的記錄都不可變,不會丟失,並且容許 Alice 和 Bob 進行私密交易。
並且,使用比特幣交易的 EDI 工具就像現有的 EDI 工具同樣簡單。
即便是嵌入在比特幣交易內,加密的EDI XML格式仍然能夠被簡單地解析並顯示或者是打印在發票或訂單上:
在現有的EDI世界中,客戶是根據字符或者文檔的數量來付費的。並且有許多供應商設置了最低收費長度,從128到512個字符。結果就是若是你發送了12個有12字符的文檔,你將被按照最高5120字節來收費,即便只發送了144個字符。
對於有着大量小額交易的商家,這會形成大量的支出。
這些在比特幣裏不是問題。
儘管 NACCS EDI 規定的最大消息體積是 500,000 bytes,實際上這個EDI和其它相關的消息一般是 150 bytes。
只須要幾分之一美分就可以發送一筆不可變的,私密的,可靠的發票,附帶帳目系統;相比花費2到3美圓在某些EDI方案上,或者是 0.20美圓發送一筆簡單的 Visa 交易… 是時候從新思考你的商業活動了。
在這個模型裏,沒有比特幣的地址會被屢次使用,支付和發票是被私密地連接在一塊兒——若是 ID 不須要放在用戶的證書內,甚至可使用假名。