第三版的世界已經不一樣了#

《安全工程》第一版出版於 2001 年,第二版於 2008 年。到了 2020 年第三版寫成時,這個領域已經被幾件大事重塑。

  • 史諾登事件(2013):超過五萬份關於美國國家安全局(NSA)訊號情報活動的最高機密文件外洩。政府監控的規模與侵入程度,連憤世嫉俗的安全工程師都感到意外。
  • 國家級網路武器登場:先有美國以惡意程式攻擊伊朗核武計畫的 Stuxnet,後有俄羅斯針對烏克蘭部署、卻對他國企業造成數億美元附帶損害的 NotPetya。
  • 對國家級威脅的理解大幅提升:我們不只掌握西方情報機構的能力與優先順序,對中國、俄羅斯甚至敘利亞在做什麼,也有了相當清楚的圖像。
  • 網路犯罪生態系成形:惡意程式作者提供工具,讓數百萬台機器被控制——有些成為犯罪基礎設施,有些被用來詐騙其使用者。加密貨幣不只讓勒索軟體更好寫,也在侵蝕金融監理。
  • 非金錢性的線上傷害浮上檯面:從網路霸凌、仇恨言論,到選舉操弄與強暴、謀殺影片。

最出人意料的變化之一:多層次安全(multilevel security)產業已經奄奄一息。儘管美國政府投入四十年、數十億美元,五角大廈那套「用架構強制阻止資訊由最高機密往下流到機密、密件、非密」的資安哲學,已被認定不可行而放棄。

架構仍然重要,但重心已轉向生態系。既然臭蟲無所不在、漏洞遲早被利用,我們最好擅長偵測利用、修補臭蟲、從攻擊中復原。遊戲規則不再是可信系統(trusted systems),而是協同揭露(coordinated disclosure)、DevSecOps 與韌性(resilience)。

一個正在逼近的難題:耐久財要怎麼修補#

當我們把軟體放進汽車、醫療器材這些攸關性命的系統,並把它們接上網路,安全(safety)與資安(security)工程正在合流。這造成真實的張力:資安工程師習慣快速修補臭蟲,安全工程師卻習慣依據緩慢變動的標準做嚴謹測試。

而最棘手的問題是修補週期:

  • 手機大概三年、筆電大概五年就沒有安全更新,廠商預期你去買新的。
  • 但汽車平均壽命十五年。若要求五年就報廢,環境成本無法接受。

如果你今天(2020 年)正在為一台 2023 年上市的車寫導航軟體,你要如何確保自己在 2033、2043、2053 年還能持續發送安全更新?你今天選的工具,決定了這件事做不做得到。

政治環境的質變#

過去數十年,政治領袖把科技政策視為「宅男的事」,通常採取阻力最小的路線。俄羅斯干預英國脫歐公投與川普當選的報導改變了這件事——丟掉飯碗的可能性能極大地集中注意力

立法者的關注正在改變遊戲規則:先是像歐盟《一般資料保護規則》(GDPR)這類更嚴格的通則;其次是原本就受安全法規管制的產品(汽車、鐵路號誌、兒童玩具)取得軟體與連網能力後,歐洲開始規範軟體必須維護多久。

安全工程師今天要問的問題,和十年前完全一樣:我們想防止什麼?提議的機制真的有效嗎?

改變的不是問題,而是畫布——如今幾乎整個人類生活都在上面。

為什麼這本書可以公開出版#

書中的技巧只用來幫你建造更好的系統,不是拿來入侵。因此凡是可能之處,作者都把案例寫到足以說明底層原理、卻不構成「駭客食譜」的細節層次。

政府曾力圖限制密碼學知識的傳播,至今仍可能有人認為這些內容不該公開。這個疑慮在四百年前就被回答過。

延伸:三次「該不該公開」的辯論

1641 年,John Wilkins(克倫威爾的密碼學家兼女婿)寫下第一本以英文討論密碼學的著作,一部關於光學與聲學電報的專著。他把科學審查追溯到禁止使用字母書寫的埃及祭司——理由是那會讓平民識字、從而滋長異議。他說:

「不能因為某物可能被濫用,就必須把一切都壓制掉……如果所有可能被濫用的有用發明都該被隱藏,那就沒有任何一門技藝或科學可以合法從事了。」

