
匿名是研究隱私的最終目標(biāo),思考以下幾點很有用:de-匿名化就像一場游戲。
我們設(shè)想一個對手擁有一些信息,它試圖從一組候選者中正確猜測出系統(tǒng)中某個事件的責(zé)任人。為了防止對手獲勝,我們需要讓它不斷猜測,這意味著要么限制它獲取信息的渠道,要么利用隨機性來增加它獲勝所需的信息量。
許多讀者可能都熟悉“猜猜我是誰?”游戲。這款游戲可以理解為更通用的游戲“猜猜我是誰?”的兩個實例的回合制組合。在“二十個問題”游戲中,玩家需要從給定集合中秘密選擇一個元素,而對手則通過向玩家提出最多 20 個是非問題來嘗試猜出該元素。在“猜猜我是誰?”游戲中,雙方輪流對戰(zhàn),最先猜對的一方獲勝?!安虏挛沂钦l?”游戲中的元素集合是固定的,由 24 個卡通人物組成,每個人物都有各自的顯著特征,例如發(fā)色或發(fā)型。每個人物都有一個獨特的名稱,可以明確地識別他們。
是或否問題的答案可以表示為——零 或者 一二十位二進制數(shù)可以表示 0 到 1,048,575(即 22?-1)范圍內(nèi)的任何整數(shù)。如果一個集合可以完全排序,則集合中的每個元素都可以通過其在排序中的編號位置進行索引,從而唯一地標(biāo)識它。因此,20 位可以唯一地尋址一百萬個元素中的一個。
雖然僅使用 20 個是非題的答案就能唯一識別集合中元素的最大數(shù)量是 22?,但在現(xiàn)實世界中,20 個答案通常包含的信息量小于這個數(shù)字。對于大多數(shù)集合和問題組合而言,情況幾乎肯定不會完美地排列,而且并非每個問題都能獨立地將候選元素一分為二。有些問題的答案可能存在偏差;有些問題的答案可能與其他問題的答案相關(guān)。
假設(shè)你不再問“你的角色戴眼鏡嗎?”這樣的問題,而是問“按字母順序,你的角色的名字是否出現(xiàn)在 [剩余角色名字的中位數(shù)] 之前?”。這是一個 ,它將最大限度地提高每個問題的答案的信息量:在每一步中,中位數(shù)名字都會分割剩余角色的集合,而這個問題會消除兩半中的一個。反復(fù)將剩余的候選者減半將以“是”或“否”答案所能達到的最快速度縮小搜索范圍;只需要對數(shù)級的步驟,這比線性掃描(即逐個檢查:“是愛麗絲嗎?不是嗎?鮑勃呢?……”)要快得多。

請記住,如果你是為了贏而玩游戲,那么游戲的目的并非從對手那里獲取最多的信息,而是成為第一個猜對的人。事實證明,最大化每個答案的信息量才是關(guān)鍵——至少在游戲公平進行的情況下是如此。同樣,在使用游戲來研究隱私時,必須假設(shè)對手根據(jù)其偏好是理性的;由于對手是為了贏而玩游戲,因此很容易意外地優(yōu)化出一個略顯錯誤的結(jié)果。
最后,假設(shè)玩家不再被認為是誠實的。顯然,作弊者可以不被發(fā)現(xiàn);與其一開始就選擇集合中的一個元素,然后誠實地回答每個問題,不如始終給出一個能留下最多候選答案的答案。因此,自適應(yīng)選擇的答案可以最大限度地減少對手獲取有用信息以贏得比賽的速度。在這種情況下,最優(yōu)策略不再與玩家誠實時相同。在這種情況下,對手的最佳應(yīng)對策略是堅持使用二分搜索,這會限制自適應(yīng)策略的優(yōu)勢。
自適應(yīng)的“猜猜我是誰?”游戲相當(dāng)無聊,就像井字棋一樣,如果你專心致志,它總是會以平局結(jié)束。準(zhǔn)確地說,正如我們將在下一節(jié)中看到的那樣,你可以從你最具對抗性的對手那里提取4.58比特的信息,而游戲規(guī)則可以用來迫使對手接受這些信息。這意味著第一個玩家問完五個問題后總能獲勝。這類游戲中的答案記錄應(yīng)該始終由均勻隨機的比特組成,因為任何其他比特都會給對手帶來優(yōu)勢。遺憾的是,使用這種自適應(yīng)性或附加隨機性的隱私保護機制難以構(gòu)建和理解,因此實際的隱私軟件通常比這些玩具示例更難分析。
測量匿名性:香農(nóng)熵
“猜猜我是誰?”中答案的熵——也稱為香農(nóng)熵——量化了學(xué)習(xí)結(jié)果的意外程度。例如,如果你已經(jīng)發(fā)現(xiàn)對手的角色是禿頭,那么當(dāng)你得知他們沒有黑頭發(fā)時,你就不會感到驚訝;這個答案不包含任何額外的信息。這并不令人驚訝,因為在被告知之前,你可以推斷出擁有黑頭發(fā)的概率為零。
假設(shè)從候選集合中剩下兩個選項;這基本上就是拋硬幣,兩個選項中的任何一個都應(yīng)該有同等的可能性,因此也同樣令人驚訝。得知是選項 A 就告訴你它不是選項 B——等價地,得知它是不是 B 告訴你它一定是 A ——因此只需要一個是或否的問題、一點信息,就可以消除所有不確定性。
該值可以根據(jù)概率分布計算出來,在這個二進制例子中,概率分布為 p=1/2。
首先,計算每種情況的概率的以 2 為底的對數(shù)的否定,或者等效地先反轉(zhuǎn)概率并跳過否定:
首先,計算每種情況的概率的以 2 為底的對數(shù)的否定,或者等效地先反轉(zhuǎn)概率并跳過否定:

