安全模型 1.0
非目標本身就是規格的一部分。
只列出自己保護了什麼的安全模型,是廣告。這一份用同等的份量列出它拒絕主張的東西。
受保護的性質
- 憑證負載完整性。
- 相對於內含公鑰的簽署者真確性。
- 來源檔案的精確同一性。
- 正規化紀錄完整性。
- 證據與安全決策完整性。
- 重播可偵測性。
明確的非目標
以下每一項都不在主張範圍內,也不該從「簽章有效」推論出來。
- 證明簽署者在現實世界中的身分。
- 證明完整的 Excel 相容性。
- 證明商業意圖或會計上的正確性。
- 執行 VBA、Power Query、外部連結、動態陣列、
LET或LAMBDA。 - 以引擎意見不一致為由授權公式變更。
- 在操作者自己把私鑰放在不安全的地方時保住那把私鑰。
測過的威脅情境
這些是實際跑過的,不是推理出來的。
- 簽署後才修改負載。
- 拿憑證去重播另一份不同的 XLSX。
- 過期的 OOXML 快取值。
- 公式漂移,且下游快取已經過期。
- 錯誤的 MMR 運算子語意。
- 外部引擎的 1904 日期系統不匹配。
- 把語法正規化偽裝成原生支援。
最後一項是針對這個基準測試自己的威脅:一個默默把 Table[Column] 改寫成 A1 範圍的橋接器,會被讀成「外部引擎支援結構化參照」。協定把每一次轉換都記下來,就是為了讓這種讀法不成立。
私鑰
範例憑證是用一把臨時的釋出金鑰簽的,而且只釋出公鑰那一半。使用者要透過憑證 CLI 產生自己的金鑰對。
永不
如果操作者把私鑰放在不安全的地方,憑證救不了它。
一個簽章建立了什麼
這份負載確實由持有這把金鑰的人簽署,而且從那之後沒有變過。
並未建立
那個持有者是誰。把金鑰綁到現實世界身分,不在這個模型的範圍內。