九種方式幫助開發人員重建對互聯網的信任
譯文公共密鑰、受信硬件與分組鏈接——開發人員應當利用這些技術工具幫助實現面向每位用戶的互聯網保護目標。
時至今日,互聯網已經成為認識論層面的混沌深淵。根據Peter Steiner在其著名的《紐約客》動畫中所提出的假定——同時也得到了數百萬同行的支持——無論是兇猛的惡犬還是宣稱將捍衛我們財產安全的銀行,都沒辦法真正了解我們的交換數據包是否被人調了包。更糟糕的是,Edward Snowden已經披露稱,美國國安局可能已經將我們的部分或者全部數據包進行了備份,這意味著其它國家以及部分黑客組織完全可以效法國安局干出類似的惡行。
然而,我們仍然在將大量數據傾卸給路由器,并一廂情愿地認為這些小小的傳輸設備能為自己搞定一切——即使不行,麻煩也處于可控范圍之內。黑客們有可能會取得聯邦政府計算機的root權限并竊取到稅收資料的副本,但除非他們愿意幫大家交稅(這顯然不可能),否則這類信息外泄好像也沒什么大不了。而在惡意人士竊取到我們的信用卡信息并在Office Depot上購買iPad時,信用卡公司會負責承擔相應損失。沒錯,我們很容易陷入這樣一種虛假的安全感當中,并為此沾沾自喜。
雖然大多數普通群眾都因為上述理由而對互聯網的混亂不堪與信任缺失狀況視而不見,但這并不代表我們也應當繼續心安理得地聽之任之。這種趨勢除了讓欺詐人士愈發猖狂之外,還會帶來更為驚人的深層社交成本。畢竟我們每個人都需要承受更為可觀的交易費用,因為其中包含著可觀的潛在欺詐損失成本。這種日益嚴重的信任缺失最終將傷害到我們每一個人。
我們當然沒辦法運起神功讓互聯網在一夜之間變得完美無瑕,但我們確實能夠添加更多保障性功能,使得用戶對互聯網的信任逐步提高。有鑒于此,今天的文章將為大家帶來以下九項指導思路,旨在更為可靠地保護數據、隱私以及通信內容安全。修復互聯網安全問題是一項崇高、甚至有些高不可攀的目標,但如果我們每個人都在項目開發工作當中將安全考量納入進去,那么相信互聯網世界終將變成美好的人間。
向主要服務添加公共密鑰
Facebook公司一直在致力于確保自身所服務的用戶皆為使用真實姓名的可信群體。考慮到如此龐大的社交規模與人類的某些天性,我們沒辦法斷言Facebook在這方面已經取得全面成功,但其長期以來堅定推動用戶賬戶實名可信度的作法確實給互聯網帶來了深遠影響與積極意義。
今年以來最令人振奮的消息,可能莫過于Facebook將允許用戶通過Faceoobk系統分發其PGP公共密鑰了。任何打算通過PGP向個人發送郵件的用戶將能夠訪問Facebook并下載到對方的公共密鑰,并以此為起點立即實現安全通信。
出于多種原因,這套方案尚稱不上完美,不過其安全水平至少要比使用保障力度更為低下的公共密鑰庫好得多,而且基本上要比寄希望于隨機網絡頁面提供的正確公共密鑰更為靠譜。在上一次檢查的時候,我發現公共PGP服務器上某些與我姓名相關聯的密鑰并不能為我所使用。相比之下,Facebook公司確實邁出了堅實的一步,其效果比那些運行在隨機服務器上的免費服務好得多。
我們還需要考慮虛假賬戶的存在以及Facebook與用戶間連接的安全性水平。不過,可以肯定的是真人用戶往往會定期更新當前狀態,我們能夠很輕松地利用這一點評估其密鑰是否可信。
那么其它服務是否也會開始分發公共密鑰?它們是否也會著手建立一套更為可信的網絡環境?銀行與信用卡發卡機構可能會率先行動。出納員及分支機構員工已經非常了解監管事務,他們能夠有效提高公共密鑰庫的受信水平。學校與大學對于學生們的操作活動也比較了解,因此能夠作為另一種理想的起步環境。總而言之,任何一種能夠幫助我們更接近PGP締造者Phil Zimmerman長久以來所構想的理想網絡信任效果的努力都值得我們稱道并加以推動。
構建更出色的隨機數生成器
如果攻擊者能夠猜出我們的密鑰,那么目前市面上現有的任何加密機制都將失去作用。解決這一問題的傳統辦法之一在于使用由隨機數生成器所挑選的隨機密鑰。不過新的問題又來了:這種隨機數生成器是否值得信任?
這絕不僅僅是種理論層面的可能性。2007年,來自微軟公司的兩位研究人員就在Dual_EC_DRBG(即雙橢圓曲線確定性隨機數位生成器)當中出現了潛在的后門,隨后技術行業很快將其打入了冷宮。最后,在經過數年的論證之后,國家標準與技術協會于2014年決定徹底中止對該算法的支持。
然而,即使是最出色的研究人員也很難找出那些潛在的后門,因此將希望單純寄托在他們身上將令用戶身陷危險。那么我們該如何確保自己所使用的隨機數生成器安全可靠?舉例來說,大家可以利用加密安全散列功能提高復雜性水平,從而進一步提高生成器所生成數值的隨機性。
任何加擾機制都會加入額外的數字內容,從而提高攻擊者獲取控制權的難度——舉例來說,他們可能需要投入更多時間或者來自網絡的全局可下載值,例如比特幣分組鏈接之上的當前散列值。這將有效防止攻擊者們對隨機數生成器的輸入內容加以控制。
隨著越來越多算法開始將加密機制納入自身,我們需要比以往更為豐富的備選隨機密鑰。要擁有一套穩定且不易被猜到的隨機密碼生成機制,我們在技術基礎的構建方面還有很長的道路需要探索。
擴展受信硬件
考慮到軟件層以及現代計算機設備的復雜性,我們在默認情況下應當將它們首先視為不安全狀態。臺式設備乃至智能手機當中可能包含有大量潛在后門,就連打印機產品也未必像大家想象的那樣處于全面受控狀態之下。
技術研究業界長期以來都在嘗試創造出一種有針對性的小型計算機設備。其中一部分專門負責計算特定登錄操作,另一部分則計算數字簽名。用戶的個人密鑰可以被鎖定在單一芯片當中,這樣惡意人士將很難提取到其中的機密數據。盡管我們可能永遠無法保證信息百分之百處于安全狀態之下,但這類設備確實能夠構建起相對理想的防御體系,從而限制惡意人士的攻擊能力。舉例來說,它能夠利用機械開關來防止機密數據為他人所訪問。另外,每次開關處于啟用狀態時,它也可以確保賦值操作只生效一次。
如果每個人都能使用這樣一款小型受信設備,那么每個人都將能夠創建數字化簽名,從而將網絡信任水平推上新的高度。雖然設備丟失及安全漏洞仍可能構成威脅,但這些小部件的出現無疑將令互聯網變得更加靠譜、也更令人放心。
將Merkle樹引入文件系統
眾所周知,數字文件的內容能夠輕松進行修改。相較于將修改過程詳細表現出來的紙質記錄,數字文件顯然能夠根據需要以任意內容示人。而更糟糕的是,大部分文件系統并不太關注內容修改時的操作記錄。水平較高的黑客不僅能夠修改文件本身,同時也能夠對記錄進行回溯,從而令人完全看不出其篡改痕跡。
檢測內容變更的最簡單辦法就是使用加密安全散列功能,該值的作用類似于對文件進行校驗且很難被攻擊者所偽造。數據當中的任何變更都會反映到該散列值當中,而且我們幾乎不可能在不影響散列值變化的前提下對文件內容加以修改。
當文件內容隨時間推移發生變化時,散列值序列本身可以通過Merkle樹進行散列化處理。這能夠確保我們了解文件的變化歷史,包括其具體修改時間。像這類經過良好計算的散列值已經成為Git協議當中的固有組成部分。只要更多地將此類處理思路納入到總體文件系統當中,我們就能更為準確地把握文件動態。雖然這些系統只能檢測到是否存在內容變更,但卻無法隨時加以修復,不過仍然要比以往那種一無所知的狀態好得多。
#p#
構建更多分組鏈接并將其拓展到其它領域
比特幣生態系統包含有眾多政治與社會因素,這讓人們往往忽視了其中分組鏈接機制的存在。人們樂于討論比特幣的出現是否會顛覆中央銀行體系,或者是否會衍生出一個法律無法觸及的匿名犯罪世界。但無論這些問題的正確答案是什么,其重要的核心實質并非體現在投機活動之上,而是分組鏈接能夠增加互聯網的穩定性與可信度。
從核心實質角度看,比特幣是一種集中式分戶總賬,它所采用的交易記錄方式很難——甚至在某種程度上不可能被修改。分戶總賬當中的條目通常會記錄下誰將比特幣轉移給了誰,而我們完全有理由將這種方式用于修復存在于虛擬實例當中的其它數據。如果某位學生對一份論文作出了輪流補充,那么他或她也可以在分組鏈接當中為該文件記錄一條散列值。如果這篇論文由于垃圾郵件過濾器或者其它技術故障而發生丟失,那么學生還是可以證明該論文已經在特定時間曾被提交完成。
我們還可以利用此類方式記錄各種散列值來提高互聯網受信程度,以應對人們對于特定時間段內對于操作歷史的驗證需求,目前也已經有眾多比特幣初創企業在利用這種方式探索商業化可能性。盡管比特幣挖掘領域仍然存在諸多問題,運行分組鏈接的成本也仍然比較高昂,但這項技術本身確實非常可靠、而且足以在貨幣交易之外發揮巨大的安全保護作用。
將鏈接機制引入互聯網交互
作為互聯網中最為基礎的組成部分之一,基本HTTP調用僅僅屬于bit的集合。而HTTPS則在其中添加了安全層,能夠排除監聽者的存在并對修改內容作出標注,但它同時也會提高所有交互的執行成本。
一種較為簡單的解決方案就是為所有交互操作計算Merkle樹。雖然并不是所有HTTP流量都能夠整理成易于進行散列處理的簡單命令列表,但相當一部分仍然適用于這種方法。對于來自某些頁面的AJAX調用,我們也可以對其架構進行細微調整來實現簡化。
建立交叉鏈接認證網站
基礎Git庫的作用并不僅僅是提供文件存儲空間。其協議能夠在保存文件之外將其發送至其它庫當中,同時在提交過程中通過計算全部文件的SHA-1散列監控其內容修改情況。
不過為什么要止步于單一存儲庫?為什么不將數字簽名或者散列值與其它庫進行交換,從而借此提升網絡受信水平?
Inter Planetary文件系統就是這樣一種實驗性方案,其嘗試將Web轉化為一套龐大而且相互連接的文件系統。我們需要探索更多方式將來自不同網站的信息進行對接。策劃者可以將這些資源加以整合,從而立足多個站點構建起整套受信網絡體系。
添加同態加密機制
服務器能夠以多種方式存儲信息,從而保證其既得到加密又仍然擁有可用性。換句話來說,服務器能夠在不影響用戶隱私的前提下對數據進行持續存儲。感興趣的朋友可以點擊此處查閱《半透明數據庫》一書了解更多詳盡細節(英文原文)。
在過去幾年當中,以加密形式處理數據這一難題已經在理論層面上取得了一系列激動人心的成果。各類數據庫能夠對規模龐大的個人信息集合進行分類及搜索,而無需保留未經加密的版本。它們能夠在無需獲取底層信息的前提下執行計算任務。
對我們無法實際查看或者讀取的數據進行計算,這聽起來有點怪力亂神的意思,不過我們已經擁有多種理想的實踐解決方案達成這一目標。其中最出色的可能要數Unix密碼文件,它能夠保存一條經過加密的密碼安全散列值,而非密碼內容本身。當用戶進行登錄時,該系統可以對輸入字符串進行散列處理,并將其與數據庫內的值進行比對。不過任何一位獲得密碼文件訪問權限的用戶都無法真正查看到實際密碼內容,因為該文件當中存儲的僅僅是其散列化版本。
這種新型解決方案極具發展潛力,但卻遠遠未能融入實際應用層面。某些方案需要耗費數年時間才能解決非常簡單的計算難題,但它們在速度方面正逐步向可行性方向邁進。雖然尚需要加以進一步研究,但這類承諾幫助企業簡化數據庫情報處理任務、同時又能避免個人隱私泄露的技術成果確實相當令人興奮。
添加加密機制
單純采取規模最大且最簡單的解決方案似乎非常愚蠢,但事實上,將更多加密機制引入其中確實能夠讓惡意人士的監聽活動變得更加困難。目前已經有谷歌、Facebook以及蘋果等一系列知名網站開始在默認情況下開啟SSL加密,而其它站點也應當加入這一行列。將SSL納入全部網絡流量雖然會帶來額外負載壓力,但也會提供更理想的可管理性空間。
我們也可以通過其它多種標準實現加密機制的添加。IPSec與TLS都能夠為游走于客戶端及服務器之間的數據包提供良好的加密效果。不過這些算法仍然默認信任服務器,這種解決思路對于某些服務確實可行,但在服務器僅僅充當中介機制的情況下則不太理想。
將端到端加密工具同電子郵件及聊天產品相整合已經成為強化通訊活動基礎安全水平的必要方式。雖然攻擊者能夠從服務器以及操作系統層面破解這種保護手段,但其仍然是幫助人們建立互聯網安全及可控信任度的最簡單辦法。
原文標題:9 ways developers can rebuild trust on the Internet