Mímisbrunnr知恵の泉

← サイバーセキュリティ 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 前提:リスク評価と多層防御

要点(BLUF)

概念:原則は時代を超える物差し

製品やクラウドの機能は数年で変わりますが、良い守りの考え方は半世紀近く変わっていません。Saltzer と Schroeder(1975)が示した古典的原則は今も生きています。原則を持っていれば、未知の技術に出会っても「この設計は原則に反していないか」と判断できます。

仕組み:押さえるべき主要原則

原則意味守る側の効果
最小権限(Least Privilege)必要最小限の権限だけ与える侵害時の被害範囲を限定
フェイルセーフ(Fail-safe defaults)既定は「拒否」、許可は明示故障・例外時に安全側へ倒れる
攻撃面の最小化(Economy/Minimize)機能・入口・コードを減らす守る範囲そのものを縮小
多重防御(Defense in depth)層を重ねる一枚破られても全滅しない
権限分離(Separation of privilege)重要操作に複数の条件単一の鍵で全部開かない
最小共通機構(Least common mechanism)共有資源を減らす1か所の侵害の波及を抑える
オープン設計(Open design)安全性は秘密の構造に依存しない「隠して守る」に頼らない
心理的受容性(Psychological acceptability)使いやすく作る回避・抜け道を生まない

これらは互いに補強し合います。たとえば最小権限と権限分離はセットで効き、フェイルセーフと既定拒否は同じ思想です。

図解:フェイルセーフ(既定は拒否)

flowchart TD
    REQ["アクセス要求"] --> CHK{"明示的に許可されているか"}
    CHK -->|"はい(許可リストに合致)"| ALLOW["許可する"]
    CHK -->|"いいえ・判定不能・エラー"| DENY["拒否する(安全側に倒す)"]

ポイントは、判定できないとき・エラーのときも「拒否」に倒すこと。許可を既定にすると、想定外の状態がそのまま穴になります。

防御側の使い方:設計の岐路で原則を当てる

なぜ安全か:被害の上限を設計で固定できる

最小権限とフェイルセーフが効くのは、最悪のときの被害上限を先に決めるからです。あるアカウントが乗っ取られても、そのアカウントに最小の権限しか無ければ被害はそこで頭打ち。例外時に拒否へ倒れる設計なら、想定外の入力でも「開いてしまう」ことがない。つまり原則は「うまくいくとき」ではなく「壊れたときにどこまでで止まるか」を保証します。

仕組みの直観

原則はホテルのマスターキー設計に似ています。清掃員の鍵は担当階の客室だけ(最小権限)、停電時に金庫は施錠側で固まる(フェイルセーフ)、金庫を開けるには鍵と暗証番号の両方(権限分離)。マスターキー1本で全部開く設計は楽ですが、1本失うだけで全館が危険になります。

⚠️ よくある誤解・設定ミス

対応 lab

概念回のため専用 lab はありません。「安全性を鍵の秘匿に寄せる」オープン設計の実例は、第2章のデジタル署名デモ security-study/labs/digital_signature_demo.py(アルゴリズムは公開、秘密鍵だけが秘密)で確認できます。

関連