在這兩種情況下:

然后,將這些值乘以其對應(yīng)的概率(某種加權(quán)平均值)進行縮放,最終得到兩種情況下的貢獻均為?位。這些項之和(在本例中為1)即為分布的香農(nóng)熵。
這也適用于兩個以上的結(jié)果。如果你一開始就問:“是[一個隨機角色的名字]嗎?”你很可能只會知道

如果答案是“否”,則提供一些信息。
那時log?(23)≈4.52位量化了你對剩余 23 種等概率概率的不確定性。另一方面,如果你運氣好猜對了,你就能知道完整的log?(24)≈4.58信息位,因為不會留下任何不確定性。
只需不到 5 位就能縮小到 24 個字符中的一個。10 位可以識別 1,024 個字符中的一個;20 位則可以識別大約百萬分之一的字符。
香農(nóng)熵足夠通用,可以量化非均勻分布。并非所有名字都同樣流行,所以一個有趣的問題是,““?鏈接的帖子估計美國姓氏的編碼大約需要15位。根據(jù)文獻,美國名字大約包含10-11位。這些估計意味著每個全名的上限為26位,但請記住,像John Smith這樣的常見名字所包含的信息量要比不常見名字少。(唯一地表示整個美國人口的信息量需要29位。)
截至撰寫本文時,世界人口正緩慢但穩(wěn)步地接近85億,即233人。33并不是一個很大的數(shù)字:生日包含多少位?僅僅是年齡?某人的?IP地址?瀏覽器?郵政編碼?他們的詞匯量,還是標(biāo)點符號的習(xí)慣?
這些問題很棘手。與這些游戲和現(xiàn)代密碼學(xué)不同,這些游戲中的秘密是隨機的,而且往往是短暫的,而我們無法隨機化、過期或輪換我們現(xiàn)實生活中的身份識別屬性。
此外,這些個人身份信息在我們的生活中經(jīng)常泄露,有時是出于必要,有時是無意和不必要。我們常常不得不相信與我們互動的人不會泄露這些信息,無論是與第三方共享還是意外泄露。這或許與我們必須將生命托付給別人(例如醫(yī)生或職業(yè)司機和飛行員)并無二致。然而,就我們個人數(shù)據(jù)而言,信任的必要性顯然是不可比擬的。
熵主義視角下的匿名性
允許用戶例如,如果您觀察到一個從 Tor 出口節(jié)點到您服務(wù)器的連接,那么據(jù)您所知,它可能是由數(shù)千個 Tor 用戶之一建立的。通俗地說,假設(shè)去匿名化對手觀察到了某個事件(可能是通過攔截網(wǎng)絡(luò)中兩個節(jié)點之間傳輸?shù)南ⅲ?,那么特定用戶的匿名集就是指可能將該事件歸因于的潛在用戶集合。
如果將匿名消息的接收者視為對手,那么他們從一組候選發(fā)件人中做出的最佳猜測就是發(fā)件人的匿名集。如果這個假設(shè)的系統(tǒng)是完全匿名的,那么除了接收者之外,任何用戶都有同等的可能性發(fā)送了該消息。
兩篇頗具影響力的論文同時發(fā)表,提出用匿名集的熵來衡量匿名性:一篇由 Claudia Díaz、Stefaan Seys、Joris Claessens 和 Bart Preneel 撰寫的《匿名集熵》,另一篇由 Andrei Serjantov 和 George Danezis 撰寫的《匿名集熵》。這兩篇論文從攻擊者能夠從匿名集中準(zhǔn)確猜出用戶的概率不及隨機概率的假設(shè),推廣到能夠考慮該匿名集上非均勻概率分布的模型。兩篇論文都提出用熵的比特數(shù)來量化匿名集的大小。
當(dāng)匿名集完全對稱時,只有均勻分布才有意義,因此將匿名集大小轉(zhuǎn)換為比特數(shù)只需計算 log?(n),其中 n 是集合的大小。例如,集合中 1024 個等概率元素的分布熵為 10 比特。
當(dāng)分布不均勻時,分布的熵會降低。例如,如果硬幣正面或反面都有可能,但正面的概率為四分之一,反面的概率為四分之三,則該分布的總熵只有

