ソフトウェアの検証 • 成熟した方法論・ツール • しかし、非常に高いコスト • 人間的要因 > アルゴリズム・設計・実装 • 開発方法論に部分的に埋め込むのが現実的 – Lightweight verification • 厳格な形式的検証は、コストが見合う分野 に! – Safety critical software Safety Critical Software • 組み込みシステム – 自動車・航空機・衛星 – 医療機器 • 制御システム – プラント制御 – 鉄道制御 実時間システム ハイブリッド・システム Fault-tolerant, dependable e.g., 電子商取引 • セキュリティ – 認証プロトコル – サーバ・クライアント – スマートカード リアクティブ・システム トランザクション Secure 検証の階層 • • • • • • 仕様 アルゴリズム 設計 実装(ソースコード・レベル) 実装(バイトコード・レベル) 実装(機械語レベル) 方法論・ツール • 証明支援系 – 高階論理・高階型理論+帰納的定義 – 半自動証明+対話的証明 – 証明手続き=タクティク • 状態探索系・モデル検査系 – 状態遷移系 – 時相論理(離散・連続・確率) – 全自動証明 – 静的検査を包含している。 • dataflow analysis as model checking • 融合 例:Petersonのアルゴリズム me = 0, 1 you = 1, 0 for (;;) { flags[me] = true; turn = you; while (flags[you] == true) { if (turn != you) break; } // the critical section flags[me] = false; // the idle part } Petersonのアルゴリズム 0: flags[me] = true; 1: turn = you; 2: if (flags[you] != true) goto 4; 3: if (turn != you) goto 4; else goto 2; 4: critical section; 5: flags[me] = false; 6: either goto 6 or goto 0; • 状態:(pc0, pc1, flags[0], flags[1], turn) – pc0, pc1: 0..6 – flags[0], flags[1]: {true, false} – turn: {0, 1} Petersonのアルゴリズムの正当性 • 安全性 二つのプロセスが同時にはcritical sectionに入らない。 pc0=pc1=4にはならない。 • 活性(飢餓が起きないこと) プロセスがヘッダ部に入ったら、 必ずいつかはcritical sectionに入ることができる。 • 活性が成り立つためには公平性が必要 どちらのプロセスも必ず進んでいなければならない。 ここでは,critical sectionで無限ループに陥らないと仮定。 • 公平性(fairness) どちらのプロセスも無限回実行される。 (unconditional fairness) 例:活性の検証 • ヘッダ部に入ったにもかかわらず、critical sectionにいつま でたっても入れないとすると、2と3を回っているはずである。 このとき、 flags[you] == true と turn == you の両条件が成 り立っているはずである。こちら側が2と3を回っているとき、 これらの二つの変数の値は、相手側しか変えることができな い。相手方では、turn != you が成り立っているので、相手側 が既に2と3を回り続けていることはない。一方、6を回りつづ けているとすると、flags[me] == false となっているはずであ る。これは、こちら側では flags[you] == false を意味するの で、これもあり得ない。従って、公平性を仮定すると、相手側 は2にまで至るはずである。ところが、こちらが2と3を回って いるならば、flags[me] == true のはずなので、相手側では flags[you] == true となる。従って、相手側が1を実行し2に入 ると、2と3を回り続けることになる。一方、こちら側は、相手 が1を実行すると、turn==me となるので4に進むことができ る。これは矛盾である。 二つのアプローチ • 証明支援系(proof assistant) – 先のスライドのような議論を形式論理の中で行う。 • 主として高階論理+帰納的定義 – 処理系の中で形式的な証明を構築しチェックする。 – 半自動的な証明機能(タクティク) • 状態探索系・モデル検査系(model checker) – 有限個の状態を機械的に網羅し、 活性を破るような無限経路がないことを確認する。 • 状態:(pc0, pc1, flags[0], flags[1], turn) – – – – 状態の網羅⇒有限の状態遷移系(グラフ) 無限経路=グラフ上のループ 状態遷移系を記述する言語 ⇒ プロセス代数など 状態遷移系の性質を記述する言語 ⇒ 時相論理 時相論理(Temporal Logic) • 状態の遷移や時間の経過の観点より システムの性質を記述するための論理体系 • 線形時間時相論理 – LTL(Linear Time Temporal Logic) • 分岐時間時相論理 – CTL(Computation Tree Logic) – μ計算(m-Calculus) • モデル検査 – 時相論理で表現された性質を システムが満たすかどうかを検査すること Petersonのアルゴリズムの正当性の 時相論理による表現 • 安全性 – LTL(Linear Time Temporal Logic) G(¬(pc0=4 ∧ pc1=4)) – CTL(Computation Tree Logic) AG(¬(pc0=4 ∧ pc1=4)) • 活性(飢餓が起きないこと) – LTL – CTL G(pc0=0 ⇒ F(pc0=4)) AG(pc0=0 ⇒ AF(pc0=4)) • 公平性(fairness) – LTL G(pc0=0 ⇒ F(pc0=1)) ∧ ... – LTLならば書けるが、CTLでは書けない。 証明支援系 • • • • • HOL 高階論理 Isabelle 高階論理, 集合論, … PVS 高階論理, 依存型 Coq 高階型理論 上記のシステムに共通の機構 – 高階論理(higher-order logic) – 帰納的定義(inductive definition) • データ型 • 述語 • ACL2 Boyer-Moore 状態探索系・モデル検査系 • • • • • • • • • SMV SPIN Murf FDR SAL HyTech Uppaal Kronos PRISM CTL, BDD LTL, Promela 状態探索 CSP PVSの記号モデル検査系 時間オートマトン 時間オートマトン 時間オートマトン 確率オートマトン 事例 • 分散アルゴリズム – 仕様・アルゴリズム • 認証プロトコル – 仕様・アルゴリズム • JavaとJavaCard – 仕様・アルゴリズム・設計 – 実装(ソースコード・レベル) – 実装(バイトコード・レベル) • 実時間システム – 仕様・アルゴリズム・設計 分散アルゴリズム • 事例:Byzantine General – SRIのPVSによる有名なケース・スタディ – 将軍とn-1人の隊長 – 将軍も含めて裏切り者がいるかもしれない。 – 裏切っていない隊長たちがコンセンサスを得る。 • 仮定:Oral Message – 故障していないプロセッサ間の通信は信頼できる。 – メッセージの受信者は送信者を特定できる。 – メッセージの消失を検知できる。 Byzantine General OMBG(0) • 将軍はすべての隊長に命令を送る。 • 各隊長は、命令を受信すればそれを用いる。 命令を受信しなければ「退却」を用いる。 OMBG(m), m>0 1. 将軍はすべての隊長に命令を送る。 2. 隊長iは、命令を受信すればそれをviとする。 命令を受信しなければ「退却」をviとする。 隊長iは、他のn-2人の隊長に対して、 将軍となってOMBG(m-1)を実行する。 3. ステップ2でOMBG(m-1)の実行により 隊長j(j≠i)から受信した命令をvjとする。 命令を受信しなければ「退却」 をvjとする。 隊長iは、v1,…,vn-1で多数決を行い、その結果を用いる。 OMBG(m)の性質 • 裏切り者の数が高々kで、n>2k+mのとき、 将軍が裏切り者でなければ、 裏切り者でない隊長は将軍の命令を用いる。 • 裏切り者の数が高々mで、n>3mのとき、 裏切り者でない隊長は同じ命令を用いる。 • 形式的証明:10年以上の長い歴史 – Boyer-Moore, EHDM, PVS, …(証明支援系) • 後の形式的証明へ継承 – Byzantine fault-tolerant clock synchronization – TTA(Time Triggered Architecture) モデル検査 • 一方、モデル検査においても、 分散アルゴリズムは重要な対象。 • 例えば、SPINのIEEE/SEの論文には、 – Process scheduling algorithm – Leader election algorithm – Sliding window protocol • ただし、有限モデルに制限する必要がある。 – もしくは、適切な抽象化による 抽象モデル検査を行う。 認証プロトコルの検証 • 各種方法論の競演(古館伊知郎風に言えば) – 様相論理 – 状態探索・モデル検査 ⇒ アタックの発見 • FDR, Murf – 論理プログラミング – 帰納的定義と証明支援系 ⇒ 形式的証明 • Isabelle – 多重集合書き換え – 静的検査(型とeffect) – ストランド空間 ⇒ 数学的証明 • Athena(専用の自動証明系) Needham-Schroeder公開鍵プロトコル {NB , B}KA A {NB, NA}KB {NA}KA B Loweのアタック {NB , B}KA A C {NB, NA}KB {NA}KA {NB , B}KC {NB, NA}KB C {NA}KC B Loweのアタック • Bが不用意に信頼できない主体Cと プロトコルを開始してしまう。 • Aは、Bと通信していると信じている。 • しかし、ノンスはCに漏洩してしまっている。 • Loweは、FDRを用いてこのようなアタックの 存在を発見したとされている。 • 実は、その前に手作業で発見していた。 Javaの形式化と検証 • ここでも各種方法論の競演 • 証明支援系 – Isabelle, ACL2, … – Java言語の操作的意味論・型システム・コンパイラ • インヘリタンス、インタフェース • 静的解析 … 型システム – JVM言語の型システム • サブルーチン、オブジェクト初期化、クラスローダ – Java言語のソースコードの静的検査 • ESC/Java • 時相論理 – セキュリティ・マネージャの形式化 • モデル検査 … バイトコードのモデル検査 JavaCardの形式化と検証 • Javaの形式化と検証に加えて • ヨーロッパのプロジェクト – VerifiCard • • • • • • University of Nijmegen, The Netherlands (Coordination) INRIA, France Technical University of Munich, Germany University of Kaiserslautern, Germany Swedish Institute of Computer Science, Sweden SchlumbergerSema – INRIAの旧プロジェクト • 証明支援系 – JCVMの形式化 • CertiCarte – – – – Coq Offensive and Defensive Virtual Machine ByteCode Verifier コンテキスト・スイッチ JavaCardの形式化と検証 • 仕様記述言語 – JaKarTaプロジェクト • CertiCarteから発展 • JSL(JaKarTa Specification Langauage) – JMLに発展したのか? – LOOPプロジェクト • • • • JML(Java Modeling Language) Hoare論理の再来 Proof obligationをPVSもしくはIsabelleへ変換 APIの仕様記述と検証 – AbstractCollection – AID – JCSystem » ファイアウォール、トランザクション、トランジェント・オブジェクト • Transacted memory JavaCardの形式化と検証 • 事例:電子財布 – Gemplus – Multi-appletアプリケーション • 共有オブジェクトによる通信 • Purse – Deposit – Debit • Loyalty – 「ポイント・カード」 – ESC/Javaによる静的検査 – JML 実時間システム • 事例:Byzantine clock synchronization 各プロセスは、すべてのプロセスのクロックの 値を読み込み、自分のクロックをそれらの値 の平均にセットする。ただし、平均を計算する 際には、自分のクロック値に対してδより大き くずれているクロック値は無視して、その代わ りに自分のクロック値を用いる。 • 形式的証明:やはり10年以上の長い歴史 – EHDM, PVS, …(証明支援系) • TTAなどの基礎 時間オートマトンのモデル検査 • 一方、モデル検査においても、 実時間システムの検証技術の研究が活発。 • 様々な実時間システム – 時間オートマトン(timed automaton) – ハイブリッド・オートマトン(hybrid automaton) – 時間ペトリネット – 時間付き多重集合書き換え • 実時間を扱う時相論理 – TCTL • 多くのモデル検査系 時間オートマトン 離散的な制御+連続的な時間経過 A x2 B x>1 x := 0 エッジによる遷移+時間経過による遷移 • クロック変数:x, y, z, ... • ロケーションとエッジに対する制約 • クロック値はユニフォームの増加する。 • エッジによる遷移の際に 指定されたクロック変数がリセットされる。 C 事例:Uppaalから • • • • • • • • • • • • • Bang & Olufsen Audio/Video Protocol Bang & Olufsen Power Down Protocol Bounded Retransmission Protocol Collision Avoidance Protocol Gearbox Controller LEGOョ MINDSTROMSTM Systems - Control Program Synthesis LEGOョ MINDSTROMSTM Systems - Verification of RCXTM Systems Lip Synchronization Algorithm Multimedia Stream Mutual Exclusion Protocol Philips Audio Protocol Philips Audio Protocol with Bus Collision TDMA Protocol Start-Up Mechanism
© Copyright 2024 ExpyDoc