本文へスキップ
CoRISE
CASE / 01Product Engineering · Security & Resilience開発協力

形式検証を組み込んだ
高信頼性認証・認可基盤PoC

高い信頼性が求められる認証・認可基盤のPoCにおいて,Rustによる実装と,形式検証・モデル検査を並行して進める開発に協力しました。既存の形式検証成果を活用しながら,実装レベルではKani,プロトコルレベルではTamarinを用い,異なる層の性質を検討する取り組みです。

領域
Product Engineering / Security & Resilience
種別
Proof of Concept
手法
形式検証・モデル検査・プロトコル検証
実装
Rust
ツール・既存成果
Kani / Tamarin / Project Everest

動くことに加えて,確かめたい性質がある。

認証・認可基盤では,正常な入力に対する動作に加え,想定外の入力や複雑な状態遷移,攻撃者を含む環境で,どのような性質が維持されるかが重要です。このPoCでは,通常のテストとともに,次の点を明示して検討しました。

技術方針を,実装と検証へつなぐ。

↔ 横にスクロールして図全体をご覧いただけます。

実装と二つの検証対象中央のRust実装を,左のKaniがハーネスを通じて検査します。右のTamarinは別途記述したプロトコルモデルを検証します。Rust実装とモデルの点線は,対応を確認すべき関係を示し,自動変換や証明済みの対応を意味しません。コードを検査モデルとの対応を検討KANIハーネスによるコード検査RUST実装・境界・状態遷移TAMARIN記号的プロトコルモデル
図 01 — 実装の検査と,プロトコルモデルの検証。

Rustによる実装

認証・認可基盤を構成する機能の一部を実装しました。検証対象となる境界や状態遷移を意識しながら,コードを具体化しました。

Kaniによるモデル検査

検証ハーネスで入力,前提,探索範囲,確認条件を定義し,Rust実装の性質を検査する作業に協力しました。

Tamarinによるプロトコル検証

メッセージ交換や状態遷移を記号的にモデル化し,攻撃者を含む振る舞いと安全性に関する性質を検討する作業に協力しました。

層ごとに検証し,前提と実装の対応を確かめる。

KaniはRustコードを,Tamarinはプロトコルの記号モデルを対象とします。それぞれの検証結果を,対象・前提・適用範囲とあわせて扱います。以下の図は検証の関係を示す概念図です。

↔ 横にスクロールして図全体をご覧いただけます。

既存成果・実装・検証結果の関係既存の形式検証成果をRust実装に組み込みます。Kaniではハーネスから到達するコードを検査し,Tamarinでは別途作成した記号モデルを検証します。モデルと実装の対応は確認すべき関係です。それぞれの結果を前提・対象範囲とあわせて整理し,実装の見直しへ戻します。図の枠は検証対象の区分であり,システムの信頼境界ではありません。保証と組み込み条件を確認別途作成するモデルとの対応実装へ戻す既存の形式検証成果RUST IMPLEMENTATION認証・認可の処理と状態KANI · RUST CODEハーネス・前提・探索範囲実装レベルのモデル検査TAMARIN · SYMBOLIC MODEL記号モデル・攻撃者の仮定プロトコルレベルの検証検証結果・前提・対象範囲基盤全体の証明とは区別する
図 02 — 層ごとの検証結果を,前提と適用範囲に結びつける。

既存の検証成果を,保証範囲を理解して利用する。

このPoCではProject Everestの成果物を利用しました。既存の形式検証成果を組み込む際は,成果物自体の保証と,それを利用するシステムで確認すべき性質を区別する必要があります。

成果物が保証する性質

何について証明された成果なのかを具体的に捉えます。

保証が成り立つ前提

検証結果を適用するために必要な条件を確認します。

組み込み時の境界

成果物の責任範囲と,それを呼び出すコードの範囲を分けます。

利用側に残る責任

システムとして別途確認すべき性質を整理します。

Rustコードの性質を,ハーネスで定めた条件で検査する。

Kaniでは,検証ハーネスを入り口としてRustコードを解析します。ハーネスから到達するコードを対象に,前提と解析上の境界を明示して性質を確かめます。

↔ 横にスクロールして図全体をご覧いただけます。

Kaniのハーネスと検査範囲入力と前提を定めたハーネスから,到達可能なRustコードを解析します。探索の境界と確認する性質を設定し,その条件下での結果を得ます。設定した範囲内の網羅的な検査と,アプリケーション全体の証明は区別します。RUST IMPLEMENTATION検証ハーネス → 到達可能なコード入力・前提条件探索の境界・確認する性質設定した条件下での検査結果
図 03 — ハーネスから到達するコードを,明示した条件で検査する。

プロトコルの振る舞いを,攻撃者を含むモデルで検討する。

Tamarinが扱うのはRustコードそのものではなく,プロトコルの記号モデルです。参加者の通信や状態遷移に加え,モデルに定めた攻撃者の能力を含めて性質を検討します。

↔ 横にスクロールして図全体をご覧いただけます。

Tamarinの記号モデルと攻撃者参加者AとBの記号的なメッセージ交換に,想定する攻撃者の能力を含めます。そのモデルに対して性質を検証します。機密性やイベント間の対応関係は性質の例であり,本PoCでの証明完了の主張ではありません。モデルとRust実装の対応は別途検討します。記号的なメッセージ交換対応は別途検討参加者 A参加者 B攻撃者のモデルモデルに対して性質を検証例:機密性・イベント間の対応Rust実装との対応を検討
図 04 — 記号モデルの検証と,実装への対応の検討。

設計・実装・検証を往復する。

実装と検証を並行して進め,確認したい性質とコードの対応を見直します。図は,前提や反例を手がかりに設計・実装へ戻る,開発の考え方を表しています。

↔ 横にスクロールして図全体をご覧いただけます。

設計・実装・検証の開発ループ性質の定義,実装,モデル・ハーネスの作成,検証,前提・反例の確認,設計・実装の見直しを順にたどり,再び性質の定義へ戻ります。反復する開発の考え方を示した概念図です。実装と検証を並行して進める01性質を定義02実装03モデル・ハーネスを作成04検証05前提・反例を確認結果を読み解く06設計・実装を見直す
図 05 — 前提と検証結果を,次の設計・実装へ返す。

形式手法を,ソフトウェア開発へ接続する。

  1. 01Rustによる実装
  2. 02形式手法を意識した開発
  3. 03Kaniによるモデル検査
  4. 04Tamarinによる記号的プロトコル検証
  5. 05既存の形式検証成果の活用
  6. 06検証対象と保証範囲の整理
  7. 07前提と検証結果の対応づけ
  8. 08実装と検証のフィードバック

検証したことと,保証範囲の外にあることを区別する。

本事例は,認証・認可基盤全体の安全性が形式的に証明されたことを意味するものではありません。

検証結果は,対象となる実装やモデル,前提条件,探索範囲,攻撃者モデルなどに依存します。PoCでの取り組みと,本番運用での信頼性の保証も区別しています。

何が確認されたかとともに,何が保証範囲の外にあるかを明示することも,高信頼性システム開発の一部と考えています。

Contact

高い信頼性が求められるシステムについて,ご相談ください。

形式検証やモデル検査を含む開発,認証・認可基盤など,通常のテストだけでは扱いにくい技術課題にも,実装と検証の両面から取り組みます。

相談する

実績一覧に戻る