位而不是完整的位。這量化了概率分布中所表示的不確定性;拋擲這枚彎曲硬幣的結(jié)果比拋擲一枚公平硬幣的結(jié)果不確定性較小。
香農(nóng)熵是整體的一個特例。它表征了一條消息(或者更廣義地說,是或否答案)的平均信息量,該信息量是根據(jù)可能消息的概率分布得出的。更保守的估計方法可能是只考慮概率最高的元素,而不是計算算術(shù)平均值,從而量化最壞情況。在本文中,我們將主要討論香農(nóng)熵。如果想更深入地探討和解讀熵主義的觀點,保羅·西弗森的《》值得一讀。
匿名交叉口
在 Latanya Sweeney 的論文中,她回顧了之前的一些研究成果動機——結(jié)果證明了“匿名”數(shù)據(jù)的重新識別。單獨來看,數(shù)據(jù)集中與條目相關(guān)的每個屬性(例如出生日期)似乎都無法揭示該條目的主題。但就像游戲中的是非題一樣,只需要對數(shù)級的信息量;換句話說,令人驚訝的是,少量的屬性通常足以進行重新識別:
例如,該研究發(fā)現(xiàn),87%(2.48億人口中的2.16億)的美國人口僅根據(jù){5位數(shù)郵政編碼、性別、出生日期}就可能擁有獨特的特征。顯然,包含此類個人信息的發(fā)布數(shù)據(jù)不應(yīng)被視為匿名。
粗略估計,一串 5 位數(shù)字將有log?(10?)≈ 16.6 位最大熵,但郵政編碼的數(shù)量比這要少,log?(4.3 x 10?)≈ 15.4 — 請記住,人口在郵政編碼上的分布并不均勻,因此 13.8 將是 。性別字段在大多數(shù)情況下通常包含略多于 1 位的信息,因為即使存在非二元性別,大多數(shù)條目仍是男性或女性。也就是說,具有非二元值的條目會揭示關(guān)于該條目主題的遠多于 1 位的信息。如果不考慮年齡分布,出生日期也很難估算。
忽略 2 月 29 日,假設(shè)生日均勻分布且出生年份為 2 位數(shù),則熵為log?(365 x 102)≈ 15.1. 再次,還有更多內(nèi)容,14.9 位。綜合起來,較為保守的估計大約為 29.7 位。相比之下,當(dāng)時美國人口均勻分布的熵為log?(248 x 10?)≈ 27.9 位,或log?(342 x 10?)≈ 28.4,具有最新內(nèi)容。
對于那些花了一些時間學(xué)習(xí) SQL 中“內(nèi)連接”的人來說,下面的論文圖表可能看起來很熟悉。它展示了一個不同的例子,Sweeney 使用相同的字段將醫(yī)療記錄與選民登記名單關(guān)聯(lián)起來,并在一個“匿名”醫(yī)療數(shù)據(jù)集中識別出了時任馬薩諸塞州州長 William Weld 的具體記錄:

