📜 [專欄新文章] 隱私、區塊鏈與洋蔥路由
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
隱私為何重要?區塊鏈是匿名的嗎?洋蔥路由如何改進區塊鏈?
前言
自2008年區塊鏈以比特幣的面貌問世後,它便被視為 Web 3.0,並被期許能夠進一步為人類帶來金融與治理上的大躍進。區塊鏈或許會成為如同全球資訊網一般的基礎建設,如果我們已經開始注重個人於網路上的隱私,那麼我們更應該關心這項全新的技術是否能更好地保護它。
筆者將於本文中闡述隱私的重要性,接著進一步分析區塊鏈是否能夠保護用戶隱私,最後再簡介一個知名的匿名技術 — 洋蔥路由,並列舉幾個其用於改進區塊鏈(特別是以太坊)的相關提案。
特別感謝以太坊研究員 Chih-Cheng Liang 與民間高手敖烏協助校閱並給予回饋。
隱私的重要
網際網路(Internet)無疑是 20 世紀末最偉大的發明,它催生了全新的商業模式,也使得資訊能以位元的形式進行光速傳播,更使人類得以進行前所未有的大規模協作。而自從 1990 年全球資訊網(World Wide Web)的問世以來,網路已和現代文明生活密不可分。經過近 30 年的發展,人類在網路上製造了巨量的資料,這些資料會揭露使用者的隱私。透過一個人的資料,企業或者政府能夠比你自己更了解你。這促使用戶對隱私的愈發重視 — 正如同你不會允許第三者監聽你的電話,你也不希望有第三者監看你的瀏覽器搜尋歷史。
然而,如今的網路是徹底的中心化,中心化也意謂著過大的權力,有種種跡象顯示:網路正在成為政府當局監控人民的工具。例如:中國的淨網衛士[1]、美國的稜鏡計劃[2]等。那麼,政府應該監控人民嗎?其中一派的人認為平日不做虧心事,半夜不怕鬼敲門,這也就是常見的無所隱瞞論[3]:
我不在乎隱私權,因為我沒什麼好隱瞞的。
不過持有這類論點的人通常會被下面的說法反駁:
既然沒什麼好隱瞞的,那請把你的 Email 帳號密碼給我,讓我揭露其中我認為有趣的部分。
大多數正常人應該都不會接受這個提議。
隱私應當與言論自由一樣,是公民的基本權利。事實上,隱私是一個既廣且深的題目,它涉及了心理學、社會學、倫理學、人類學、資訊科學、密碼學等領域,這裡[4]有更多關於關於隱私的討論以及網路隱私工具的整理。
隱私與區塊鏈
有了網際網路後,接下來人類或許可以透過區塊鏈來建構出一個免除人性且完全仰賴自然法則(數學)運行的去中心化系統。在中心化世界中,我們需要免於政府監控的隱私;在去中心化世界中,我們仍然需要隱私以享有真正的平等。
正如同本文的前言所述:區塊鏈也許會成為如同全球資訊網一般的基礎建設,如果我們已經開始注重網路隱私,那麼我們更應該關心區塊鏈是否能更好地保護它。
隱私與匿名
Privacy vs Anonymity [5]
當我們論及隱私時,我們通常是指廣義的隱私:別人不知道你是誰,也不知道你在做什麼。事實上,隱私包含兩個概念:狹義的隱私(Privacy)與匿名(Anonymity)。狹義的隱私就是:別人知道你是誰,但不知道你在做什麼;匿名則是:別人知道你在做什麼,但不知道你是誰。
隱私與匿名對於隱私權來說都很重要,也可以透過不同的方法達成,接下來本文將聚焦於匿名的討論。另外,筆者在接下來的文章中所提及的隱私,指的皆是狹義的隱私。
網路的匿名
以當今的網路架構(TCP/IP 協定組)來說,匿名就是請求端(Requester)向響應端(Responder)請求資源時藏匿其本身的 IP 位址 — 響應端知道請求端在做什麼(索取的資源),但不知道是誰(IP 位置)在做。
IP 位置會揭露個人資訊。在台灣,只需透過 TWNIC 資料庫就可向台灣的網路服務供應商(Internet Service Provider, ISP),例如中華電信,取得某 IP 的註冊者身份及姓名/電話/地址之類的個資。
ISP 是網路基礎建設的部署者與營運者,理論上它能知道關於你在使用網路的所有資訊,只是這些資訊被法律保護起來,並透過公權力保證:政府只在必要時能夠取得這些資訊。萬一政府本身就是資訊的監控者呢?因此,我們需要有在 ISP 能窺知一切的情形下仍能維持匿名的方法。
區塊鏈能保護隱私、維持匿名嗎?
區塊鏈除了其本身運作的上層應用協定之外,還包含了下層網路協定。因此,這個問題可以分為應用層與網路層兩個部分來看 。
應用層
應用層負責實作狀態機複製(State Machine Replication),每個節點收到由共識背書的交易後,便可將交易內容作為轉換函數(Transition Function)於本機執行狀態轉換(State Transition)。
區塊鏈上的交易內容與狀態是應當被保護的隱私,一個保護隱私的直覺是:將所有的交易(Transaction)與狀態(State)加密。然而實際上,幾乎目前所有的主流區塊鏈,包含以太坊,其鏈上的交易及狀態皆為未加密的明文,用戶不僅可以查詢任一地址的交易歷史,還能知道任一地址呼叫某智能合約的次數與參數。也就是說,當今主流區塊鏈並未保護隱私。
雖然區塊鏈上的交易使用假名(Pseudonym),即地址(Address),但由於所有交易及狀態皆為明文,因此任何人都可以對所有假名進行分析並建構出用戶輪廓(User Profile)。更有研究[6]指出有些方法可以解析出假名與 IP 的映射關係(詳見下個段落),一旦 IP 與假名產生關聯,則用戶的每個行為都如同攤在陽光下一般赤裸。
區塊鏈的隱私問題很早便引起研究員的重視,因此目前已有諸多提供隱私保護的區塊鏈被提出,例如運用零知識證明(Zero-knowledge Proof)的 Zcash、運用環簽章(Ring Signature)的 Monero、 運用同態加密(Homomorphic Encryption)的 MimbleWimble 等等。區塊鏈隱私是一個大量涉及密碼學的艱澀主題,本文礙於篇幅不再深入探討,想深入鑽研的讀者不妨造訪台北以太坊社群專欄,其中有若干優質文章討論此一主題。
網路層
節點於應用層產生的共識訊息或交易訊息需透過網路層廣播(Broadcast)到其他節點。由於當今的主流區塊鏈節點皆未採取使網路維持匿名的技術,例如代理(Proxy)、虛擬私人網路(Virtual Private Network, VPN)或下文即將介紹的洋蔥路由(Onion Routing),因此區塊鏈無法使用戶維持匿名 — 因為對收到訊息的節點來說,它既知道廣播節點在做什麼(收到的訊息),也知道廣播節點是誰(訊息的 IP 位置)。
一個常見的問題是:使用假名難道不是匿名嗎?若能找到該假名與特定 IP 的映射關係的話就不是。一般來說,要找到與某假名對應的 IP 相當困難,幾可說是大海撈針,但是至少在下列兩種情況下可以找到對應關係:1. 該假名的用戶自願揭露真實 IP,例如在社群網站公開以太坊地址;2. 區塊鏈網路遭受去匿名化攻擊(Deanonymization Attack)[6]。
洩漏假名與 IP 的關聯會有什麼問題? 除了該 IP 的真實身份可能被揭露外,該區塊鏈節點亦可能遭受流量分析(Traffic Analysis)、服務阻斷(Denial of Service)或者審查(Censorship),可以說是有百害而無一利。
區塊鏈如何維持匿名?
其實上文已給出了能讓區塊鏈維持匿名的線索:現有匿名技術的應用。我們先來進一步理解區塊鏈網路層與深入探討網際網路協定的運作原理。
區塊鏈網路層的運作原理
P2P Overlay Network [7]
區塊鏈是一個對等網路(Peer-to-peer, P2P),而對等網路是一種覆蓋網路(Overlay Network),需建構於實體網路(Physical Network)之上。
覆蓋網路有兩種常見的通訊模式:一種是基於中繼的(Relay-based)通訊,在此通訊模式下的訊息皆有明確的接收端,因而節點會將不屬於自己的訊息中繼(Relay)給下一個可能是接收端的節點,分散式雜湊表(Distributed Hash Table, DHT)就是一種基於中繼的對等網路;另一種是基於廣播的(Broadcast-based)通訊,在此通訊模式下的訊息會被廣播給所有節點,節點會接收所有訊息,並且再度廣播至其他節點,直到網路中所有節點都收到該訊息,區塊鏈網路層就是一種基於廣播的對等網路。
覆蓋網路旨在將實體網路的通訊模式抽象化並於其上組成另一個拓墣(Topology)與路由機制(Routing Mechanism)。然而實際上,實體網路的通訊仍需遵循 TCP/IP 協定組的規範。那麼,實體網路又是如何運作的呢?
網際網路的運作原理
OSI Model vs TCP/IP Model
實體網路即是網際網路,它的發明可以追朔至 Robert Kahn 和 Vinton Cerf 於1974 年共同發表的原型[12],該原型經過數年的迭代後演變成我們當今使用的 TCP/IP 協定組[8]。全球資訊網(WWW)的發明更進一步驅使各國的 ISP 建立基於 TCP/IP 協定組的網路基礎建設。網際網路在多個國家經過近 30 年的部署後逐漸發展成今日的規模,成為邏輯上全球最巨大的單一網路。
1984 年,國際標準化組織(ISO)也發表了 OSI 概念模型[9],雖然較 TCP/IP 協定組晚了 10 年,但是 OSI 模型為日後可能出現的新協定提供了良好的理論框架,並且與 TCP/IP 協定組四層協定之間有映射關係,能夠很好地描述既存的 TCP/IP 協定組。
TCP/IP 協定組的各層各有不同的協定,且各層之間的運作細節是抽象的,究竟這樣一個龐大複雜的系統是如何運作的呢?
Packet Traveling [10][11]
事實上,封包的傳送正如同寄送包裹。例如筆者從台北寄一箱書到舊金山,假設每個包裹只能放若干本書,這箱書將分成多個包裹寄送,每個包裹需註明寄件地址、收件地址、收件者。寄送流程從郵局開始,一路經過台北物流中心 → 北台灣物流中心 → 基隆港 → 洛杉磯港 → 北加州物流中心 → 舊金山物流中心 → 收件者住處,最後由收件者收取。
這如同從 IP 位於台北的設備連上 IP 位於舊金山的網站,資料將被切分成多個固定大小的封包(Packet)之後個別帶上請求端 IP、響應端 IP 及其他必要資訊,接著便從最近的路由器(Router)出發,一路送至位於舊金山的伺服器(Server)。
每個包裹上的收件地址也如同 IP 位置,是全球唯一的位置識別。包裹的收件地址中除了包含收件者的所在城市、街道,還包含了門號,每個門號後都住著不同的收件者。門號正如同封包中後綴於 IP 的連接埠(Port),而住在不同門號的收件者也如同使用不同連接埠的應用程式(Application),分別在等待屬於他們的包裹。實際上,特定的連接埠會被分配給特定的應用程式,例如 Email 使用連接埠 25、HTTPS 使用連接埠 443 等等。
雖然包裹的最終目的地是收件地址,但包裹在運送途中也會有數個短程目的地 — 也就是各地的物流中心。包裹在各個物流中心之間移動,例如從北部物流中心到基隆港,再從基隆港到洛杉磯港,雖然其短程目的地會不斷改變,但其最終目的地會保持不變。
封包的最終目的地稱為端點(End),短程目的地稱為轉跳(Hop) — 也就是路由器(Router)。路由器能將封包從一個網段送至另一個網段,直到封包抵達其端點 IP 所在的網段為止。封包使用兩種定址方法:以 IP 表示端點的位置,而以 MAC 表示路由器的位置。這種從轉跳至轉跳(From Hop to Hop)的通訊是屬於 TCP/IP 協定組第一層:網路存取層(Network Access Layer)的協定。
那麼要如何決定包裹的下一個短程目的地呢?理論上,每個物流中心皆需選擇與最終目的地物理距離最短的物流中心作為下一個短期目的地。例如對寄到舊金山的包裹來說,位於基隆港的包裹下一站應該是洛杉磯港,而不是上海港。
封包則使用路由器中的路由表(Routing Table)來決定下一個轉跳位置,有數種不同的路由協定,例如 RIP / IGRP 等,可以進行路由表的更新。從端點到端點(From End to End)的通訊正是屬於 TCP/IP 協定組第二層:網際層(Internet Layer)的協定。
若一箱書需要分多次寄送,則可以採取不同的寄送策略。至於選擇何種寄送策略,則端看包裹內容物的屬性:
求穩定的策略:每個包裹都會有個序號,寄包裹前要先寫一封信通知收件者,收件者於收到信後需回信確認,寄件者收到確認信後“再”寫一次信告訴收件者「我收到了你的確認」,然後才能寄出包裹。收件者收到包裹後也需回確認信給寄件者,如果寄件者沒收到某序號包裹的回信,則會重寄該包裹。
求效率的策略:連續寄出所有的包裹,收件者不需回信確認。
橫跨多個封包的通訊是屬於 TCP/IP 協定組第三層:傳輸層(Transport Layer)的協定。這兩種策略也對應著傳輸層的兩個主要協定:TCP 與 UDP。TCP 注重穩定,它要求端點於傳送封包前必須先進行三向交握(Three-way Handshake),也就是確認彼此的確認,以建立穩固的連線,且端點在接收封包後也會回傳確認訊息,以確保沒有任何一個封包被遺失;反之,UDP 注重效率,它不要求端點在通訊前進行繁瑣的確認,而是直接傳送封包。
包裹本身亦可以裝載任何內容:這箱書可以是一套金庸全集,也可以是一年份的交換日記;同理,封包內的資料也可以是來自任何上層協定的內容,例如 HTTPS / SMTP / SSH / FTP 等等。這些上層協定都被歸類為 TCP/IP 協定組第四層:應用層(Application Layer)的協定。
維持匿名的技術
區塊鏈仰賴於實體網路傳送訊息,欲使區塊鏈網路層維持匿名,則需使實體網路維持匿名。那麼實體網路如何匿名呢? 若以寄包裹的例子來看,維持匿名,也就是不要讓收件者知道寄件地址。
一個直覺的思路是:先將包裹寄給某個中介(Intermediary),再由中介寄給收件者。如此收件者看到的寄件地址將會是中介的地址,而非原寄件者的地址 — 這也就是代理(Proxy)以及 VPN 等匿名技術所採取的作法。
不過這個作法的風險在於:寄件者必須選擇一個守口如瓶、值得信賴的中介。由於中介同時知道寄件地址與收件地址,倘若中介將寄件地址告知收件人,則寄件者的匿名性蕩然無存。
有沒有辦法可以避免使單一中介毀壞匿名性呢?一個中介不夠,那用兩個、三個、甚至多個呢?這便是洋蔥路由的基本思路。由於沒有任何一個中介同時知道寄件地址與收件地址,因此想破壞寄件者匿名性將變得更困難。
洋蔥路由與 Tor
洋蔥路由(Onion Routing)最初是為了保護美國政府情報通訊而開發的協定,後來卻因為其能幫助平民抵抗政府監控而變得世界聞名。
1997 年,Michael G. Reed、Paul F. Syverson 和 David M. Goldschlag 於美國海軍研究實驗室首先發明了洋蔥路由[13],而 Roger Dingledine 和 Nick Mathewson 於美國國防高等研究計劃署(DARPA)緊接著開始著手開發 Tor,第一版 Tor 於 2003 年釋出[14]。2004 年,美國海軍研究實驗室以自由軟體授權條款開放了 Tor 原始碼。此後,Tor 開始接受電子前哨基金會(Electronic Frontier Foundation)的資助;2006年,非營利組織「Tor 專案小組」(The Tor Project)成立,負責維護 Tor 直至今日。
Tor [15]是洋蔥路由的實作,它除了改進原始設計中的缺陷,例如線路(Circuit)的建立機制,也加入若干原始設計中沒有的部分,例如目錄伺服器(Directory Server)與洋蔥服務(Onion Service),使系統更強健且具有更高的匿名性。
Tor 自 2004 年上線至今已有超過 7000 個由志願者部署的節點,已然是一個強大的匿名工具。然而這也使其成為雙面刃:一方面它可以幫助吹哨者揭露不法、對抗監控;另一方面它也助長了販毒、走私等犯罪活動。但不論如何,其技術本身的精巧,才是本文所關注的重點。
Tor 的運作原理
Tor Overview [16]
Tor 是基於中繼的(Relay-based)覆蓋網路。Tor 的基本思路是:利用多個節點轉送封包,並且透過密碼學保證每個節點僅有局部資訊,沒有全局資訊,例如:每個節點皆無法同時得知請求端與響應端的 IP,也無法解析線路的完整組成。
Tor 節點也稱為洋蔥路由器(Onion Router),封包皆需透過由節點組成的線路(Circuit)傳送。要注意的是,Tor 線路僅是覆蓋網路中的路徑,並非實體網路的線路。每條線路皆由 3 個節點組成,請求端首先會與 3 個節點建立線路並分別與每個節點交換線路密鑰(Circuit Key)。
請求端會使用其擁有的 3 組線路密鑰對每個送出的封包進行 3 層加密,且最內層密文需用出口節點的密鑰、最外層密文需用入口節點的密鑰,如此才能確保線路上的節點都只能解開封包中屬於該節點的密文。被加密後的封包被稱為洋蔥,因其如洋蔥般可以被一層一層剝開,這就是洋蔥路由這個名稱的由來。
封包經過線路抵達出口節點後,便會由出口節點送往真正的響應端。同樣的線路也會被用於由響應端回傳的封包,只是這一次節點會將每個送來的封包加密後再回傳給上一個節點,如此請求端收到的封包就會仍是一顆多層加密的洋蔥。
那麼,請求端該選擇哪些節點來組成線路呢?Tor 引入了目錄伺服器(Directory Server)此一設計。目錄伺服器會列出 Tor 網路中所有可用的節點[17],請求端可以透過目錄伺服器選擇可用的洋蔥路由器以建立線路。目前 Tor 網路中有 9 個分別由不同組織維護的目錄,中心化的程度相當高,這也成為 Tor 安全上的隱憂。
Tor 線路的建立機制
Tor Circuit Construction [18]
Tor 是如何建立線路的呢?如上圖所示,Tor 運用伸縮(Telescoping)的策略來建立線路,從第一個節點開始,逐次推進到第三個節點。首先,請求端與第一個節點進行交握(Handshake)並使用橢圓曲線迪菲 — 赫爾曼密鑰交換(Elliptic Curve Diffie–Hellman key Exchange, ECDH)協定來進行線路密鑰的交換。
為了維持匿名,請求端接著再透過第一個節點向第二個節點交握。與第二個節點交換密鑰後,請求端再透過第一、二個節點向第三個節點交握與交換密鑰,如此慢慢地延伸線路直至其完全建立。線路建立後,請求端便能透過線路與響應端進行 TCP 連線,若順利連接,便可以開始透過線路傳送封包。
洋蔥服務
Clearnet, Deepweb and Darknet [21]
洋蔥服務(Onion Service)/ 隱藏服務(Hidden Service)是暗網(Darknet)的一部分,是一種必須使用特殊軟體,例如 Tor,才能造訪的服務;與暗網相對的是明網(Clearnet),表示可以被搜尋引擎索引的各種服務;深網(Deep Web)則是指未被索引的服務,這些服務不需要特殊軟體也能造訪,與暗網不同。
當透過 Tor 使用洋蔥服務時,請求端與響應端都將不會知道彼此的 IP,只有被響應端選定的節點:介紹點(Introduction Point)會引領請求端至另一個節點:會面點(Rendezvous Point),兩端再分別與會面點建立線路以進行通訊。也就是說,請求端的封包必須經過 6 個節點的轉送才能送往響應端,而所有的資料也會採取端對端加密(End-to-end Encryption),安全強度非常高。
洋蔥服務及暗網是一個令人興奮的主題,礙於篇幅,筆者將另撰文闡述。
混合網路、大蒜路由與洋蔥路由
這裡再接著介紹兩個與洋蔥路由系出同源的匿名技術:混合網路與大蒜路由。
Mix Network Overview [22]
混合網路(Mix Network)早在 1981 年就由 David Chaum 發明出來了[23],可以說是匿名技術的始祖。
洋蔥路由的安全性奠基於「攻擊者無法獲得全局資訊」的假設[24],然而一旦有攻擊者具有監控多個 ISP 流量的能力,則攻擊者仍然可以獲知線路的組成,並對其進行流量分析;混合網路則不僅會混合線路節點,還會混合來自不同節點的訊息,就算攻擊者可以監控全球 ISP 的流量,混合網路也能保證維持匿名性。
然而高安全性的代價就是高延遲(Latency),這導致混合網路無法被大規模應用,或許洋蔥路由的設計是一種為了實現低延遲的妥協。
Garlic Routing Overview [25]
混合網路啟發了洋蔥路由,洋蔥路由也啟發了大蒜路由。2003年上線的 I2P(Invisible Internet Project)便是基於大蒜路由(Garlic Routing)的開源軟體,可以視為是去中心化版的 Tor。幾乎所有大蒜路由中的組件,在洋蔥路由中都有對應的概念:例如大蒜路由的隧道(Tunnel)即是洋蔥路由的線路;I2P 的網路資料庫(NetDB)即是 Tor 的目錄;I2P中的匿名服務(Eepsite)即是 Tor 的洋蔥服務。
不過,大蒜路由也有其創新之處:它允許多個封包共用隧道以節省建立隧道的成本,且其使用的網路資料庫實際上是一個分散式雜湊表(DHT),這使 I2P 的運作徹底去中心化。若想進一步理解 DHT 的運作原理,可以參考筆者之前所撰寫的文章:
連Ethereum都在用!用一個例子徹底理解DHT
I2P 最大的詬病就是連線速度太慢,一個缺乏激勵的去中心化網路恐怕很難吸引足夠的節點願意持續貢獻頻寬與電費。
區塊鏈與洋蔥路由
那麼,基於實體網路的區塊鏈能不能使用洋蔥路由或大蒜路由/混合網路/其他技術,以維持節點的匿名?答案是肯定的。事實上,目前已經出現數個專案與提案:
全新的專案
Dusk:實作大蒜路由的區塊鏈[32],不過官方已宣布因其影響網路效能而暫停開發此功能。
cMix:透過預先計算(Precomputation)以實現低延遲的混合網路[33],是混合網路發明者 David Chaum 近期的研究,值得期待。
Loki:結合 Monero 與 Tor/I2P 的區塊鏈 [34],並使用代幣激勵節點貢獻頻寬與電力,由其白皮書可以看出發明者對於匿名技術的熱愛與信仰。
於主流區塊鏈的提案
比特幣:全世界第一條區塊鏈,將於其網路使用一個不同於洋蔥路由的匿名技術:Dandelion++[30][31],該匿名技術因其訊息傳播路徑的形狀類似浦公英而得其名。
閃電網路(Lightning Network):知名的比特幣第二層方案,將於其網路內實作洋蔥路由[27]。
Monero:使用環簽章保護用戶隱私的區塊鏈,將於其網路內實作大蒜路由,已開發出 Kovri[28] 並成為 I2P 官方認可的客戶端之一[29]。
於以太坊的提案
2018 年 12 月,Mustafa Al-Bassam 於以太坊官方研究論壇提議利用洋蔥路由改進輕節點之資料可得性(Light Client Data Availability)[36]。若讀者想了解更多關於以太坊輕節點的研究,可以參考台北以太坊社群專欄的這篇文章。資料可得性是輕節點實現的關鍵,而這之中更關鍵的是:如何向第三方證明全節點的資料可得性?由於這個提案巧妙地運用了洋蔥路由的特性,因此在今年 7 月在另一則討論中,Vitalik 亦強烈建議應儘速使洋蔥路由成為以太坊的標準[35]。
在這個提案中,輕節點需建立洋蔥路由線路,然而線路節點並非由目錄中挑選,而是由前一個節點的可驗證隨機函數(Verifiable Random Function, VRF)決定。例如線路中的第二個節點需由第一個節點的 VRF 決定。線路建立後,出口節點便可以接著向全節點請求特定的可驗證資料。由於輕節點在過程中維持匿名,因此可以防止全節點對輕節點的審查(Censoring)。取得可驗證資料後,其便與 VRF 證明沿著原線路傳回輕節點,輕節點再將可驗證資料與 VRF 證明提交至合約由第三方驗證。若第三方驗證正確,則資料可得性得證。
結語
隱私與匿名是自由的最後一道防線,我們應該盡可能地捍衛它,不論是透過本文介紹的匿名技術或者其他方式。然而,一個能保護隱私與維持匿名的區塊鏈是否能實現真正的去中心化?這是一個值得深思的問題。
本文也是筆者研究區塊鏈至今跨度最廣的一篇文章,希望讀者能如我一樣享受這段令人驚奇又興奮的探索旅程。
參考資料
[1] Jingwang Weishi, Wikipedia
[2] PRISM, Wikipedia
[3] privacytools.io
[4] Nothing-to-hide Argument, Wikipedia
[5] Anonymity vs Privacy vs Security
[6] Deanonymisation of Clients in Bitcoin P2P Network, Alex Biryukov, Dmitry Khovratovich, Ivan Pustogarov, 2014
[7] Example: P2P system topology
[8] Internet protocol suite, Wikipedia
[9] OSI model, Wikipedia
[10] Packet Traveling: OSI Model
[11] Packet Traveling — How Packets Move Through a Network
[12] A Protocol for Packet Network Intercommunication, VINTON G. CERF, ROBERT E. KAHN, 1974
[13] Anonymous Connections and Onion Routing, Michael G. Reed, Paul F. Syverson, and David M. Goldschlag, 1998
[14] Tor: The Second-Generation Onion Router, Roger Dingledine, Nick Mathewson, Paul Syverson, 2004
[15] Tor, Wikipedia
[16] What actually is the Darknet?
[17] Tor Network Status
[18] Inside Job: Applying Traffic Analysis to Measure Tor from Within, Rob Jansen, Marc Juarez, Rafa Galvez, Tariq Elahi, Claudia Diaz, 2018
[19] How Does Tor Really Work? The Definitive Visual Guide (2019)
[20] Tor Circuit Construction via Telescoping
[21] The DarkNet and its role in online piracy
[22] Mix network, Wikipedia
[23] Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms, David Chaum, 1981
[24] The differences between onion routing and mix networks
[25] Monitoring the I2P network, Juan Pablo Timpanaro, Isabelle Chrisment, Olivier Festor, 2011
[26] I2P Data Communication System, Bassam Zantout, Ramzi A. Haraty, 2002
[27] BOLT #4: Onion Routing Protocol
[28] Kovri
[29] Alternative I2P clients
[30] Bitcoin BIP-0156
[31] Dandelion++: Lightweight Cryptocurrency Networking with Formal Anonymity Guarantees, Giulia Fanti, Shaileshh Bojja Venkatakrishnan, Surya Bakshi, Bradley Denby, Shruti Bhargava, Andrew Miller, Pramod Viswanath, 2018
[32] The Dusk Network Whitepaper, Toghrul Maharramov, Dmitry Khovratovich, Emanuele Francioni, Fulvio Venturelli, 2019
[33] cMix: Mixing with Minimal Real-Time Asymmetric Cryptographic Operations, David Chaum, Debajyoti Das, Farid Javani, Aniket Kate, Anna Krasnova, Joeri De Ruiter, Alan T. Sherman, 2017
[34] Loki: Private transactions, decentralised communication, Kee Jefferys, Simon Harman, Johnathan Ross, Paul McLean, 2018
[35] Open Research Questions For Phases 0 to 2
[36] Towards on-chain non-interactive data availability proofs
隱私、區塊鏈與洋蔥路由 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
ftp server教學 在 [情報] FTP教學網站 的八卦
[情報]FTP教學網站@isu_cyc11,共有0則留言,0人參與討論,0推0噓0→, ... 簡易個人FTP 站,和好友分享檔案使用PCMan's FTP Server 輕鬆快速架設FTP ... ... <看更多>
ftp server教學 在 [免費軟體] 隨身檔案伺服器Mini FTP-G ,隨身帶著走 - Mobile01 的八卦
œ 綠色軟體,使用應用程式組態檔,可置於隨身碟隨身攜帶。 œ 多帳號匿名存取功能。 œ 內建組態設定與新增帳號精靈。 œ 通迅埠、最大連線、單一IP最大連線、連線逾時(分) ... ... <看更多>
ftp server教學 在 [情報] FTP教學網站- 看板ISU_CYC11 的八卦
有固定ip的學網大大一起來分享你的A......B.C.D.E槽吧
https://openmark.myweb.hinet.net/PCManFTP.htm
PCMan 教你幾分鐘內學會架簡易個人 FTP 站,和好友分享檔案
使用 PCMan's FTP Server 輕鬆快速架設 FTP 站 (初版:2004.05.08 / 修訂:2005.04.13)
下文歡迎網友轉錄轉載,但是一律請註明原作者以及文章出處 作者:國立陽明大學醫學系 洪任諭
--------------------------------------------------------------------------------
千萬要給自己一個機會嘗試,相信我,這真的很簡單。
隨著電腦和網路的普及,對於一般個人來說,尤其是使用學術網路的學生,架設FTP站已經是很普遍的事情。再加上作業系統的進步,還有網路上各式各樣的軟體,
架設 FTP 站再也不是少數高手的專利。
硬碟容量越來越大,資料越來越多,電腦裡滿滿的寶藏,要是能和大家分享該多好呢,
但很多人不熟悉電腦操作,也不想花時間學習,因而卻步不前,這是很可惜的,
其實如果是在Windows系統下,這只需要短短幾分鐘時間就能學會。
在Windows環境下,以前只有需要付費的少數外國軟體可以使用,
不好操作又有一些中文不相容的問題,後來隨著軟體的發展,
漸漸的各式軟體如雨後春筍般出現,百家爭鳴,各有所長,其中有幾套還是免費軟體,品質都很不錯,但很可惜,英文的介面配上較為複雜的設定方式,對於電腦初學者來說還是一看就打退堂鼓,會架 FTP 站的人相對還是少數,雖然其實很簡單,但因為大家都沒接觸過,所以會架站的人總不免有點得意,不會架的還得看人臉色拜託人家教,使用Serv-U等老牌軟體架 FTP 站也成為某些社團必教的課程。
其實,沒有那麼難,也不用花時間研究那些英文軟體怎麼用,我現在提供一個 Step by Step 的教學,按照以下步驟,在幾分鐘內一個不熟電腦的初學者都可以瞬間把個人 FTP 站架好。
快速簡易 FTP 站架設全攻略,Step by Step 示範,一學就會:
首先下載要用來架設 FTP 站的軟體,這裡我推薦我設計的軟體 PCMan's FTP Server (按這裡下載),這是專門針對初學者設計的全中文免費 FTP 架站軟體,特色是讓不熟電腦的人也能夠輕易架設 FTP 站。
具有繁體中文的操作介面,更是沒有許多外國知名軟體不支援中文檔名的問題,硬體需求很低,在硬體等級較差的電腦上一樣可以運作的非常順暢,執行快速,體積輕巧,操作簡單,功能雖比較基本,但操作相當容易。安全性,傳輸速度和功能不是這個軟體的主要訴求,專為初學者一般用途設計,簡單的中文介面及相容中文檔名,並且免費,才是本軟體的主要特色。我的目標,是希望做到即使不懂 FTP 的人也可以立即上手,輕鬆架設個人 FTP 站,和好友分享檔案。 這是zip壓縮檔,下載完畢請用解壓縮軟體解開到你要的位置,然後我們就可以開始架站了,解開後請執行
PCManFTPD2.exe 這個檔案,按照以下步驟操作一次你可以先大略試一下這軟體的操作方式。
接下來應該會看到這個畫面,請從選單依圖示選擇 [設定使用者帳號]。因為你不可能把電腦上的所有檔案毫無限制的放在網路上,公開給所有不認識的人下載,所以必須設定使用者,限定只有你開放的幾個特定使用者才能連進來,此外還有要限制他們只能下載你有開放的內容,其他你不願分享出去的東西他們則是都不能碰。
出現以下設定畫面後,請按下新增群組,為什麼要這樣操作我後面會解說,總之先照著按。我把群組的帳號名稱設定為"friend",你也可以取成任何你自己想要的名稱,請在密碼前面打勾表示要使用密碼,然後設定一個密碼,在這裡為了示範我設定"1234",事實上這是很不安全的密碼,請換成你自己想設的密碼。接著按下[設定檔案存取權限]
我們現在要來決定要開放哪些內容給使用者下載。接下來會看到下面的畫面,在此檔案存取權限要設定的,就是我們要把哪些東西開放出去讓人(friend) 使用。設定要開放的檔案相當簡單,只要在 [Windows 檔案總管] 當中找到你要開放分享的檔案或資料夾,用拖曳的方式丟進來即可。所以請先打開你的檔案總管。假設我要開放給別人抓的是「課業」、「軟體」、「醫學」這三個資料夾裡面的資料,還有dxwebsetup.exe 這個檔案,我就用滑鼠在 [檔案總管] 選取這幾個檔案,然後按住 [左鍵] 把他拖曳進 [檔案存取權限] 設定的對話框,放開即可。
拖曳完成之後就變成這樣,我剛拖進來的檔案都順利被檔案權限設定對話框自動加入了。拖曳檔案是最簡單的設定方法,當然你也可以透過 [加入資料夾]、[加入檔案] 等按鈕來達到相同的目的。在這裡已經出現了類似檔案總管的介面,試試看展開左邊視窗的樹狀目錄,就像檔案總管一樣的瀏覽方式。設定好按下[確定]即可。
確定後回到使用者設定的畫面,剛剛我們已經新增了一個名為"friend"的群組,現在我要說明為什麼要新增群組。
因為你的 FTP 站可能不只一個使用者在用,你可能會同時開給很多不同的人,但如果你想開放給每個人的東西都一樣,既然如此那還為每個人都個別設定一次太麻煩了,群組的用途,就是把一[群]使用者歸在同一[組],讓他們全組共用相同的設定,省去重複設定的麻煩,只要把新增加的使用者都指定為剛剛設定的"friend"群組,就可以直接全部套用群組設定值,不必重複設定 (當然如果你是所有使用者都共用同一帳號的話,直接建立使用者即可,就不需要使用群組了)。請看以下操作:
按下[新增使用者]按鈕,並且將他命名為你想要的名字,這個名字將會用來當作 FTP 連線用的帳號,在這裡我只是示範,設使用者名為 "pcman",然後從右上方選擇群組,讓新增的"pcman"使用者套用剛剛的"friend"群組的設定。現在使用者 "pcman" 已經屬於 "friend" 這個群組。請注意,使用者如果沒有再設定密碼,則會使用群組的密碼,不想套用群組密碼請在使用者的 [密碼] 前面空格打勾,並且輸入使用者自己專屬的密碼,如此
密碼就會是使用者自己的密碼而非群組的密碼。底下的其他設定也是一樣,只要沒有另外再設都是直接套用群組的設定,設定完請按下確定,我們可以開始測試。
用 FTP 連線軟體連線自己的電腦試試,底下示範用免費軟體 FileZilla,你可以改用你慣用的軟體像是 CuteFTP...等。
IP 位址輸入 localhost,這是 Windows 系統預設的位址,代表連線到自己的電腦。使用者名稱是剛剛設定的 "pcman",密碼沒另外幫使用者設,所以是套用 "friend" 群組的密碼 "1234",連接埠沒有另外設定的話預設是21,順利連線成功的話,恭喜你架站成功了! 如果無法連線,那有可能表示你的連接埠 21 有其他軟體在用,發生衝突,請看本篇第 10 步驟,改連接埠號碼。看到右邊列出的檔案嗎?是不是剛才設定的幾個檔案都出現在你的 FTP 底下了?
無法連線或連線後無法列出檔案者請見下方常見問題疑難排解。
再進一步切入「軟體」資料夾當中,是不是讀到了?列出來的正是資料夾裡面的檔案。
以上,一個最簡陋的站就架設完畢了,大家可以試著下載自己站上的檔案看看,一切正常就大功告成。簡易 FTP 站到此架設完畢,可以邀請朋友來下載檔案了。要讓朋友連線進來,必須給他你的 IP 和你設定的 FTP 連接埠 (預設是21),後面進階設定會講怎樣修改連接埠。不知道你電腦的 IP 或別人無法連線進來,你的 IP 就是 PCMan's FTP Server 主視窗上面顯示的那串 xxx.xxx.xxx.xxx 的數字。
FTP 進階設定:
進階選項,請到 [檢視] / [設定 Server],來調整一些進階設定
雖然原本的 FTP 通常連接埠預設使用 21,但為了安全起見,或是避免和系統提供的其他服務衝突,通常我們會改用其他數字,所以到這裡修改,選擇設定 Server 後出現右側畫面,把連接埠改成你要的數字即可,我這邊改成 2100。
這裡大家看到一個陌生的名詞:PASV,這是被動傳輸模式。一般的 FTP 在傳送資料時,採用主動模式,由用戶端主動要求伺服器,應該把資料傳到那個連接埠給它。問題是,這樣一來,使用者可以任意要求伺服器到處連線各連接埠,這會有安全性問題,而且一旦伺服器受防火牆阻擋,就無法連線出去傳送資料。因此在防火牆存在下,應改用被動模式。所謂的被動模式( PASV ),就是使用者連進 FTP 伺服器之後,不主動要求伺服器,而是被動的等伺服器通知它可以連線到哪裡去取得下載的資料。至於 FTP
伺服器會通知使用者可以連線到哪些連接埠呢?依照我們設定的連接埠範圍。我們允許伺服器使用 2048 ~ 2248 的連接埠,來接受使用者的被動連線。設定完連接埠範圍還要注意,這個範圍內的連接埠都不能被防火牆或防毒軟體擋住。
再度使用檔案權限設定,請重新開啟使用者設定的畫面,選擇"pcman"使用者並且按下 [設定檔案權限],我們來幫"pcman"使用者更進一步修改權限設定,隨便點選其中的檔案,有沒有注意到右下方的所有檔案操作選項都不能用了,只剩下 [繼承上層權限] 是打勾的?別忘了,剛剛我們根本沒幫使用者"pcman"做檔案權限設定,他是直接" 繼承上層"群組 "friend" 的設定。使用群組時,只要不更動使用者設定,就會自動套用使用者所屬群組的設定,而當某個使用者所需要的設定和他所屬的群組有點不同的時候,可以取消 [繼承上層權限],並且額外設定使用者自己的權限。
在這裡再示範一下進階操作,資料夾在站上顯示的位置,不一定要是真實存在電腦上的位置,從左邊任意選擇一個資料夾,再按下 [加入資料夾] 的按鈕,就可以把一個原本在其他地方的資料夾,掛到你選取的資料夾下,例如我現在示範一下把「 C 磁碟機」掛在 「軟體」資料夾底下。
我從左邊選擇「軟體」,然後按下 [加入資料夾],選擇 C 磁碟,然後[確定],注意到了嗎? C 磁碟現在被掛在「軟體」資料夾底下,就好像他本來就是放在「軟體」下面的資料夾一樣。此外,不但可以把實際位置不在某資料夾下的檔案或資料夾掛進來,還可以建立虛擬資料夾。虛擬資料夾就是在 FTP 站上可以在你指定的位置顯示出一個資料夾,你甚至可在裡面加入檔案,但是實際上在電腦上沒有這個資料夾的存在。要使用虛擬資料夾請按 [加入虛擬資料夾],輸入資料夾名稱即可。
進階功能:使用 IP 過濾,可以只允許特定位置的電腦連線 (例如只限於校內的同學連線),或是禁止特定使用者連線,示範使用方式如下:
從主選單的 [檢視] / [設定 Server] 進去,可以找到 [IP 過濾] 的分頁如下圖。
假設我現在只想允許和我一樣有住校的同學連線進來,我就可以輸入屬於我們宿舍的 IP 如下圖:
假設住在我們這棟宿舍的同學,IP 都是 140.129.59 開頭的,那 IP 位址的第四個數字用星號代替,140.129.59.* 就表示所有開頭為 140.129.59 的 IP 位址。
輸入 IP 位址後按下新增,如此你的 FTP 站就只允許所有 IP 位址開頭為 140.129.59 的使用者連線,其他地方是連不進來的。
要禁止特定 IP 連線也是一樣的方式設定。
如果沒有特別設定允許連線的 IP 位址,則除被禁止的 IP 以外,所有其他 IP 都可以連線。
不一定要使用星號來設定,星號只是為了一次代表大量同樣網域的 IP 比較方便,事實上也可以直接過濾像是 140.129.59.34 這樣的特定 IP 位址,而不用星號。
以上已經示範完大致上的功能,操作就和 Windows 系統一樣簡單,自己試驗一下幾分鐘之內就可以架好屬於自己的 FTP 站,剩下我沒講的部分都很簡單易懂一看就會用,自己多玩玩看就是了,祝每位看到這篇教學的使用者架站順利。
常見問題疑難排解:
為何按教學設定好之後,從 FTP 軟體無法連上 localhost,或外面的人無法連線進來?
請檢查作業系統及防毒軟體防火牆相關設定,是否擋住了 FTP 站使用的連接埠。或者系統上有其他使用同一連接埠的程式。(例如 Windows XP / 2000 )內建的 FTP 服務。此外可以試著更換連接埠看看能否使用。Windows XP 系統防火牆請到 [控制台] 找到 [網路連線] 相關設定,進入後在你使用的連線上按下[右鍵],選[內容],再找到[進階],即可找到。詳見 Windows 系統的說明文件,或網路上其他教學。防毒軟體設定部分,請參照各軟體使用說明,或網路上的教學,推薦 台灣 FTP 聯盟 https://twftp.org/。此外,請記得檢查該無法連線的使用者是不是不小心被 IP
過濾的功能檔掉了。
為何可以連線,但是連上後無法列出檔案?
因為系統或防毒軟體的防火牆擋住了,使得資料無法傳送。請打開 PASV 模式,設定好沒有被防火牆擋住的 PASV 連接埠範圍,並且請對方改用 PASV 模式連線看看。這種問題通常都是連線雙方的防火牆、或是防毒軟體設定不當造成,非本軟體設計錯誤,請妥善設定系統,勿來信回報錯誤。
動態 IP、虛擬 IP 架站、或其他教學,建議請到 台灣 FTP 聯盟 https://twftp.org/,有豐富參考資料,請勿直接來信軟體作者詢問,因為相關問題我並不清楚。
版權聲明:
本文由陽明大學醫學系洪任諭撰寫 Copyright c 2005
PCMan's FTP Server 為洪任諭 (亦即本文作者) 所製作之軟體 https://pcman.ptt.cc/
本文最上方及 PCMan's FTP Server 軟體內所用圖示為師大美術系林彥慧繪製
CuteFTPR 為 GlobalScapeR 公司的產品及註冊商標
Filezilla 為 https://fillezilla.sourceforge.net/ Filezilla 開放原始碼專案的產品
WindowsR 為 MicrosoftR 公司的產品及註冊商標
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.124.182.23
... <看更多>