在數位時代,個人和企業面臨著越來越多的資料洩漏風險。資訊流在資訊理論的背景下是指某一變量 x
到另一變量 y
的資料傳遞過程。沒有任何一個系統希望洩露機密資料,這不僅涉及到個人的隱私,也可能導致企業重大損失。
許多方法可以限制資訊的披露,例如存取控制清單、防火牆和加密技術。然而,這些方法雖然在一定程度上限制了資訊的釋放,但並無法保證資訊的傳播不被洩漏。
隨著科技的進步,保障數據安全的方法也發生了很大的變化。例如,存取控制清單能防止未經授權的文件存取,但不能控制數據使用後的行為。同樣,加密技術雖然能在不安全的通道中私密地傳遞資訊,但一旦解密,資料的保密性便會受到威脅。因此,了解資訊流的控制變得尤為重要。
資訊流可大致分為兩類:顯式流和旁路流。顯式流是指某個秘密資料明確地洩漏到可被公眾觀察的變量中,例如:
var l, h; l := h;
另一方面,旁路流則利用某些特徵如執行的時間或功耗來洩漏資訊。例如,在某個條件中,如果 h
為真,則會執行某些耗時的工作,進而使得攻擊者可以根據程序所耗時間來推測 h
的值。
隱性資訊流也屬於旁路流的一部分。當程式的控制流基於私密資料時,公眾變量能暗示某些秘密資訊。
不干擾是一種政策,強調攻擊者不應該能夠根據輸出的結果來區分兩個計算過程,前提是它們僅在秘密輸入上有所不同。儘管如此,這一政策過於嚴格,難以應用於實際程序。
例如,一個密碼檢查程序在必要時需要透露一些秘密資訊:即輸入的密碼是否正確。這使得攻擊者即使在程序拒絕密碼時也能獲得有用的資訊,如所輸入的嘗試密碼不是有效的。
資訊流控制機制旨在強制執行資訊流政策。為了實現這一目標,已有數種方法被提出,以實施資訊流策略。運行時機制能在操作系統和編程語言層面對數據進行標籤標記,而靜態程序分析則確保程序中的資訊流遵循相應的政策。
然而,動態分析技術無法觀察所有執行路徑,因此不能既保證穩健又具精確性。為了保證不干擾政策的實施,這些技術經常需要終止潛在洩漏敏感資訊的執行,或者忽略可能洩漏資訊的更新。
安全類型系統為編程語言增添了一個重要的元素,使每個表達式除了擁有類型(例如布林或整數),還攜帶安全標籤。這樣做的好處在於,通過類型檢查,若程式通過檢查,則可確保流政策得到遵循,從而避免不當的資訊流動。
例如,若一個變量被標記為高安全類型,則該變量不應改變低安全類型的變量,從而保護機密資料不被洩漏。
在現實應用中,不干擾政策的嚴格性使其無法完全適用。因此,許多許可釋放資訊的方案被提出以實現控制釋放的目的。這些方案又稱為資訊去分類化。強健的去分類化必須確保主動攻擊者無法通過操縱系統來獲取超過被動攻擊者所知的秘密。
資訊流控制在現代程式設計與數據保護中愈顯重要。然而,如何在實際應用中有效保障資料安全,仍然是一個亟待解決的挑戰。你準備好如何去應對這些潛在威脅了嗎?