這種韋恩圖用兩個重疊的圓圈表示兩個集合,重疊部分突出顯示,通常表示兩個集合之間的交集。集合是元素的無序集合,例如數(shù)據(jù)庫中的行、數(shù)字或任何其他可以用數(shù)學(xué)定義的元素。兩個集合的交集是同時存在于兩個集合中的元素的集合。例如,在選民登記名單中,我們可能會討論郵政編碼為 12345 的所有條目的子集,以及出生日期為 1970 年 1 月 1 日的所有條目的集合。這兩個子集的交集是郵政編碼為 12345 的條目的子集。和其出生日期為 1970 年 1 月 1 日。就州長而言,在條目子集中只有一個條目的屬性值與選民登記名單中的屬性相匹配。
對于結(jié)構(gòu)不同的數(shù)據(jù)集,存在一個小問題:如果我們將它們視為行的集合,那么它們的交集將始終為空,因為行的形狀會有所不同。在計算兩個數(shù)據(jù)庫表的內(nèi)連接時,只有存在于兩張桌子在某種意義上,通過指定類似的東西來相交連接 a.zip = b.zip 和 a.dob = a.dob
或不太便攜USING(郵政編碼,出生日期)
語法,但這些相交的值與它們來自的行相關(guān),因此鏈接兩個數(shù)據(jù)集的整體結(jié)構(gòu)更加復(fù)雜。
請注意,Sweeney 的圖表描繪了數(shù)據(jù)集列的交集,強調(diào)了更主要的問題,即“匿名”數(shù)據(jù)集中包含的屬性無意中與其他公開數(shù)據(jù)集的屬性具有非空交集。
在k匿名模型的應(yīng)用方面,由于后續(xù)工作中發(fā)現(xiàn)的一些缺陷(Aloni Cohen的“”),本文中描述的數(shù)據(jù)集匿名化程序已不再受歡迎。k匿名的核心思想是確保對于所有可能的屬性組合,至少存在k包含數(shù)據(jù)中所有特定組合的行,這意味著需要 log?(k) 個額外的信息位才能從其一致的條目中識別出一個條目。為確保這一點,建議的去識別程序是以數(shù)據(jù)相關(guān)的方式進行編輯或概括,例如,從出生日期中刪除日期,保留年份和月份,如果這還不夠,甚至可以只保留年份。Cohen 的研究表明人們很容易低估隱私的脆弱性,因為即使丟棄信息直到k每種組合,以及編輯過程本身對未編輯數(shù)據(jù)集統(tǒng)計數(shù)據(jù)的掌握。此類泄露,即使非常細微,也不僅會隨著時間的推移而累積,而且通常會加劇。使用對數(shù)尺度的比特來計算隱私損失,或許有助于更好地理解隱私通常呈指數(shù)級衰減的現(xiàn)象。
比特幣 CoinJoins 中的匿名性:交叉攻擊
Steven Goldfeder、Harry Kalodner、Dillon Reisman 和 Arvind Narayanan 在他們的論文《隱私泄露:兩種攻擊模式》中描述了兩種獨立但相關(guān)的攻擊?;蛟S更重要的是,他們清晰地展示了隱私泄露如何加劇,從而為更廣泛的攻擊提供了極具說服力的論據(jù)。
在比特幣中,一種貨幣的匿名集的自然定義是該貨幣可能被合并到的集合。如果存在多個候選簇,則匿名集并非平凡,在這種情況下,合并將取決于獲取更多信息。新交易可能會引入不確定性,因此需要為無法合并到任何現(xiàn)有簇中的輸出創(chuàng)建新的簇。另一方面,新交易和帶外信息也可以消除不確定性,促進簇的合并。最常見的情況是,如果多輸入啟發(fā)式方法被認為對此類新交易有效,那么輸入貨幣的簇將被合并。然而,正如我們之前所見,存在許多啟發(fā)式方法,其中一些的準(zhǔn)確性令人震驚。
假設(shè) Alice 收到了一些比特幣,這些比特幣被存入了她控制的錢包。其中一些可能是從交易所提取的(可能帶有 KYC 信息)。也許是朋友付了她的午餐錢。也許她賣掉了自己的車。在進行了幾次交易后,Alice 意識到她的交易記錄對所有人都可見,而且很容易解讀,但很快她就需要進行不止一次交易,而是……二單獨的交易,并且隱私保證比她迄今為止所依賴的更強。
在了解了一些隱私知識后,Alice 決定使用支持 CoinJoin 的錢包。在幾筆 CoinJoin 交易中,她用掉現(xiàn)有的幣,換取了顯然設(shè)置了匿名性的替代幣。在 CoinJoin 之前,她的錢包很可能是可聚類的。CoinJoin 之后,她現(xiàn)在擁有的每個 UTXO 都無法分配給任何特定的聚類,因為其他用戶的錢包聚類也隱含在各個 CoinJoin 交易中。
CoinJoin 隱私背后的直覺是,由于屬于不同用戶的多個輸入用于創(chuàng)建看起來相同的輸出,任何輸出都不能與特定的輸入關(guān)聯(lián)。這有點類似于混合網(wǎng)絡(luò) (mixnet),其中每筆 CoinJoin 交易都是一次中繼,而混合的“消息”就是代幣本身。這個比喻過于簡單,在實現(xiàn) CoinJoin 時會遇到許多導(dǎo)致其崩潰的復(fù)雜因素,但在本文中我們將忽略這些細微差別,并假設(shè) Alice 選擇的 CoinJoin 錢包始終能夠成功地在每個 CoinJoin 中只使用一個輸入,從而實現(xiàn)其資金與 CoinJoin 其他參與方資金的完美混合。在這些假設(shè)下,如果有kCoinJoin 交易中的等效輸出,以及k為輸入設(shè)置單獨的集群,那么在創(chuàng)建此交易時,每個輸出的匿名集應(yīng)該具有 log?(k) 位熵。
CoinJoin 后聚類
現(xiàn)在,論文中描述的第一次攻擊已準(zhǔn)備就緒。此次攻擊是通過引入第三方資源(例如商家網(wǎng)站上支付處理器的 JavaScript)實現(xiàn)的。假設(shè)用于交易的支付地址被泄露給第三方,這將導(dǎo)致 Alice 的網(wǎng)絡(luò)會話與她的鏈上交易關(guān)聯(lián)起來。這篇論文發(fā)表于 2017 年,因此與網(wǎng)絡(luò)相關(guān)的泄密細節(jié)如今已有些過時,但其背后的原理依然重要。
Alice 使用她的一個 CoinJoin UTXO 完成了第一筆需要隱私保護的交易。假設(shè)沒有語義泄露(例如與購買相關(guān)的賬單地址)或元數(shù)據(jù)泄露(例如她本人),這筆交易應(yīng)該能夠保留 Alice 從之前的 CoinJoin 交易中獲得的隱私。如圖所示,這筆交易相當(dāng)于 1 位。輸入或輸出的顏色表示它們已被分配到的集群。Alice 的幣為紅色,漸變表示模糊性:

