気まぐれブログ(日記・技術記事・研究のことなど)

気まぐれに更新します.温かい目で見ていただければ...

タイミング攻撃が脅威となる理由

はじめに

この記事では,A Timing Attack against RSA with the Chinese Remainder Theoremの論文を解説し,なぜタイミング攻撃が脅威となるのかを説明したいと思います. この論文では,RSA暗号システムにタイミング攻撃を仕掛け,公開鍵 n=pq多項式時間で素因数分解する手法を提案しています.

なお,この記事ではRSA暗号の詳しい説明については省略させていただきます. RSA暗号についてはこちらの記事を参考にしてください.

www.tomonori4565.com

RSA暗号の説明で登場する変数の説明

本記事で登場する変数を簡単に説明します.

  •  c: 暗号文

  •  m: 平文

  •  n: 公開鍵( n = pqを満たし, p, q素数である)

  •  e: 公開鍵

  •  d: 秘密鍵

その他の変数については,アルゴリズム中の記載を確認してください.

タイミング攻撃とは

暗号システムの復号処理時間を観測することにより,内部で使用されている秘密鍵を復元する攻撃をタイミング攻撃と呼びます. 身近な例をあげると,暗号機能を内蔵したICカードなどが攻撃対象になりやすいです. 復号するときの処理時間の差を繰り返し読み取ることによって,正しい秘密鍵を復元できる可能性があります.

秘密鍵と処理時間の関係

なぜ復号処理時間を観測することで秘密鍵に関する情報を取得できるのか説明します. まず,処理時間と秘密鍵には密接な関係があります. その関係について説明するために,RSA暗号の代表的な復号アルゴリズムである「バイナリ法」を以下に紹介します.

バイナリ法
バイナリ法

アルゴリズムに関する詳しい説明は省略しますが,ポイントなのは4, 5行目です. 4行目で秘密鍵 d i番目のビットが1であるかどうかをチェックし,もし1ならば5行目の処理を追加で実行します. 追加で処理を行うということは,その分処理時間が長くなるということになります. したがって,「処理時間が長い  \Leftrightarrow 5行目の追加処理をたくさん実行している  \Leftrightarrow 秘密鍵 dのビット列に1がたくさん含まれている」という関係が成立します. 処理時間を観測することによって,秘密鍵 dのビット列に含まれている1の数を予想することができるのです

このように,処理時間と秘密鍵には密接な関係が存在していることがわかりました. ですが, dのビット列に含まれている1の数が分かったところで,あまりいいことはありません. 例えば, dの鍵長を1024ビットだとして,その中に1が500個含まれていると分かったとしましょう.さて,そのような条件を満たす dは何通り存在するでしょうか?

数学が得意な人は簡単だと思いますが,おおよそ \binom{1024}{500}通りになります( dmost significant bitとleast significant bitは本来1であるはずなので,正確には \binom{1022}{498}通り程度になります).かなり膨大な候補数になるので,全探索で正しい秘密鍵を見つけることは現実的に不可能です.

したがって,タイミング攻撃は以前まで脅威のある攻撃だとは認識されていませんでした. しかし,本日紹介する論文 A Timing Attack against RSA with the Chinese Remainder Theorem をきっかけに,タイミング攻撃が脅威であるという認識が広まりました.

論文の内容について

ここから論文の内容を説明します. 論文自体はかなり数学的な議論をたくさんしておりますが,本記事では分かりやすさを重点において説明するため,なるべく数学的な議論を排除して解説します. そのため,厳密さには少し欠ける部分があるので,その点についてはご容赦願います.

CRT-ModBin法とは

この論文では,攻撃対象のRSA復号アルゴリズムとして「CRT-ModBin法」というものを採用しています. CRTは,Chinese Remainder Theorem (中国人の剰余定理)のことを指します. ModBinは,Montgomery Binaryの略で,Montgomery乗算という手続き(Montgomery Reduction)を利用したバイナリ法のことを指します.

詳しいアルゴリズムの説明については省略いたしますが,このアルゴリズム自体ものすごく数学的に面白い議論がされているので,興味がある方は一度調べてみてください.

なお,本記事を読み進めるにあたり,以下のアルゴリズムの詳細を理解していただく必要はありません.

CRT-ModBin法のアルゴリズム
CRT-ModBin法のアルゴリズム
ModBin法のアルゴリズム
ModBin法のアルゴリズム
MR (Montgomery reduction)のアルゴリズム
MR (Montgomery reduction)のアルゴリズム

Schindlerの提案手法のポイント

