Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kani

Avatar for chiaoi chiaoi
December 23, 2025
23

 kani

Avatar for chiaoi

chiaoi

December 23, 2025
Tweet

Transcript

  1. Rust が選ばれる理由 1. メモリ安全性 a. 所有権・借用によりメモリ安全を保証できる 2. スレッド安全性 a. データの競合をコンパイル時に検出できる

    3. 高速 a. GCなし、ゼロコスト抽象化で C/C++並みの性能が出る 4. 他にも a. 型安全 b. モダンな言語機能 c. エラーハンドリング
  2. Rust のユースケース 1. Firecracker -> VMとホストの境界を扱う。 a. AWSが作成したMicroVM。Lambda、Fargateで使用。 2. Bottlerocket

    -> OS自体の安全性は大事。 a. AWSが作成したコンテナOS。 3. Cedar -> 認可ロジックの正確性が必須。 a. 認可ポリシー言語。AgentCore Policyでも使用されて再び話題に。 4. Linux kernel -> カーネルバグは全てに影響する。 a. カーネル部分の一部に Rustが採用されつつある。
  3. unchecked_addの安全性検証 1. kani::any() で u8 (0 ~ 255)の 任意の値をa, bに置く。

    2. a != 0 つまり、 NonZero::new(a).unwrap() がNonZero<T>になることを確 認する。 3. a + b がオーバーフローしない ことを確認する。 4. c = a + b として先ほどの unchecked_addを使って足 す。 5. c != 0 つまり、足した結果が NonZeroであることを確認す る。
  4. 安全性検証の仕方(3)GOTO programをSSAに変換 SSA (Static Single Assignment) 「各変数への代入は一度だけ」という制約を 持つ形式に変換します。 ? なぜ必要か

    ? 論理式に変換するとき、同じ変数に複 数回の代入があるとバグが起きる。 x = 1 かつ x = x + 1 かつ x = 2 x = 1 ? x = 2 ?
  5. 安全性検証の仕方(4)SSAを論理式に変換 SSA (Static Single Assignment) 先ほどSSAに変換したものを、論理式に変 換します。 ここで、プログラミングコードから数学の言 葉で検証事項が表現されます。 unchecked_addの例

    a != 0, a + b < 256のとき、 (a + b) mod 256 != 0 Note: 論理式を解くSATソルバーは通常、解の存在判定をします。なので、実 際に解く問題は、 ∃a, b ∈ N s.t. a > 0, a + b < 256, (a + b) mod 256 = 0 が偽であることです。
  6. Contract = 検証事項を簡単に記述する方法 - requires で事前条件 - ensures で事後条件 コード内部で

    assume や assert の 検証をしなくても良くなった。 → メリット - 再利用性 - 可読性
  7. Loop invariant = loop, while文の検証方法 loop文やwhile文の検証はこれまで、有限回数しか展開できなかった。 → 数学的帰納法を応用した証明を以下の流れで行える。 1. ループに入る前に不変条件が成り立つ。

    2. 不変条件を満たす任意の入力に対して、操作をした後に再度不変条件を 満たす。 これによって、任意の回数のループ反復がカバーできるようになった。