雖然第一筆交易本身并不能揭示太多信息,但假設(shè) Alice 進行了另一筆交易。假設(shè)這筆交易是與另一個商家進行的,但該商家與第一筆商家使用相同的支付處理器。簡單來說,下圖似乎代表了 Alice 支付交易的隱私性,而攻擊者需要 2 位額外信息(每筆交易 1 位)才能將這兩筆交易歸因于 Alice 的集群:

盡管 Alice 有意將其與第一筆交易斷開關(guān)聯(lián),但她可能并未意識到自己的網(wǎng)頁瀏覽活動正在被追蹤。論文表明,這種追蹤不僅可行,而且切實可行,甚至可以向第三方揭示這兩筆交易可以聚類,即使它們在鏈上看起來毫無關(guān)聯(lián)。我們可以用其他顏色來直觀地表示這種聚類:

正如論文中所討論的,網(wǎng)絡(luò)追蹤只是促成集群信息泄露的眾多途徑之一。例如,網(wǎng)站入侵可能導(dǎo)致購買記錄被公開,即使是在事發(fā)多年之后。至少在 年間,本應(yīng)保護受害者的法律訴訟,卻因不恰當(dāng)?shù)貏h除交易金額而無謂地泄露了客戶的鏈上交易信息,最終使受害者遭受了更大的傷害。之前關(guān)于錢包集群歷史的文章提供了幾個額外的例子。
具體來說,在 CoinJoin 的背景下,這種關(guān)聯(lián)發(fā)生的典型方式是,混合后支付交易的找零輸出隨后被 CoinJoin,并通過對輸入進行聚類使其可關(guān)聯(lián)。這也被稱為“毒性找零問題”,如下圖所示。請注意,本例中的白色區(qū)域并不代表單個聚類,只是缺少聚類信息。