ここからの議論は,CRT-ModBin法の3行目を実行しているときを考えます(4行目は p qに入れ替えるだけで,その他に変わりはありません). なお,CRT-ModBin法の3行目と4行目が復号時間に大きな影響を与えていますが,それ以外は大きな影響を与えていないことに注意してください.

Schindlerは,ModBinアルゴリズム内の4, 6行目で利用されているMR(Montgomery Reduction)アルゴリズムの3行目(と6行目)に注目しました. 説明を簡単にするために,MRアルゴリズムの6行目を「Extra Reduction」と呼ぶことにします.MRアルゴリズムの3行目がfalseである(つまり, m_2 \geq n)場合,Extra Reductionが発生することになります. 実は確率的な議論によって,ModBin法の4行目と6行目を実行した場合に,Extra Reductionが発生する確率をそれぞれ p/(3r), c_p/(2r)と導出することができます.

ここで注目すべきポイントは,ModBin法の6行目においてExtra Reductionが発生する確率が c_p/(2r)であるということです c_p = c \bmod pであり, cは攻撃者が自由に復号システムに投入できる暗号文です. つまり攻撃者が投じる暗号文の種類によって,ModBin法の6行目においてExtra Reductionが発生する確率を変化させることができるのです.

ここで次のようなシナリオを考えましょう.

攻撃者は暗号文の値を繰り返し1インクリメントさせながら,復号システムに次々と投入します.暗号文が大きくなるにつれて,相対的に c_p = c \bmod pの値も大きくなります.つまり,Extra Reductionの発生頻度が多くなるため,復号処理時間が長くなります. しかし, cがpの倍数になった瞬間, c_p = 0 \bmod pとなります.この瞬間に,Extra Reductionはパタっと発生しなくなります.つまり,復号処理時間は急に短くなります.

攻撃者はこの処理時間の瞬間的な変化を観測した瞬間,「先ほど投入した暗号文 c pの倍数だったんだな」と認識することができます. そして, c pの倍数だと分かると,とても嬉しいことがあります. c n(=pq)の最大公約数をユークリッド互助法等で導出すると,秘密鍵 pが計算できるのです! pが分かると, q=n/pより qも導出できるので,公開鍵 n素因数分解できてしまいます.

上記のようなシナリオはかなり単純なので,うまくいく可能性も低いです. そこでSchindlerは,少し工夫を凝らして効率的に素数 pを発見するためのbasic schemeを提案しました. basic schemeは論文中の4章の最後に掲載されています.

Schindlerの提案手法は,実験により現実時間内でRSA暗号の公開鍵を素因数分解することに成功しました.

タイミング攻撃の対策(ブラインディング法)

ではどうしたらタイミング攻撃の脅威を軽減することができるのでしょうか.

色々な手法があるのですが,ここでは「ブラインディング法」というものを説明します. ブラインディング法を簡単に説明すると,実際に入力される暗号文にランダム化処理を施し,コアとなる復号計算(RSA暗号でいう  c^{d} \bmod n )で使用される暗号文との相関をなくす手法のことです.

ブラインディング法の概念図
ブラインディング法の概念図

例えばRSA暗号にブラインディング法を適用することを考えましょう.ここで,ランダムな値 rを用意します. 実際に入力された暗号文 cに対して, c' = r^{e}cを計算します( eは公開鍵).この操作がランダム化処理に相当します.

あとはこの c'に対して復号計算 m' = (c')^{d} \bmod nを実行し,最後にランダム化処理を解除する計算 m = m'r^{-1}を実行し,目的の平文 mを復元します.

こうすることによって,コアとなる復号計算で用いられる暗号文と,実際に入力された暗号文との相関をなくすことができます. ブラインディング法を適用することによって,Schindlerの攻撃を無力化することができます.

復号システムへの安全性評価

一般的に,復号システムにブラインディング法を適用することによって,タイミング攻撃への耐性を持たせることができると信じられています. しかし当然ながら,「確実に安全である」という保証はありません.ではどのようにして安全性を評価すれば良いのでしょうか.

そのためには,「情報理論」の知見が必要となります.具体的には,量的情報流解析と呼ばれる,機密情報を扱うプログラムから漏洩する機密情報の量を,エントロピーと呼ばれる概念に基づいて見積もる手法を使います.この辺の話をすると長くなりそうなので,また機会があれば話をしようと思います.

まとめ

  • 秘密鍵と復号処理時間には深い関係がある

  • Schindlerの提案手法により,タイミング攻撃の脅威について認識が広まった

  • タイミング攻撃の脅威を軽減するために,ブラインディング法というものが使用される

あとがき

何か不明点やおかしい点に気付いた方がいらっしゃいましたら,コメントをいただけると幸いです.

参考文献