先看資產與失敗的後果
同一份研究資料可能需要限制讀取、避免錯誤修改,並讓授權研究者在需要時取得。先寫出資料、使用者與任務,再問「如果它被看見、改壞或拿不到,會造成什麼影響?」
機密性(Confidentiality)關心未授權揭露;完整性(Integrity)關心不當修改或破壞;可用性(Availability)關心授權者能否在需要時可靠使用。一次事件可能同時影響多個面向。
控制要對應威脅與可觀察結果
存取控制可以限制誰能讀寫;版本管理與可驗證備份能支援追查及復原;冗餘與復原演練能支援可用性。控制是否有效,需要觀察它在宣告情境下的結果,而不只是確認產品已安裝。
防護可能互相牽制。把系統完全關機可以阻止當下的網路存取,卻也可能使合法工作停止。選擇控制時要保留業務目的、影響與可接受的復原時間,而不是只追求一個指標。
雜湊相同,不等於來源可信
SHA-256 把輸入位元組映射為固定長度摘要。比較可信的預期摘要與收到的檔案,可檢查內容是否符合預期。只比對兩份自己產生的摘要,能看出範例資料的變化,卻不能證明發送者身分。
如果檔案與摘要都來自同一個已遭竄改的位置,攻擊者可能同時換掉兩者。因此完整性檢查還要問:參考值如何被信任?密碼學章節會再區分加密、雜湊與數位簽章。
延伸閱讀:Python: hashlib
例子:論文資料表少了一個零
一份公開的合成資料原本記為 100,更新後變成 10。讀者仍能下載,且沒有私人資料。
核心問題是未經預期的內容變動,因此主要影響完整性。是否屬於惡意或手誤仍需修改紀錄;能下載只支持此時可取得,不能證明內容正確。
判斷:先比對可信版本、追查變更並修正;不要把這個例子直接標成資料外洩。
離線練習:比較兩份合成資料的 SHA-256
只需本機 Python 3。程式使用寫在程式內的 bytes,不讀寫個人檔案,也不建立網路連線。
- 下載 integrity_demo.py,先閱讀程式中兩個合成字串,預測相同與不同的比對結果。
- 執行 python3 integrity_demo.py,觀察 equal 與 changed 兩個布林值。
- 寫下一句「輸出支持什麼」及一句「輸出沒有證明什麼」。
from hashlib import sha256
a = b'sample=100'
b = b'sample=10'
print('equal=' + str(sha256(a).digest() == sha256(a).digest()))
print('changed=' + str(sha256(a).digest() != sha256(b).digest()))預期結果
equal=True、changed=True。相同 bytes 的摘要一致;本例改一個字元後摘要不同。
自行檢核
能否說明為何這個結果不代表資料已加密,也不代表發送者已通過身分驗證?
結束與清理
程式沒有建立檔案。保留你的解釋即可;下載的示範程式可自行保留或刪除。