如果所謂的“無需信任”的 CoinJoin 協(xié)議的協(xié)調(diào)者是惡意的,那么即使這在鏈上不明顯,也可能鏈接交易。其后果與論文中描述的攻擊相同,只是 CoinJoin 協(xié)調(diào)者還可以假裝某些參與者未能及時提交簽名,主動但隱蔽地進行,或者至少可以否認地干擾輪次以獲取更多聚類信息。
交叉前導(dǎo)簇
不幸的是,Alice 的故事并沒有就此結(jié)束。論文接下來指出,鑒于 CoinJoin 后交易之間存在這種關(guān)聯(lián),無論這種聚類是如何學(xué)習(xí)的,對 CoinJoin 交易本身的隱私進行交叉攻擊也是可能的。
這就像對手在玩“猜猜我是誰?”游戲,并收到一筆支付交易,然后試圖猜測資金的來源。考慮每筆 CoinJoin 交易的輸入集。每一枚花費的幣都被分配到某個集群。Alice 參與的每一筆 CoinJoin 交易都有一個輸入,可以鏈接到以下某個集群:她集群。此類交易的隱私性源于與大量原本不相關(guān)的集群相鏈接。對手知道 CoinJoin 后交易將多個 CoinJoin 輸出鏈接在一起,因此可以計算相關(guān)集群集的交集。隨機個人用戶參與的頻率是多少每一個Alice 進行過哪些交易?如果不止一筆呢?這種情況并不常見。假設(shè)交集包含一個唯一的集群,這種情況最終可能會經(jīng)常發(fā)生。在這種情況下,攻擊者將能夠?qū)?Alice 的交易彼此關(guān)聯(lián),并將其與 CoinJoin 之前的交易歷史記錄關(guān)聯(lián)起來,從而有效地撤銷混合。
從視覺上看,這結(jié)合了之前圖表的推論。對于后兩張圖中紫色簇中的每枚硬幣,我們可以將其與前一張圖中描繪的漸變顏色集相交:

只有 Alice 的紅色集群位于交集處,因此紫色集群可以合并到紅色集群中。由于本例中只有兩筆用戶 CoinJoin 交易,因此不僅 Alice 的集群會合并,其余集群也可以通過排除法與其祖先集群合并。因此,在這種特殊情況下,Alice 的可鏈接支付也有可能使假設(shè)的 Bob 和 Carol 去匿名化:

這表明,即使 CoinJoins 的功能像完美混合一樣(但事實并非如此),混合后交易隱私不足也會進一步損害先前 CoinJoin 交易的隱私,而且速度比直覺上要快得多。連接比特幣交易的圖結(jié)構(gòu)包含大量可供去匿名化攻擊者利用的信息。
鑒于防止甚至控制隱私泄露的挑戰(zhàn),隱私問題常常被淡化。希望人們的意識能夠提高,事情能夠像過去幾十年的密碼學(xué)那樣發(fā)展——無論是不再使用弱密鑰,還是最初大多被忽視,但現(xiàn)在人們普遍認為它們實際上可以被利用,而沒有考慮到它們的實現(xiàn)被認為是不安全的。話雖如此,它總是更具挑戰(zhàn)性:在密碼學(xué)中,我們有更多機會通過優(yōu)先使用臨時密鑰而不是長期密鑰,或者至少定期輪換長期密鑰來限制意外泄露的危害。遺憾的是,我能想到的隱私領(lǐng)域最接近輪換密鑰的方案是證人保護計劃——這是一種相當(dāng)極端且成本高昂的措施,而且遠非完美有效。
對于現(xiàn)實世界中的隱私,CoinJoin 隱私的挑戰(zhàn)依然存在。
這是 這篇文章由 撰寫,發(fā)布于 6 月 11 日。
骨髓 每周都會發(fā)布一些與比特幣和比特幣愛好者相關(guān)的熱門話題的深度文章。如果 如果您有符合該模型的投稿,請隨時聯(lián)系 editor[at]bitcoinmagazine.com。






.png)





