1853 年,有善意人士想禁掉關於鎖匠技術的書。當時一位作者回應:

「許多善意的人以為,討論如何破解鎖具的安全性,等於是在鼓勵不誠實,因為那教了別人怎麼做壞事。這是謬論。惡棍在他們的行當裡非常精明,關於各種行竊手法,他們已經知道的遠比我們能教的更多……即使有害,好處也會遠遠超過它。」

1883 年,Auguste Kerckhoffs 在第一本論密碼工程的書中說明:你必須永遠假設對手知道系統,因此安全性必須寄託於金鑰的選擇

長期經驗印證了 Kerckhoffs 的智慧。研究者也用可靠度分析與資安經濟學的工具,比較過「開放」與「封閉」安全系統的相對利弊(本書會討論其發現)。簡言之:這類書確實會讓一些壞人受益,但他們多半早就知道了——好人得到的益處大得多

這本書在做什麼(第一版序)#

長久以來,人們用鎖、圍籬、簽名、封印、帳本與計量表來界定並保護自己的財產與隱私,背後還有從國際條約、國內法到禮俗慣例的社會建制在支撐。

這一切正在快速改變,而且新的安全技術「遠遠沒有它該有的那麼好」:新系統經常迅速被攻破,同樣的基本錯誤在一個又一個應用中重複出現。一個安全設計往往要試四、五次才會對——這實在太多次了。

更糟的是,功能之間會互相作用:

一支手機若在按鍵誤觸時會重撥上一個號碼,本來只是小麻煩——直到有人發明了「每次它的電話號碼被撥打就吐出一罐飲料」的販賣機。當你突然在電話帳單上看到 50 罐可樂,該由誰負責:電信公司、手機製造商,還是販賣機業者?

還有許多系統不是失敗,而是做得不夠好

  • 醫療紀錄系統既不讓醫師依需要分享病歷,也擋不住好奇的私家偵探。
  • 造價數十億的軍用系統阻止沒有「最高機密」權限的人接觸情報資料,設計出來卻常常是幾乎人人都需要這個權限才能工作。
  • 票務系統為防旅客作弊而設計,但當反托拉斯機關拆分鐵路公司後,卻擋不住新的鐵路公司彼此作弊。

這些失敗中有許多是可以預見的——只要設計者對「別處已經試過什麼、又如何失敗」多懂一點點。這正是本書存在的理由。

推薦序:為撒旦的電腦寫程式(Bruce Schneier)#

安德森(Ross Anderson)與 Roger Needham 合寫的一篇論文中,創造了「為撒旦的電腦寫程式(programming Satan’s computer)」這個說法,用來描述資安工程師面對的處境。

三種難度層層遞升:

  • 寫一支程式很直接:不斷敲打問題,直到電腦做它該做的事。
  • 寫一支可靠的程式難得多:程式必須在隨機錯誤下仍能運作——這是「墨菲的電腦」。
  • 寫一支安全的程式完全是另一回事:不是在隨機故障下運作,而是要面對一個聰明且惡意的對手,他正努力讓事情在最糟的時間、以最糟的方式失敗,一次又一次。

安全工程需要不同的思考方式。你要弄清楚的不是「某個東西如何運作」,而是「某個東西可以怎麼被弄到不能運作」。你必須想像系統裡住著一個聰明惡意的對手,不斷嘗試新的顛覆手法;你必須把每一件事倒過來、翻過來、斜著看。

借用科幻編輯 John W. Campbell 的話:「外星人的思考能力不輸人類,但不像人類那樣思考。」電腦安全非常像這回事。

本書結構#

  • 第一部涵蓋基本概念——密碼學、存取控制、分散式系統議題,不預設特定技術背景,只需基本電腦素養。對應劍橋大學二年級的「資安導論」課程。
  • 第二部深入若干重要應用(軍事通訊、醫療紀錄、提款機、行動電話、付費電視),藉此引入更進階的技術與概念,並從公司、消費者、罪犯、警察、間諜等不同利害關係人的視角看資訊安全。
  • 第三部處理組織與政策議題:電腦安全如何與法律、證據、公司政治互動;如何取得「系統將如其所應」的信心;以及整個安全工程業務該如何管理。

作者相信:建造在惡意面前仍能穩健運作的系統,是二十一世紀工程師面對的最重要、最有趣,也最困難的任務之一。