[CODE BLUE 2017]”商用ホワイトボックス暗号方式” に対する “鍵回復攻撃” アン・サンファン – Sanghwan Ahn -[レポート] #codeblue_jp #codeblue_jp_t1

こんにちは、臼田です。

『世界トップクラスのセキュリティ専門家による日本発の情報セキュリティ国際会議』でありますCODE BLUE 2017に参加していますのでレポートします。

このブログは下記セッションについてのレポートです。

"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" - アン・サンファン - Sanghwan Ahn -

レポート

イントロ

  • なぜこのようなリサーチを始めたか
    • 商法のホワイトボックスに対しては攻撃が成功したという話があまりない
    • 実際に攻撃を行なったがあまり有効ではなかった
    • しかし、サイドチャネル攻撃を利用したら成功した
  • アプリケーションセキュリティ
    • 鍵が保管されているが、これはしばしばメモリに保管してあり抜き出すことができる
    • データが暗号化されていてもメモリを確認するので意味がない
  • ホワイトボックス脅威モデル
    • バイナリを見る
    • 暗号アルゴリズムにアクセスできる
    • 実行環境を制御できる
    • なんでも実行できる
  • ホワイトボックス脅威モデルのソリューション
    • ホワイトボックスを利用している場合にはアプリケーション側の実装で守るべき
    • 信頼できる実行環境(TEE)
      • ほぼ安全だがサポートされているデバイスは少ない
    • ホワイトボックス暗号(WBC)
  • 参考資料

WBC(ホワイトボックス暗号)とは

  • ソフトウェアベースの暗号
  • AES等で利用できる
  • SboxにkeyとInputからTboxへ出す
  • テーブルで演算する
  • テーブルベースAESの実装
    • ShiftRows
    • SubBytes
    • AddRoundKey
    • MixColumns
  • 内部エンコーディング
    • Mixing Bijectionで変換し、次のラウンドでキャンセルされる
  • 外部エンコーディング
    • 外部のホワイトボックスでもエンコーディングができる
  • ルックアップテーブルのネットワーク
    • WBCでは沢山のテーブルを利用する
    • コントロールフローを難読化できる
  • WBCを利用すると通常のAESと違って難読化されていて解析が難しい

オープンソースのWBC実装を対象にした攻撃

  • 既存の攻撃
    • table-decomposition
      • 全てのテーブルからkeyをだす
      • バイジェクションから確認することも可能
    • power analysis
      • 途中の計算結果を記録
      • それとシミュレートされたデータを比較
      • 中間計算結果を直列化して0,1で振り分けると適切にデータを取り出せる
      • グループ間の相関を取り出す
      • Correlation power analysis(CPA)で鍵を取り出すことが出来る
    • fault analisys
      • 中間データを変更する
      • 出力の変化を記録する
      • 誤った結果と正しい結果を比較する
      • Differential fault analysis(DFA)にて鍵を取り出す
      • 比較した出力結果にてError箇所を特定して鍵を導く
  • 商法WBC実装
    • 保護された鍵を復号化することができる
  • 既存の研究
    • サイドチャネル攻撃以外に制御フローの視覚化が提唱されている
    • ソフトウェアの動作から可視化することができる
    • 可視化後にCPAを使うとポイントを見つけることができる

商法のWBC実装を対象にした攻撃

  • しかし、商法のWBCは複雑な実装になっている
  • サイドチャネルへの対策がされている
  • 商法WBC実装
    • パフォーマンスのためのシンプル暗号モード
    • セキュリティのためのコンプレックス暗号モード
  • シンプル暗号モードを可視化
    • 複雑でラウンド演算パターンを見出すことはできない
  • 解読の実験
    • テイント解析
    • CPA
    • コード解析
    • DFA
  • シンプル暗号モードにテイント解析を利用し暗号プリミティブを確認しCPAを利用する事で解決する
  • コンプレックス暗号モードにも応用してみる
    • テイント解析は有効に働かなかった
    • リバースエンジニアリングも複雑過ぎるががんばった
    • 図式化したが繰り返しが非常に多かったがそこにfault注入を行う場所を探した
    • DFAを利用する
    • テーブルでfault注入を行なった
    • すべての鍵を行うことができた

まとめ

  • 基本的に
    • マスターキーを流出しない
    • 鍵をハードコート市内
    • IVを固定しない
  • 外部エンコードを使用する(これのみに依存することはよくない)
  • WBベースの公開鍵アルゴリズムを使用する
    • RSA, Elliptic curves, Diffi-Hellman...
  • コード、dataの完全性チェック
  • より安全にWBCを利用するなら毎回鍵を変える
  • デバイスバインディングを使用する
    • 鍵を特定のデバイスに依存するようにすることによりセキュリティを高める
    • デバイス識別子、ユーザ識別子、外部識別子等
    • 鍵を入手しても別の場所では利用できなくなる
    • アン・サンファン氏はバイオメトリックバインディングを研究している
  • 今後の活動
    • 暗号ライブラリのホワイトボックスエクステンション
    • ホワイトボックスエンジンのマスターキー攻撃
    • 脆弱性はすでに修正されている。WBCに対する他の脆弱性を見つけていく

感想

単純な実装による問題以外にも、サイドチャネルにより解析される可能性も考慮してシステムを構成することが必要であることがよくわかりました。

安全な環境での暗号利用にも留意したいですね。