Skip to content

{ Category Archives } Free

Socrates: A Privacy Plugin for Centralized IM Applications

https://io-lab.net/archives_text/socrates.txt

平整三角形:安全,分散,可讀的人名

當使用電腦時,我們喜歡用名字來指代事物。例如,這個網站被稱為“www.aaronsw.com”。你可以在瀏覽器中輸入並閱讀這些文字。我們可能需要從這些名稱中選擇三個大屬性: 安全:當你在你輸入的名字,實際上得到我的網站,而不是冒名頂替者的網站 分散:沒有中央當局控制所有的名字 人類可讀的:這個名字是你實際上可以記住的東西,而不是一串長長的隨機性字符串 在一篇經典的論文中,我的朋友 Zooko 爭辯說,在任何時候最多可以獲得這些屬性中的兩個。 最近,DNS 傳奇人物丹·卡明斯基(Dan Kaminsky)用這個說法認為,由於電子現金幾乎與命名一樣,Zooko 的三角形也適用於它。他用這個說法認為 BitCoin 電子現金系統同时具备安全,分散,并且具有可读意義是不可能的。我有 BitCoin 的問題,但這顯然不是不可能的,所以我只是假設 Kaminsky 在某個地方出了問題。 但今晚我意識到你確實可以使用 BitCoin 來平整 Zooko 的三角形。以下是它的工作原理: 讓一個叫做滾動的文檔。滾動由一系列行組成,每行由一個元組(名稱,密鑰,隨機數)組成,這樣從一行的開始到結尾的滾動散列的前 N 位都是零。因此,要為滾動添加一行,需要做足夠的計算來發現導致哈希位為零的適當的隨機數。 要查找名稱,向每個人您所知道的具有滾動的人詢問信息,並相信最長的滾動條,然後從頭開始,以您正在查找的名稱的第一行作為關鍵字。要發布名稱,您會找到適當的隨機數,然後將新行發送給您認識的所有人。 好的,讓我們暫停一下。你如何在這樣的系統中竊取名字?首先,你需要計算一個新的隨機數,用於你想要盜取的行和每一個後續行(Gimcuan Hui 註:之所以也要計算後續行,因為 BitCoin 裏面的每次交易都被鏈接(Chain)在一起,改變一個工作記錄,後面的記錄如果沒有跟著修改就會對不上)。其次,您需要將替換捲軸交給用戶。第一點是困難的,但也許並非不可能,取決於你想要偷的名字有多少行。它需要網絡的其餘部分的 CPU 功率的大部分倍數。這對我來說似乎是一個相當強的約束,但對於 Dan 來說顯然不是。幸運的是,我們被第二個問題拯救了下來。 讓一組機器稱為網絡。每個人都記得它最後一次被信任的捲軸。當創建一條新的有效行時,它會被發送給網絡中的每個人,並將其添加到他們的捲軸中。現在,不可能竊取舊名稱,因為網絡中的機器只添加新名稱,不接受舊名稱的替換。 對於已經在網絡中的機器來說沒問題,但你如何加入?那麼,作為一個物理定律,加入一個網絡需要至少有一台機器已經在網絡中。現在,當你加入時,那台機器可以給你一個虛構的捲軸,他們偷走了所有的名字。我不認為有什麼辦法可以避免這種情況 – 如果你不認識任何一個願意告訴你正確的答案的人,你不能在空氣中找到正確的答案。即使是一個中心化的系統也至少依賴於一個誠實的根。 您可以在連接時了解多個節點並詢問每個節點的滾動情況,從而改善此問題。似乎理論上最好的情況是只要求一個節點是誠實的。這相當於信任哪個節點具有最長的滾動。但是這會讓你容易受到以下攻擊者的攻擊:a)具有足夠的 CPU 能力來製作最長的捲軸,並且 b)可以至少選擇一個初始節點。另一種方法是只信任從大多數節點列表中收到的捲軸。這使您容易受到可以控制大部分初始節點的攻擊者的影響。您大概選擇哪種折衷取決於您相信您的初始節點的多少。 發布虛假滾動等同於分割命名空間並啟動單獨的網絡。(我們可以通過要求節點簽署每個最新的捲軸並發布它們的簽名來認證網絡的成員身份來強制執行此操作,任何試圖簽署兩個相互矛盾的捲軸的節點顯然都是雙重的並且可以打折扣)。另一種描述場景(b)的方式是,為瞭加入一個網絡,你需要一個節點列表,其中至少大多數實際上是網絡中的節點。這似乎不是一個過分艱苦的要求。 而且我們實際上比這更安全一些,因為大多數人需要相當數量的 CPU 才能保持合理。 如果我們假設您從一些帶外源聽到新名稱,讓他們在攻擊者的網絡上工作,攻擊者必須有足夠的 CPU 為您可能使用的每個名稱生成行。 否則,您會意識到,您在計算機上輸入的名稱在他人的計算機上工作時會返回 404,並且開始意識到您已遭到攻擊者的攻擊。 所以你有瞭這樣一個繫統。 名字是安全的:他們可以通過任意長度的鑰匙識別,不能被盜。 它們具有可讀意義:名稱可以是任何你喜歡的字符串。 […]

如何写一个IM

导言 本文将介绍如何在 TOX 内核上编写一个可以进行文本交流的 IM (Instant Messaging) 软体。 TOX TOX 是什么?它是一个分布式的 p2p 网络协议。准确来说,它提供了这样的一个网络协议的各种接口,包含安全加密、DHT 网络、洋葱路由等核心部件的实现,以及朋友请求与连接对话、群聊等模块的实现,它还包含了音视频库以供用户实现音视频交流的功能。我们要做的是调用它封装好的这些接口,来实现自己的 IM 软体。整个 TOX 采用 C 语言实现。从我这周的使用测试情况来看,TOX 内核极其稳定。这样一个优秀的去中心化内核软体,值得所有在这方面感兴趣的应用开发者在其基础上开发一个自由的 IM 软体。本文也会在最后一节列出基于此开发出来的 IM 软体。 Tox Core 首先获取 tox 核心代码: git clone https://github.com/TokTok/c-toxcore 按照 c-toxcore 里面的指导编译,安装 c-toxcore,例如: cd c-toxcore git checkout v0.2.2 cmake . make sudo checkinstall 如果你使用的是 Debian 系统,并且采用了 checkinstall 的安装方式,那么在执行 sudo checkinstall 命令时需要在安装提示的时候设置好软件的版本,比如我们这里的 0.2.2 版本。 […]