Comments
Description
Transcript
耐タンパー性に関する標準化調査研究開発 第二部
平成 15 年度 経済産業省委託 (基準認証研究開発事業) 耐タンパー性に関する標準化調査研究開発 実 証 実 験 報 告 書 第 二 部 平成 16 年 3 月 財団法人 日本規格協会 情報技術標準化研究センター 株式会社 東 芝 この調査研究は,経済産業省からの委託で実施したものの 報告である。 i 目次 第 1 章 活動概要 1.1 背景 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1.2 1.3 今年度の活動の目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 今年度の活動の成果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 標準的な実験評価環境の確立 . . . . . . . . . . . . . . . . . . . . . . . . . 3 5 5 1.3.2 1.3.3 国際標準化規格案の調査 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 ビット CPU を用いた暗号実装への非破壊攻撃と耐性評価 . . . . . . . . 9 12 1.3.4 非破壊攻撃に関する技術動向調査 . . . . . . . . . . . . . . . . . . . . . . . 14 第 2 章 評価環境構築 2.1 2.2 2.3 8 ビット CPU 搭載評価基板の仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 評価基板の特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 LSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 19 2.1.3 メモリマップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 開発環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 2.2.1 2.2.2 ハードウェア開発環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 23 DPA 測定システム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 ソフトウェア開発環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 3 章 DES のソフトウェア実装 3.1 3.2 3.3 17 27 DPA 未対策版の DES ソフトウェア . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 コードの説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Akkar らによる DPA 対策のソフトウェア実装 . . . . . . . . . . . . . . . . . . . . 27 27 41 3.2.1 3.2.2 コードの説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 44 Goubin らによる DPA 対策のソフトウェア実装 . . . . . . . . . . . . . . . . . . . 3.3.1 論文紹介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 54 3.3.2 59 論文紹介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . コードの説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 4 章 サイドチャネル攻撃追試験 4.1 DPA (Differential Power Analysis) の概要 . . . . . . . . . . . . . . . . . . . . . . 79 79 4.2 DPA 未対策版 DES の実装に対する DPA 攻撃 . . . . . . . . . . . . . . . . . . . 4.2.1 測定条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 82 4.2.2 83 SPA (Simple Power Analysis) . . . . . . . . . . . . . . . . . . . . . . . . . ii 4.2.3 4.3 4.4 DPA (Differential Power Analysis) . . . . . . . . . . . . . . . . . . . . . . 83 4.2.4 結論 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPA 対策版 DES の実装への攻撃 (Akkar らの対策) . . . . . . . . . . . . . . . . . 4.3.1 測定条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 86 86 4.3.2 4.3.3 SPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 86 4.3.4 4.3.5 鍵の特定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 結論 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 89 DPA 対策版 DES の実装への攻撃 (Goubin らの対策) . . . . . . . . . . . . . . . . 4.4.1 測定条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 90 4.4.2 4.4.3 4.4.4 SPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 鍵の特定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 91 91 4.4.5 結論 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 第 5 章 国際標準規格案の調査 5.1 5.2 ISO 標準化動向 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FIPS140-2 要求要件の調査と考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 95 98 第 6 章 非破壊攻撃に関する技術動向の調査 6.1 6.2 99 Multi-channel Attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.1.1 マルチチャネル攻撃 (テンプレート攻撃スタイル) . . . . . . . . . . . . . . 100 6.1.2 今後の課題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Security Evaluation of Asynchronous Circuit . . . . . . . . . . . . . . . . . . . . 103 6.2.1 6.2.2 6.3 6.4 6.2.3 Fault Injection Analysis [7] . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.2.4 Design-Time Security Analysis . . . . . . . . . . . . . . . . . . . . . . . . 105 Attacking Unbalanced RSA-CRT Using SPA . . . . . . . . . . . . . . . . . . . . 106 6.3.1 6.3.2 前提 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 6.3.3 対策 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 攻撃手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 ランダム化初期点を用いた電力解析対策方法 . . . . . . . . . . . . . . . . . . . . . 109 6.4.1 6.4.2 6.5 2 線式非同期プロセッサの開発 . . . . . . . . . . . . . . . . . . . . . . . . 104 サイドチャネル解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 楕円曲線暗号と SPA/DPA および その対策 . . . . . . . . . . . . . . . . . 109 RPA と ZPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.4.3 提案対策法 (Randomized Initial Point 法, RIP) . . . . . . . . . . . . . . . 110 キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 . . . . . . . . . . . 111 参考文献 114 115 付 録 A 回路評価基板 121 iii 付 録 B 基本命令実行時の電圧の変動 125 B.1 算術演算命令の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 B.1.1 AND 命令の実行時の電圧の変動 . . . . . . . . . . . . . . . . . . . . . . . 125 B.1.2 XOR 命令の実行時の電圧の変動 . . . . . . . . . . . . . . . . . . . . . . . 131 付 録 C サンプリングレート 135 1 第1章 活動概要 オープンなネットワークであるインターネットの普及によるネットワーク上での取引の増加や、携 帯電話をはじめとするモバイル端末の急速な利用の拡大から、暗号技術による安全な通信の確保が 急務となっている。暗号技術の利用においては、IC カードによる鍵の管理や認証を想定する場合 が少なくないが、 近年 IC カードを含め暗号実装に対する攻撃に様々な手法が考案され、その攻 撃に対する対策 (耐タンパー技術の一種) が盛んに研究されている。 本請負事業は、これら攻撃の体系化と わが国独自の耐タンパー性要求要件の視点を確立し、耐 タンパー性要求要件の策定を行い標準化活動へ貢献することを目標としている。本報告書は、平成 15 年度の「耐タンパー性」に関する標準化調査研究開発の活動についてまとめたものである。本 章では、本請負事業を行う上での背景を概説し、今年度の活動の目的と成果を報告する。 1.1 背景 近年、PC (パーソナルコンピュータ) や 携帯電話などのモバイル端末からのインターネット利 用が急増し、より安全な通信路の確保が求められている。さらに、既存の磁気カードと比較して 偽造が困難である IC カードが普及し、IC カードを用いた取引や認証が実現されているが、ここ でも より安全な通信路 (カードリーダを経由して、サーバにデータを安全に転送する) の確保が要 求されている。これらの要求を実現するのが暗号技術である。 現在、標準的な暗号として利用されている方式は、1977 年に アメリカ商務省標準局 (National Burdeau of Standard, NBS:現在の Natinal Institute of Standards, NIST [36]) が標準暗号とし て定めた DES (Data Encryption Standard, [38]) である。DES は 暗号文の送信者と受信者が事 前に共有した秘密情報を鍵として暗号通信を行う 共通鍵暗号方式 の 1 つである。暗号通信には、 暗号文の送信者と受信者の間で事前に秘密情報を共有せずとも通信が可能な公開鍵暗号方式も存 在する。共通鍵暗号方式は、公開鍵暗号方式と比較して短い鍵で実装されるため、計算量が少な く、モバイル端末や IC カードに適した暗号方式である (DES では 鍵のサイズは 64 ビット (うち 8 ビットはパリティ) であるが、楕円曲線暗号 [31, 34] は 160 ビット、RSA 暗号 [43] は 1,024 ビッ ト (または 2,048 ビット) が 鍵のサイズとして一般的に利用されている)。 DES はその後、多くの組織が標準暗号として利用しているが、一方で理論的な攻撃手法も多数 提案されている。さらに、最近のコンピュータの性能の向上によって鍵の探索も高速に実行するこ とができるようになり、64 ビット (実質 56 ビット) の鍵では安全性が十分とはいえなくなってき た。NIST は現在普及している DES を用いて安全な通信を当面の間実現する方法として、DES を 3 段重ねて実行する Triple DES を提唱する一方、1997 年に 128, 192, 256 ビットの鍵を用いる次 期標準暗号 AES (Advanced Encryption Standard, [39]) の公募を行った。AES の公募を受けて、 2 第1章 活動概要 各国から多数の暗号方式が応募されたが、最終的にはベルギーの J. Daemen と V. Rijmen が提案 する Rijndael が標準として採択された。 標準暗号の選定は NIST の他にも、欧州では NESSIE (New European Schemes for Signatures, Integrity, and Encryption, [37])、わが国でも 経済産業省と総務省のそれぞれから委託を受けた情 報処理振興事業協会 (IPA) [22] および通信・放送機構 (TAO) [46] が運営する暗号技術評価委員会 (Cryptography Research & Evaluation Committees, CRYPTREC [12]) で行われている。NESSIE や CRYPTREC では、次世代共通鍵暗号方式の他に、公開鍵暗号方式やハッシュ関数などの標準 方式も公募され、各カテゴリごとにいくつかの方式が推奨されている。 NIST、NESSIE、CRYPTREC などの標準化組織で標準暗号を選定する過程では、暗号方式の 実装効率に加えて、従来提案されている攻撃手法に対する耐性 (安全性) も検討されている。しか し、近年、暗号方式そのものが理論的に安全であっても、実装方法によっては 暗号実装から 内部 で使用している秘密情報 (鍵や設計情報) が漏洩することが報告されている。 暗号実装から内部の情報を読み取る攻撃は、大きく次の 3 種に分類される:(1) 侵入型 (破壊) 攻 撃 (Invasive Attack)、(2) フォールトベース攻撃 (Fault Based Attack)、(3) サイドチャネル攻撃 (Side Channel Attack)。 (1) は、暗号実装に対して狭義タンパー手段 (切る、削る、孔を開ける、溶かす、分解する、な ど) により実装内部に侵入し、実装内部に直接入力を与え内部データを観測することで秘密情報を 読み取る攻撃である。この攻撃は、攻撃の痕跡が残るため、攻撃後には検知が比較的容易である。 (2) と (3) は、(1) に対して 非侵入型 (非破壊) 攻撃 (Non-Invasive Attack) と呼ばれることもあ る。これらの攻撃は、比較的安価な機材で攻撃が可能であることと、攻撃の痕跡が残らないため 攻撃後に検知することが困難であるという特徴をもつ。それぞれの特徴は以下のとおり。 (2) は、暗号実装に対して 何らかの手段で誤作動を誘起し、実装の出力結果を観測することで 実装内部の秘密情報を読み取る攻撃である。この攻撃に対しては、出力を返す前に値をチェックす る、エラー検出ビットによる内部メモリの保護を行う、などの対策が考えられる。 (3) は、暗号実装に対して 正規 な入力を与え、暗号実装が要する実行時間や、実行時の消費電力 の情報から内部の秘密情報を読み取る攻撃である。サイドチャネル攻撃は、基本的な攻撃手法と対 策は各方式 (アルゴリズム) で同一だが、攻撃や対策の詳細は方式ごとに異なるため、個別の対応 が必要となる。サイドチャネル攻撃は、利用する情報により以下のように分類される:(3-1) タイミ ングアタック (Timing Attack [32];暗号実装の入力に依存した実行時間を観測する)、(3-2) 単純電 力解析 (Simple Power Analysis, SPA [33];単一処理に要する消費電力の情報から内部処理 および 鍵情報 を推定する)、(3-3) 差分電力解析 (Differential Power Analysis, DPA [33];複数与える各 入力に要する消費電力の統計情報から内部情報を推測する)、(3-4) 電磁波攻撃 (Electro-Magnetic Attack, EMA [16];暗号実装から外部に放射される電磁波から SPA/DPA 的な処理により内部情 報を推測する)。 これらについては、学会で攻撃とそれに対する対策が提案されているのみではなく、現実の暗号 実装に対する攻撃も報告されており、携帯電話などのモバイル端末 や IC カードなどの暗号実装の 普及に対して非常な脅威となるため、十分な対策が必要である。暗号モジュールの耐タンパー要件 の規格化については、FIPS 140-2 (Federal Information Processing Standard 140-2, [13]) と ISO 19790 (International Organization of Standardization 19790) などで検討されている (最近の動向 については 5 章 にまとめる)。 1.2. 今年度の活動の目的 3 わが国でも、わが国独自の耐タンパー要求要件の確立を行い、国際標準案作成 および 国際標準 への貢献を目指して、平成 15 年度より 経済産業省から委託を受けた財団法人 日本規格協会 情報技 術標準化研究センター (Information Technology Research and Standardization Center, INSTAC [21]) において、“「耐タンパー性」に関する標準化調査研究開発事業” が行われている。“「耐タ ンパー性」に関する標準化調査研究開発事業” を実施するにあたり、研究開発、国際標準案作成の ためのバックデータ収集 および解析を行う実施者が公募された。本報告書は、この公募事業 (請負 事業) に関する平成 15 年度の活動内容をまとめたものである。 本請負事業は、サイドチャネル攻撃に代表される非破壊攻撃を中心とするわが国独自の耐タン パー性要求要件策定 と 標準化活動への貢献を目標としている。そのために、まず非破壊攻撃手法、 対策 (耐タンパー技術)、耐タンパー性要求要件の視点から 調査、研究開発活動を行い、攻撃手法 の体系化、および、わが国独自の耐タンパー性要求要件の視点の確立を行う。攻撃手法の分析、耐 タンパー技術の検証には、ソフトウェアレベルでの実証実験を行う。本研究開発は、平成 15 年度 より 3ヵ年で行われ、以下のように課題を設定する。 • 初年度: 調査・研究内容を設定し、実装攻撃の対象とする暗号モジュールを提案する。実験 プラットフォームを構築し、そのモジュールに関する基礎データを収集する。 • 2 年度目: 異なる実験プラットフォームを構築し、暗号モジュールに対する評価実験を行い、 データの収集を完了する。実験結果 および 理論的な解析により耐タンパー性をより深く研 究する。わが国独自の対策技術または要求要件について検討する。 • 3 年度目: わが国独自の対策技術または要求要件の整理を完了し、耐タンパー性に関する標 準化に貢献する活動を行う。 これらの実証実験において、標準的な評価環境の構築が必須となる。現状では、攻撃や対策の有 効性を評価する標準的な実験評価環境は存在しない。そのため、論文の結果の追試験をすることが 困難である、あるいは、攻撃の脅威レベルや対策の有効性の相互比較が困難である、という問題が ある。したがって、標準的に利用できる実験環境の構築が重要なポイントである。 本報告書では、初年度の活動について目的を詳細に設定し (次節を参照)、調査、研究開発活動 により得られた成果を報告する。 1.2 今年度の活動の目的 1.1 節で述べたとおり、今年度の大きな目的を以下に示す。 • 標準的実験評価環境の構築: 攻撃や対策の有効性を評価する標準的な実験評価環境を構築 する。 • 攻撃と対策の有効性の実証: 実装攻撃の対象とする暗号モジュールを作成し、そのモジュー ルに関する基礎データを採取する (ソフトウェアレベルでの実証実験)。 • 調査: 非破壊攻撃手法、対策 (耐タンパー技術)、耐タンパー性要求要件の視点から、学会や 標準化動向の調査を行う。 4 第1章 活動概要 標準的実験評価環境の構築については、評価環境の実装プラットフォームの構築、サイドチャネ ル情報の測定系の構築、評価に用いるパラメータの設定などを行う (測定で用いる機材は、市販さ れている一般的なものを利用する)。 攻撃と対策の有効性のソフトウェアレベルの実証として、攻撃対象を 8 ビット CPU (Z80) での ソフトウェア実装とした。8 ビット CPU を用いた理由は以下のとおり。 1. 基礎的な技術の確立には 8 ビット CPU が適している。 2. 現在の IC カードでは 8 ビット CPU が主流である。 1 点目については、現状では標準的な実験評価環境は構築されておらず、アーキテクチャが単純 であり 解析が容易に行える 8 ビット CPU を用いて標準的な評価環境を確立する必要があると考 えられる。2 点目については、現在の IC カードでは 8 ビット CPU が主流であり、今後 32 ビッ ト CPU への移行が徐々に進むものと考えられるが、今後数年間は 8 ビット CPU が用いられる と思われるため、検討が必要である。 評価に用いる暗号方式と、想定する実装攻撃は以下のように設定した。 評価する暗号方式は CPU の処理能力から 共通鍵暗号方式、特に現在 よく利用されている DES を対象とした。まず、DES をアルゴリズムのとおりに実装した暗号実装 (未対策版) を作成して (差分) 電力解析を行うことで、電力解析の脅威を検証するとともに、構築した実験評価環境が正し く動作することを確認する。RSA 暗号などの公開鍵暗号方式は、処理時間が多く、8 ビット CPU での実装は非現実的であると思われるため、今年度は評価の対象外とした。 今年度は、非破壊攻撃として一般的に検討されている、暗号実装の消費電力から得られる情報に より暗号実装内部の秘密情報を読み取る攻撃を実証の対象とする。特に、今回の実装ではタイミン グ攻撃に脆弱な部分は存在しないと判断されるため、消費電力解析を実証の対象とする。 攻撃への対策としては、(I) 処理による実行時間や消費電力の差異を観測困難にするハードウェ アレベルによる対策、(II) ランダムな要素により処理遅延を生じさせるなどの (ランダムウェイト を追加する) 暗号アルゴリズム外の対策、(III) 暗号アルゴリズムの処理を変形させる対策、があ る。本請負事業ではソフトウェア実装の評価を目的としていることから、(II) と (III) が考えられ る。現実の実装で、これらの対策を複合的に利用した場合、攻撃者がランダムウェイトの除去がで きると想定すると (III) の対策が暗号実装の安全性を保証する歯止めとなるため、本評価では (III) を考える。現在、DES の実装攻撃への (III) に関する対策としては、(i) 暗号実装の内部データを ランダムな要素でマスクをかけて ランダム化する方法 (Akkar ら, [3])、(ii) 暗号実装内部のデータ をランダムに多重化する方法 (Goubin ら, [17])、が提案されている。したがって、本請負事業では これら 2 方式を調査したのち 8 ビット CPU (Z80) に実装を行い、未対策版での解析に使用した 実験評価環境で対策の有効性を検証する。 調査については、(A) 国際標準規格案の調査、(B) 非破壊攻撃に関する技術動向の調査、を行う。 (A) では、ISO 19790 と、ISO 19790 に先駆けて規格化を行っている FIPS 140-2 の動向調査を行 う。この調査は、標準化組織の動向を随時監視し、わが国独自の耐タンパ要求要件を国際標準に反 映させる上で重要である。(B) では、サイドチャネル攻撃とその対策について活発に議論されてい る学会・研究集会である、Cryptographic Hardware and Embedded Systems 2003 (CHES 2003 )、 2004 年 暗号と情報セキュリティシンポジウム (SCIS 2004 ) で発表された論文のうち、代表的な 5 1.3. 今年度の活動の成果 5 件を調査する。この調査は、最新の実装攻撃とその対策を把握し、わが国独自の耐タンパ要求要件 を作成する上で重要である。 1.3 今年度の活動の成果 今年度の成果を、各項目ごとに以下にまとめる。 1.3.1 標準的な実験評価環境の確立 今年度は、8 ビット CPU を用いた評価基板の製作と、消費電力の測定システムを構築した。 評価基板の仕様 今年度は、差分電力解析 (Differential Power Analysis, DPA [33]) の追試験を 行った。追試験を行ううえで評価基板には次の特徴を備えた:(1) 消費電力の測定が可能である、 (2) 外部インターフェースをもつ、(3) プログラマブルカウンタをもつ。 (1) については、本評価の目的である消費電力の測定のために、評価基板の電源線およびグラン ド線に抵抗を入れる必要がある。特に CPU の動作時の消費電力だけを測定することも可能な設 計とする (図 1.1 の抵抗 R3 にかかる電圧を測定する)。(2) については、RS232C ポートを備え、 PC の COM ポートと通信を行い、プログラムを基板上の RAM に転送したり、基板上の RAM のデータを PC で読み取ることを可能にする (図 1.2 を参照)。(3) については、プログラマブルカ ウンタを備え、消費電力を測定するタイミングを特定し、オシロスコープのトリガに利用できる。 作成した評価基板のブロック図が、図 1.2 である。評価に用いた実際の基板を 図 1.3 に示す。 他のLSIへ OP1 電源コネクタ R1 Z80 OP2 R2 Vcc OP3 GND OP:測定ポイント 図 1.1: 電源およびグランドの観測点 R3 6 第1章 OSC Z80 SRAM ROM Counter RS232C PC 図 1.2: 評価基板ブロック図 活動概要 1.3. 今年度の活動の成果 7 図 1.3: 評価基板 8 第1章 評価システムの構築 活動概要 消費電力の評価には、次の機器を用いる:(A) デジタルオシロスコープ、(B) 波形収集およびデータ解析用 PC、(C) 定電圧定電流安定化電源。 (A) は消費電力の測定に必要であり、パラメータは測定環境や対象により異なる。今回の評価で は、水平軸 (掃引時間) として 0.5 msec/DIV、垂直軸 (垂直軸感度) として 200 mV/DIV、サンプ リングレートとして 500M samples/sec を用いた。(B) はオシロスコープから読み込まれた消費電 力データを取り込み、解析処理を行うための PC である。(C) は、DPA など複数のサンプルを利 用する解析を可能とするため、評価基板には常に一定の電圧をかける必要がある。 これらの機器を、図 1.4 のように接続する。今回の評価で用いた測定システムを、図 1.5 に示す。 図 1.4: DPA 測定システム 図 1.5: DPA 測定システム 1.3. 今年度の活動の成果 1.3.2 9 8 ビット CPU を用いた暗号実装への非破壊攻撃と耐性評価 今年度は 8 ビット CPU で実装された DES [38] に対して差分電力解析 (DPA) を行った。DES を実装した暗号モジュールへの DPA は、DES の 15 段目の左出力 (L15) (または、16 段目の F 関 数 の出力 (F16)) が処理されるタイミングでの消費電力波形を、複数の入力情報に対して観測し、 F 関数内部で用いられる部分鍵 (6 ビット) を推測しながら消費電力波形を分類して、統計処理をと ることで、実際に用いられた部分鍵を推定する。部分鍵の推定は F 関数内部で用いられる S-Box の各出力ビット (32 ビット、8 個の S-Box はそれぞれ 4 ビットずつ出力する) で行う。 DPA 未対策版の実装の評価 DPA に対して対策を施していない DES を実装した暗号モジュー ルに対して、L15 で DPA を行ったところ、3,000 本の電力波形から 32 箇所全てで鍵の推測に成 功した。図 1.6 は DES 15 段開始時から 5 msec 間の消費電力波形である。図 1.7 は 複数の入力に 対して得られる消費電力の情報を、推測した部分鍵ごとに統計処理結果を重ねたものである。図中 の赤い線は推測した部分鍵が実際に使用した部分鍵と一致した場合であり、部分鍵の推測に失敗し た場合に比べて統計処理結果が特徴的であることがわかる。表 1.1 は 32 箇所の各々について、統 計処理の結果推定された部分鍵が実際に使用された鍵と一致したか否かをまとめた表である。表中 の橙色の箇所が部分鍵の推定に成功した箇所である。この表から、DPA への対策を施していない DES の実装に対して、L15 で DPA を実行した結果、S-Box の各出力 32 ビットで部分鍵の推定 に成功しており、この情報を基に鍵 48 ビットが特定できる (パリティを除く残り 8 ビットは全数 探索により計算する、あるいは DES の 1 段上の処理で同様の解析を行うことで特定できる)。 15段 16段 図 1.6: DES 15 段開始時から 5 msec 間の消費電力波形 (未対策版、使用波形数 3,000) DPA の対象として F16 を用いた場合には、同様に 3,000 本の電力波形を用いて DPA を実行し たところ、32 箇所のうち 25 箇所で部分鍵の推定に成功した。この場合にも、鍵 48 ビットの特定 が可能である。以上から、DPA の有効性が検証できたと共に、構築した評価環境が期待したとお りに動作することが確認できた。 DPA 対策版 (Akkar ら) の実装の評価 Akkar ら [3] は、DES (および AES) の DPA 対策とし て、アルゴリズム開始時にデータにランダムな値でマスクをかけ、本来の出力が得られるように内 10 第1章 活動概要 図 1.7: 参照値を L15 としたときの DPA 結果 (未対策版) 表 1.1: 参照値を L15 としたときの DPA 結果一覧 (未対策版) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 14h 14h 14h 14h 0fh 0fh 0fh 0fh 1eh 1eh 1eh 1eh 22h 22h 22h 22h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 08h 08h 08h 08h 32h 32h 32h 32h 32h 32h 32h 32h 2fh 2hf 2fh 2fh 1.3. 今年度の活動の成果 11 部の構成を動的に変更して処理を行い、演算終了後にマスクを外す処理を行うことで、攻撃者に演 算内部で現れる値を推測できないようにする方法を提案した。 Akkar ら の対策を施した DES も、未対策版と同様に 8 ビット CPU で実装し (アルゴリズム および 実装コードについては 3.2 節を参照)、同様に 3,000 本の電力波形を用いて L15 あるいは F16 で DPA の処理を行った。 未対策版と同様に、L15 で DPA を実行して得られた、複数の入力に対して得られる消費電力の 情報を推測した部分鍵ごとに統計処理結果を重ねた図と、32 箇所の各々について統計処理の結果推 定された部分鍵が実際に使用された鍵と一致したか否かをまとめた表を、それぞれ図 1.8 と 表 1.2 に示す。図 1.8、表 1.2 から実際に使用された部分鍵の推測は困難であることが確認できた。F16 に関しても同様の結果が得られるため、Akkar らの対策の有効性が検証できた。 図 1.8: 参照値を L15 としたときの DPA 結果 (Akkar らの対策、使用波形数 3,000) 表 1.2: 参照値を L15 としたときの DPA 結果一覧 (Akkar らの対策) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 29h 26h 2bh 3dh 1ah 0ah 11h 36h 3fh 15h 2bh 3dh 1bh 09h 32h 23h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 23h 2bh 2eh 02h 3dh 1eh 00h 19h 1fh 10h 0eh 3bh 00h 27h 3ch 28h 12 第1章 DPA 対策版 (Goubin ら) の実装の評価 活動概要 Goubin ら [17] は、DES (および RSA) の DPA 対策 として、実装内部で扱われるデータの多重化 (特に 2 重化) を提案している。Goubin ら は、アル ゴリズム開始時にデータをランダムに 2 つに分割し、本来の出力が得られるように予め設計された 内部演算を 2 つの系列についてそれぞれ行い、演算終了時に 2 つの系列から本来の値を計算する 処理を行うことで、攻撃者に演算内部で現れる値を推測できないようにする方法を提案した。 Goubin ら の対策を施した DES も、未対策版と同様に 8 ビット CPU で実装し (アルゴリズム および 実装コードについては 3.3 節を参照)、同様に 3,000 本の電力波形から L15 あるいは F16 で DPA の処理を行った。 未対策版と同様に、L15 で DPA を実行して得られた、複数の入力に対して得られる消費電力 の情報を推測した部分鍵ごとに統計処理結果を重ねた図と、32 箇所の各々について統計処理の結 果推定された部分鍵が実際に使用された鍵と一致したか否かをまとめた表を、それぞれ図 1.9 と 表 1.3 に示す。図 1.9、表 1.3 から実際に使用された部分鍵の推測は困難であることが確認できた。 F16 に関しても同様の結果が得られるため、Goubin らの対策の有効性が検証できた。 図 1.9: 参照値を L15 としたときの DPA 結果 (Goubin らの対策、使用波形数 3,000) 1.3.3 国際標準化規格案の調査 国際標準規格案としては、ISO 19790 と FIPS 140-2 を調査した (詳細は 5 章にて報告する)。 ISO 19790: ISO/IEC JTC1 [29] は、ISO (International Organization for Standardization, [23]) と IEC (International Electrotechnical Commission, [20]) が共同で、情報処理分野の標準化を進 めるために設立した機関 JTC1 (Joint Technical Committee for information technology, [29]) で ある。JTC1 では、順次ドキュメントを更新する形で進められ、プロジェクトの開始から標準制定 まで 3 年が目安とされている。 JTC1 は下部組織に SC (SubCommittee) を持ち、SC 27 [24] ではセキュリティ技術を担当して いる。SC 27 では親委員会の下に WG1, WG2, WG3 の 3 個の WG (Working Group) が設けられ られている。具体的な技術的課題の検討は WG で行い、親委員会では JTC1 内外の他の標準との 整合性といった、より大局的な議論が行われる。 1.3. 今年度の活動の成果 13 表 1.3: 参照値を L15 としたときの DPA 結果一覧 (Goubin らの対策) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 1ch 3fh 03h 0bh 1dh 37h 27h 0dh 02h 0dh 15h 35h 05h 17h 08h 22h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 0eh 18h 09h 1dh 2dh 2dh 38h 1eh 3bh 05h 23h 24h 29h 3ah 21h 31h 暗号モジュールに関する標準化は、2002 年 9 月 に米国とカナダの共同提案によって開始され、 IS 番号 “19790” とプロジェクト番号 1.27.40 が割り当てられた。IS 番号は標準として登録された ときの番号であり、暗号モジュールが標準となった場合、ISO/IEC 19790 となることを意味する。 19790 の主担当は WG3 で、暗号技術に関しては WG2 も協力する体制となっている。プロジェク ト番号 1.27.40 は、JTC1 SC27 の 40 番目 の標準化プロジェクトであることを意味する。 年月 表 1.4: JTC1 SC27 における暗号モジュール標準化活動 項目 2002/09 ANSI(米) と SCC(カナダ) が共同で、暗号モジュール標準化の NP 2002/10 国際会合 (ワルシャワ) で米国が趣旨説明 2003/03 NP 投票で賛成多数。番号 19790(プロジェクト番号 1.27.40) として承認 2003/05 国際会合 (ケベック) で 3 名のエディタを選出 2003/05 1st WD の配布 2003/09 1st WD に対するコメント集計 2003/10 国際会合 (パリ) でエディタが交代。1st WD について議論 2003/12 1st WD へのコメントを反映した 2nd WD を配布 ※ NP: New work item Proposal, WD: Working Draft 暗号モジュールの標準化に関する これまでの経緯は 表 1.4 のとおり。2003 年 12 月の会議中に は 2nd WD をまとめきれなかったため、2nd WD に対するコメントを 2004 年 4 月上旬を期限に 回収し、次回シンガポール会合 (4 月下旬) で議論される予定である。 FIPS 140-2: 現在 IS (International Standard) 化に向けて米国とカナダが FIPS 140-2 を基に した案を提案している。本請負事業では最終年度において、耐タンパー性要求要件をもとに標準化 14 第1章 活動概要 活動に貢献することを目標としている。そこで、本年度は、基本的な情報収集という観点から、現 在米国における暗号製品の要求要件である FIPS 140-2 において、サイドチャネル攻撃に対する耐 タンパー性について、現在の要求項目について調査を行った。 FIPS 140-2 に記載されているセキュリティ要求要件において、定量的な数値が明記されている のは、認証メカニズムのところのみで、それ以外の要求要件については、具体的な数値は示されて いない。これは、数値的目標を明示するには、その評価測定環境について明確に規定する必要があ り、そのドキュメント化には多大な労力がかかるためと推測される。 2004 年 3 月に開催された “「耐タンパー性」に関する標準化調査研究開発セミナー” (主催:(財) 日本規格協会 情報技術標準化研究センター (INSTAC)) での講演において、テスト機関 CygnaCom の R. Tincati 氏は、非公開ではあるが、テスト機関と NIST の間では、評価測定環境についてな んらかの基準を策定中であることを示唆した。現在は、その評価環境が FIPS 140-2 の要求要件に 定量的な数値を与えることが妥当かどうかテストしていると考えられる。 現在テスト機関の評価環境は公開されていない。本請負事業におけるサイドチャネル攻撃の追試 験により評価環境を構築し、標準的な評価環境として妥当な仕様を公開することで、標準化活動へ の貢献を考えている。 1.3.4 非破壊攻撃に関する技術動向調査 非破壊攻撃に関する技術動向調査としては、Cryptographic Hardware and Embedded Systems 2003 (CHES 2003 )、2004 年 暗号と情報セキュリティシンポジウム (SCIS 2004 ) で発表された最 新の論文の中から代表的な 5 件を 報告した (詳細は 6 章 で報告する)。 タイトル Multi-channel Attacks [1] 著者 学会名 D. Agrawal, J. R. Rao, and P. Rohatgi Cryptographic Hardware and Embedded Systems 2003 – CHES 2003 発行年 2003 年 概要 CMOS デバイスの消費電力や EM (electromagnetic) のような複数のサイドチャネル信号 を同時に利用して、より高精度な攻撃を行うマルチチャネル攻撃を提案した論文。マルチチャネル 攻撃により攻撃成功のエラー確率が減少する、シングルチャネル攻撃よりも DPA に要する最小サ ンプル数が少なくなるという結果が得られる。 タイトル Security Evaluation of Asynchronous Circuit [15] 著者 学会名 J. J. A. Fournier, S. Moore, H. Li, R. Mullins, and G. Taylor Cryptographic Hardware and Embedded Systems 2003 – CHES 2003 発行年 2003 年 概要 2 線式非同期プロセッサ Springbank を開発し、サイドチャネル攻撃 (DPA, DEMA)、故障 解析 (Fault Injection Analysis) への耐性の評価を行った。2 線式非同期プロセッサは単純な同期 1.3. 今年度の活動の成果 15 型プロセッサに比べて、電力の漏洩が少ないが、DPA に対して完全に安全とはいえない。EMA、 故障解析についても実装での対策が必要であり、設計時の解析の重要性を指摘している。 タイトル 著者 学会名 発行年 概要 Attacking Unbalanced RSA-CRT Using SPA [14] P.-A. Fouque, G. Martinet, and G. Poupard Cryptographic Hardware and Embedded Systems 2003 – CHES 2003 2003 年 中国剰余定理を利用した RSA 署名の実装 (RSA-CRT) に対する SPA 攻撃手法の拡張を検 討している。本論文では、ランダムパディングを利用した RSA 署名でも SPA 攻撃とラティスを 利用した解析手法により法 N を素因数分解する攻撃手法を考案している。ただし、本論文の攻撃 では法 N の素因数である p, q のサイズにわずかな差 (10 ビット程度) を必要とする。 タイトル ランダム化初期点を用いた電力解析対策方法 [25] 著者 伊藤 孝一、伊豆 哲也、武仲 正彦 2004 年 暗号と情報セキュリティシンポジウム – SCIS 2004 2004 年 学会名 発行年 概要 楕円曲線暗号の実装に対する電力解析攻撃として、近年 RPA、ZPA が提案されている。本 論文では、DPA/RPA/ZPA への対策法として RIP を提案し、従来の対策法である ES 法 との実 装効率を比較している。 タイトル キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 [56] 著者 大熊 建司 学会名 2004 年 暗号と情報セキュリティシンポジウム – SCIS 2004 2004 年 発行年 概要 共通鍵ブロック暗号のソフトウェア実装に対するキャッシュメモリの動作に着目した攻撃法 の有効性を示し、理論解析および計算機実験による研究を紹介している。これらの攻撃法は、キャッ シュの定期的なクリアなどの非現実的な条件が仮定されており、実際に有効となる可能性はほとん ど無いとする研究者もいるが、暗号の利用形態による制約条件の結果、キャッシュ攻撃が有効とな る条件を満たすような実装が行われる可能性は否定しきれない。S-Box を利用したブロック暗号の ソフトウェア実装の安全性を評価する際、キャッシュ攻撃の適用可能性の検討は必要である。 17 第2章 評価環境構築 平成 15 年度の実施計画書に基づき、サイドチャネル攻撃の評価環境の構築を行うため、8 ビット CPU を用いた評価基板を製作した。 サイドチャネル攻撃として、差分電力攻撃 (Differential Power Analysis, DPA) の追試験を目的 としていることから、製作した基板では、電圧の変動を測定できるようにしてある。また、発振器 の交換によるクロック周波数の変更や、ROM の交換によりプログラムの書き換えが簡単に行える ようにしてある。 最初に 8 ビット CPU を搭載した評価基板の説明を行い、次に測定環境について説明する。 2.1 8 ビット CPU 搭載評価基板の仕様 8 ビット CPU の命令実行時における消費電力の測定、および差分電力攻撃 (DPA) の追試験の ために、8 ビット CPU を搭載した評価基板を製作した。この基板では、CPU の他に、ワークエ リアとして RAM やプログラムを記憶させておくための ROM、通信用の RS232C ポートなどを 搭載している。 ここでは、製作した基板について、その特徴や搭載されている LSI の説明、メモリマップなど 評価基板の仕様について説明する。 2.1.1 評価基板の特徴 消費電力測定 評価基板では、消費電力の測定が一番の目的であるため、電源線およびグランド線 に抵抗を入れられるようになっている (図 2.1 を参照)。特に、図 2.1 の観測点 OP3 を利用し、抵 抗 R3 にかかる電圧を測定することで、CPU の消費電力だけを測定することも可能な設計として いる。 外部インターフェース 外部からデータの送受信のために RS232C ポートを備えている (図 2.2 を 参照)。ROM に通信用プログラムを搭載することで、PC の COM ポートとケーブルで接続し、 プログラムを基板上の RAM にダウンロードしたり、基板上の RAM を PC で読みだすことがで きる。 プログラマブルカウンタ 3 つの 16 ビット幅のプログラマブルカウンタを備えた LSI (MSM82C53) を搭載している。CPU から入出力命令でアクセス可能となっているので、オシロスコープのトリ ガ用にカウンタの出力を利用することができる。 18 第 2 章 評価環境構築 他のLSIへ OP1 電源コネクタ R1 Z80 OP2 Vcc R2 OP3 GND OP:測定ポイント 図 2.1: 電源およびグランドの観測点 OSC Z80 SRAM ROM Counter RS232C PC 図 2.2: 評価基板ブロック図 R3 2.1. 8 ビット CPU 搭載評価基板の仕様 クロック信号 19 発振器は、8 pin DIP ソケットを用いて基板に実装している。そのため発振器を取 り替えてクロック周波数を変更したり、クロックジェネレータの出力を用いることが可能である。 ROM ソケット プログラムを記憶させておく ROM は、実験開始当初には頻繁に書き換えるこ とがあるため、基板上に 28 pin DIP タイプの ROM ソケットを実装し、ROM を差し替え可能と している。 2.1.2 LSI 今回の基板は、8 ビット CPU の命令実行時の電圧の変動という基本的データの収集および、DPA の追試験を行うことが目的である。これらの目的を達成するために必要な最低限の IC の他に、PC との通信用の IC を搭載している。 これら基板上に搭載されている IC について、機能を簡単に説明する。 CPU 本請負事業の目的の一つとして、8 ビット CPU の基礎データの収集がある。8 ビット CPU として、組み込み用途に多く利用されているアーキテクチャである Z80 を選択した。 Z80 アーキテクチャは、CPU 単体のものから、組み込み用に外部インターフェースやメモリを 一つのパッケージにしたものなど、互換性のある様々な種類の IC が製造されている。本請負事業 の目的から、評価基板に搭載する CPU はできる限り単機能であることが望ましいと考え、基板 に搭載する 8 ビット CPU は、Zilog 社 の CPU Z80 (Z80C0008PEC) とした。さらに、Zilog 社 で製造している Z80 には CMOS を用いたものと、NMOS を用いたものとがある。近年、多くの CPU は CMOS を用いて作られていることから、今後の他の CPU との比較を考え、CMOS で作 られているものを利用することにした。 RAM プログラムや変数などを格納するための一時記憶領域として、32 KByte の SRAM (Static Random Access Memory) を用いている。Z80 がサポートしているメモリには、SRAM の他にも DRAM (Dynamic Random Access Memory) がある。 8 ビット CPU を用いた組み込み用途で使われるメモリとしては、SRAM が多く使われている ことから、今回の評価基板でも SRAM を用いている。 今回使用したメモリ IC は、Cypress 62256-70 (容量 32 KByte, アクセスタイム 70 nsec) である。 ROM 開発初期段階では頻繁にプログラムを書き換えることから、書き換え可能な EEPROM (28C256 互換) をソケットを介して実装するようにした。 EEPROM としては、容量 32 KByte の Atmel28C256B-70 (アクセスタイム 70 nsec) を使用し た。この EEPROM は、電気的なデータの消去・書き換えが可能であるため、紫外線を用いるタ イプより書き換えにかかる時間が短く、開発効率が高くなる。 この EEPROM に ROM ライターを用いて DES のプログラムを書き込み、基板上の ROM ソ ケットに差し込んで DES を実行させる。 20 プログラマブルカウンタ 第 2 章 評価環境構築 測定時のタイミングを取るために、16 ビットのカウンタを 3 つ備えて いる M82C53 を実装した。このプログラマブルカウンタは、CPU からカウンタの値を書き込むこ とが可能であり、クロック数をカウントダウンして設定したタイミングを知ることができる。 このカウンタの出力線を、オシロスコープのトリガのタイミング信号線とし、電圧の変動の測定 を行うこともできる。 RS232C 用 IC パーソナルコンピュータ (PC) と通信することを考えて、評価基板に RS232C のインターフェースを実装することとした。 Z80 の 8 ビットデータバス (パラレルデータバス) と RS232C シリアルデータを変換するため の、パラレル-シリアル変換 IC (M82C51A) と RS232C の電圧条件にあわせるためのレベル変換 IC (MAX232C) を用い、PC と RS232C 経由でデータの送受信を行うことができるようになって いる。 MAX232C MSM82C41A D[0:7] 8 bit TXD RXD T1I R1O T1O R1I RS232C Tx Rx 図 2.3: RS232C コネクタ アドレスデコーダ CPU のアドレスバス上に出力されるアドレスから、アクセスする IC のチッ プイネーブル信号を選択するために、アドレスデコーダが必要となる。 製作した基板では、アドレスデコーダ用に 74AS138 を用いた。74AS138 は、3 入力 8 出力のデ マルチプレクサとなっている。 CPU のアドレスバスを、この 74AS138 の入力ピンに 図 2.4 のように接続し、出力ピンをプロ グラマブルカウンタ (MS82C53) とパラレル-シリアル変換 (M82C51A) のイネーブルピンに接続 した。 CPU から I/O 命令を用いて、それぞれの IC に対して読み書きが可能となっている。 74AS138 A[2] A[3] A[4] A[6] A[4] A[5] A B C G1 G2A G2B Y0 Y1 M82C51 M82C53 Address Bus A [15:0] 図 2.4: アドレスデコーダ 2.2. 開発環境 発振器 21 評価基板は、周波数 8 MHz の発振器があれば動作するが、任意の周波数の発振器が使え るように、標準的な 8 pin の DIP タイプソケットに挿して使用するようにしてある。 発振器の駆動能力を考慮して、多数の IC のクロック線をドライブするためのバッファ (74F540) をつけてある。 CPU 74F540 OSC 図 2.5: クロック信号の分配 これらの LSI を搭載し、評価に用いた実際の基板を 図 2.6 に示す。 メモリマップ 2.1.3 Z80 は、16 ビット (64 KByte) のアドレス空間を持っている。評価基板では、下位 32 KByte (0h∼7fffh) を ROM、上位 (8000h∼ffffh) を RAM に割り当てた。 また、プログラマブルカウンタやパラレル-シリアル変換は、それぞれ 0080h 番地と 0084h 番地 に割り当ててある。 2.2 開発環境 2.2.1 ソフトウェア開発環境 C 言語のコンパイラとして Z80 用 C クロスコンパイラを用いた。ソフトウェアの動作はエミュ レータを使って検証した。 エミュレータを使うことで、基板の完成前に、ソフトウェアの動作確認を行うことができ、評価 環境の開発期間を短縮することができた。使用した C クロスコンパイラとエミュレータは以下の とおり。 C クロスコンパイラ LSIC-80 (LSI ジャパン) エミュレータ Z-Vision Windows Ver5 ((有) システムロード) 22 第 2 章 評価環境構築 図 2.6: 評価基板 メモリ I/O 0000h RS232C カウンタ ROM 7fffh 8000h RAM FFFFh 図 2.7: 評価基板のメモリマップ 0080h 0084h 2.3. DPA 測定システム 2.2.2 23 ハードウェア開発環境 製作した評価基板は、外部から 5V の電圧を入力するように設計しているため、製作した基板を 動作させるには直流安定化電源が必要となる。この直流安定化電源としては、供給電圧 5V/供給 電流 1A が必要最低限の仕様となる。 製作した評価基板の配線などの確認を行うために、基板上のデータバスやアドレスバス上の値を 調べるロジックアナライザが必要となる。今回の評価基板は 8 MHz のクロックに同期したシステ ムであるため、ロジックアナライザに求められる性能として、8 MHz で State を取ることができ るものを用いた。 さらに、作成したソフトウェアを基板で実行させるために、ROM にデータを書き込まなければ ならない。ROM ライタとしては、28 pin DIP 形状の EEPROM に対応している ROM ライタを 用いて、実装したコードを ROM に書き込んだ。 今回の実験に用いたロジックアナライザと直流化電源、ROM ライタとして、以下の機材を用 いた。 ロジックアナイラザ 16557D (Agillent Technology) 定電圧定電流直流安定化 電源 PMC18-5A (菊水電子工業) ROM ライタ UniSite (DATA I/O 社) DPA 測定システム 2.3 評価基板を用いた追試験を行うための測定環境と測定条件を説明する。測定には以下の機器を用 いた。 デジタルオシロスコープ waverunner DS-4374L (岩崎通信工業) 波形データ収集 PC Equium 5050 (東芝, OS: マイクロソフト Windows XP Professional, CPU: Intel Pentium 4 プロセッサ 1.6 GHz, メモリ: 512 MByte, HDD: 60 GByte) 定電圧定電流直流安定化 電源 PMC18-5A (菊水電子工業) これらの機器を、図 2.8 のように接続する。図 2.9 は測定に用いた機器である。 測定では、異なる平文に対し複数回 (1,000 回 または 3,000 回) DES を実行する。DES を繰り 返し行うプログラムと、C クロスコンパイラのライブラリ関数 (rand 関数) により平文を生成する プログラムは、評価基板上の ROM (EEPROM) に記憶されており、評価基板をリセットすると、 初期値を基に自動的に平文を生成して DES のプログラムを実行するよう設定されている。測定は、 プログラマブルカウンタによりクロック数をカウントダウンして、DES の 15 段目の処理開始時に トリガをかけて行う。 DPA の処理のために、評価基板での実験とは別に、評価基板上に実装したものと同じライブラ リ関数と初期値を用いて、評価で使う平文と暗号文の組を使用した鍵と共に保存しておく。評価基 板で消費電力波形を測定した後、このうち特に暗号文を参照値の計算に用いて消費電力情報の統計 24 第 2 章 評価環境構築 図 2.8: DPA 測定システム 図 2.9: DPA 測定システム 2.3. DPA 測定システム 25 処理を行う。統計処理により推定された鍵は、保存されている実際に使用した鍵と比較され、DPA に成功したか否かを判定する。 測定は以下の条件で行った。 オシロスコープ 水平軸 (掃引時間) 0.5 msec/DIV オシロスコープ 垂直軸 (垂直軸感度) 200 mV/DIV サンプリングレート 500M samples/sec1 供給電圧 5V 1 波形のデータ数 L15/F16 ともに 500,000 ポイント 1 消費電力波形の変動に急峻な部分が多く、500M samples/sec 以下のサンプリングレートでは同一入力に対しても同 じ波形を取得することができなかったため、500M samples/sec で取得した。詳細は付録 C を参照。 27 第3章 DES のソフトウェア実装 本章では、評価基板に実装する DES のソフトウェアについて説明する。評価には、DPA 未対策 版の実装と、Akkar ら [3] が提案した対策の実装と、Goubin ら [17] が提案した対策の実装の 3 種 を用いた。 3.1 節 では、DES の DPA 未対策の実装コードについて述べる。3.2 節 と 3.3 節 では、それぞ れ Akkar ら と Goubin ら による DPA 対策を考察し、DPA 未対策の実装コードを基にした DPA 対策の実装コードを述べる。 3.1 DPA 未対策版の DES ソフトウェア DPA 対策を施していない DES のソフトウェア実装 (C 言語) について説明する。FIPS 46-3 に 記載されているアルゴリズムをそのまま実装したものであり、DPA 対策版 DES は、ここに記載 されている未対策版を元に、論文で紹介されている対策を施している。 3.1.1 コードの説明 今回の DES の実装では、特定の CPU 向けに最適化しておらず、アルゴリズムの記述に沿った 簡潔な実装としている。 initPerm DES の初期転置 (IP) 仕様に記載されている初期転置 (IP) を実装したものであり、入力された平文、暗号文の並び変 えを行っている。 引数 ct : 入力された平文または暗号文 work : 初期転置結果 返り値 void void initPerm(ct,work) const unsigned char ct[8]; 28 第 3 章 DES のソフトウェア実装 unsigned char work[8]; { unsigned char i,j; unsigned char msk = 0x40; unsigned char tmp; unsigned char shft = 6; for(i = 0; i < 8; i++){ for(j = 8; 0 < j ; j = j -1){ work[i] = work[i] << 1; tmp = ct[j-1]; tmp = tmp & msk; tmp = tmp >> shft; work[i] = work[i] | tmp; } msk = msk >> 2; shft = shft - 2; if(msk == 0){ msk = 0x80; shft = 7; } } } finPerm DES の最終転置 (FP;初期転置の逆転置, Inverse Initial Permutation, IP−1 ) 最終転置 (FP) 演算を行う関数。 引数 ct : 16 段目が終了したときの演算結果 work : 逆転置結果 返り値 void void finPerm(ct,work) const unsigned char ct[8]; unsigned char work[8]; { unsigned char i,j,msk; 3.1. DPA 未対策版の DES ソフトウェア 29 unsigned char sft; unsigned char tmp; msk = 1; sft = 0; for(i = 0; i < 8; i++) { for(j = 0; j < 4; j++) { tmp = (ct[j] & msk) >> sft; work[i] = ((work[i] << 2) | (tmp << 1) | ((ct[j+4] & msk) >> sft)); } msk = msk << 1; sft++; } } ffunc F 関数の演算を行う関数。 引数にラウンド鍵と演算の中間データ Rn−1 を入力し、演算結果を指定した配列に書き込む。 拡大転置 (E) を行い、入力データ (dt) を 48 ビットに拡大している。拡大転置 (E) が終わった 後、ラウンド鍵と排他的論理和を取り、S-Box のテーブルを引いている (S-Box の実装は後述)。最 後に転置 (P) を行い、出力結果を rdt に書き込んでいる。 引数 rndky: ラウンド鍵 dt: 各ラウンドの入出力 rdt: 各ラウンドの入出力 返り値 void void ffunc(rndky,dt,rdt) const unsigned char rndky[8]; unsigned char dt[4]; unsigned char rdt[4]; { unsigned char dttmp[8]; 30 第 3 章 DES のソフトウェア実装 unsigned char i; /* Expansion Permuation */ /* 32 1 2 3 4 5 */ dttmp[0] = ((dt[3] & 0x1) << 5 ) | ((dt[0] & 0xf8) >> 3); for(i = 0; i < 3 ; i++) { dttmp[2*i+1] = ((dt[i] & 0x1f) << 1) | ((dt[i+1] & 0x80 ) >> 7); dttmp[2*(i+1)] = ((dt[i] & 0x1) << 5) | ((dt[i+1] & 0xf8) >> 3); } /* 28 29 30 31 32 1 */ dttmp[7] = (dt[3] & 0x1f) << 1 | ((dt[0] & 0x80) >> 7); dttmp[0] = sbox0[0x3f & (dttmp[0] ^ rndky[0])]; dttmp[1] = sbox1[0x3f & (dttmp[1] ^ rndky[1])]; dttmp[2] = sbox2[0x3f & (dttmp[2] ^ rndky[2])]; dttmp[3] = sbox3[0x3f & (dttmp[3] ^ rndky[3])]; dttmp[4] = sbox4[0x3f & (dttmp[4] ^ rndky[4])]; dttmp[5] = sbox5[0x3f & (dttmp[5] ^ rndky[5])]; dttmp[6] = sbox6[0x3f & (dttmp[6] ^ rndky[6])]; dttmp[7] = sbox7[0x3f & (dttmp[7] ^ rndky[7])]; /* P Permuation */ rdt[0] = (((dttmp[3] & 0x1) << 7) | ((dttmp[1] & 0x2) << 5) | ((dttmp[4] & 0x1) << 5) | ((dttmp[5] & 0x8) << 1) | ((dttmp[7] & 0x8)) | ((dttmp[2] & 0x1) << 2) | ((dttmp[6] & 0x1) << 1) | ((dttmp[4] & 0x8) >> 3)) ^ rdt[0]; rdt[1] = (((dttmp[0] & 0x8) << 4) | ((dttmp[3] & 0x2) << 5) | ((dttmp[5] & 0x2) << 4) | ((dttmp[6] & 0x4) << 2) | ((dttmp[1] & 0x8)) | ((dttmp[4] & 0x4)) | ((dttmp[7] & 0x2)) | 3.1. DPA 未対策版の DES ソフトウェア ((dttmp[2] & 0x4) >> 2)) ^ rdt[1]; rdt[2] = (((dttmp[0] & 0x4) << 5) | ((dttmp[1] & 0x1) << 6) | ((dttmp[5] & 0x1) << 5) | ((dttmp[3] & 0x4) << 2) | ((dttmp[7] & 0x1) << 3) | ((dttmp[6] & 0x2) << 1) | ((dttmp[0] & 0x2)) | ((dttmp[2] & 0x8) >> 3)) ^ rdt[2]; rdt[3] = (((dttmp[4] & 0x2) << 6) | ((dttmp[3] & 0x8) << 3) | ((dttmp[7] & 0x4) << 3) | ((dttmp[1] & 0x4) << 2) | ((dttmp[5] & 0x4) << 1) | ((dttmp[2] & 0x2) << 1) | ((dttmp[0] & 0x1) << 1) | ((dttmp[6] & 0x8) >> 3)) ^ rdt[3]; } kyschpc1 鍵の初期転置 (PC-1) の演算を行う関数。 入力された鍵の並び変えを行い、配列に演算結果を書き込む。 引数 ky: 鍵 work: PC-1 の演算結果 返り値 void void kyschpc1(ky,work) unsigned char ky[8]; unsigned char work[8]; { unsigned char i,j,k; unsigned char msk; unsigned char tmp; 31 32 第 3 章 DES のソフトウェア実装 msk = 0x80; k = 7; for(j = 0; j < 7; j++) { for(i = 8; i > 0; i = i - 1) { work[j] = work[j] << 1; tmp = (ky[i-1] & msk); tmp = tmp >> k; work[j] = work[j] | tmp; } if(j < 3) { msk = msk >> 1; k = k-1; } else { if(j == 3) { msk = 2; k = 1; } else { msk = msk << 1; k = k+1; } } } work[7] = (work[3] & 0x0f) << 4; } kyschpc2 鍵の転置 (PC-2) の演算を行う関数。 巡回シフトした結果を入力し、PC-2 の転置を行う。演算結果は、指定された配列に書き込ま れる。 引数 3.1. DPA 未対策版の DES ソフトウェア ky: シフト変換された部分鍵 rndky: ラウンド鍵 返り値 void void kyschpc2(ky,rndky) const unsigned char ky[7]; unsigned char rndky[7]; { rndky[0] = (((ky[1] & 0x4) ((ky[2] & 0x80) >> 3) | ((ky[1] & 0x20) >> 2) | << 3) | ((ky[2] & 0x1) << 2) | ((ky[0] & 0x80) >> 6) | ((ky[0] & 0x08) >> 3)); rndky[1] = (((ky[0] & 0x20)) | ((ky[3] & 0x10)) | ((ky[1] & 0x2) << 2) | ((ky[0] & 0x4)) | ((ky[2] & 0x8) >> 2) | ((ky[1] & 0x40) >>6)); rndky[2] = (((ky[2] & 0x2) ((ky[2] & 0x20) >> 1) | << 4) | ((ky[1] & 0x10) >> 1) | ((ky[0] & 0x10) >> 2) | ((ky[3] & 0x40) >> 5) | ((ky[0] & 0x1))); rndky[3] = (((ky[1] & 0x1) ((ky[0] & 0x2) << 3) | << 5) | ((ky[3] & 0x20) >> 2) | ((ky[2] & 0x10) >> 2) | ((ky[1] & 0x8) >> 2) | ((ky[0] & 0x40) >> 6)); rndky[4] = (((ky[5] & 0x8) << 2) | ((ky[6] & 0x1) << 4) | ((ky[4] & 0x20) >> 2) | 33 34 第 3 章 DES のソフトウェア実装 ((ky[5] & 0x80) >> 5) | ((ky[6] & 0x20) >> 4) | ((ky[7] & 0x20) >> 5)); rndky[5] = (((ky[4] & 0x40) ((ky[5] & 0x10)) | >> 1) | ((ky[6] & 0x2) << 2) | ((ky[6] & 0x80) >> 5) | ((ky[4] & 0x8) >> 2) | ((ky[6] & 0x10) >> 4)); rndky[6] = (((ky[5] & 0x1) ((ky[6] & 0x08) << 1) | ((ky[5] & 0x20) ((ky[7] & 0x10) << 5) | >> 2) | >> 2) | ((ky[4] & 0x4) >> 1) | ((ky[7] & 0x80) >> 7)); rndky[7] = (((ky[6] & 0x40)>> 1) | ((ky[5] & 0x04) << 2) | ((ky[6] & 0x04) << 1) | ((ky[4] & 0x01) << 2) | ((ky[4] & 0x80) >> 6) | ((ky[4] & 0x10))>> 4); } kyschRt 鍵の巡回シフトを行う関数。 入力された鍵を暗号、復号演算に応じて左巡回シフト、右巡回シフトを行う。演算結果は、指定 された配列に書き込む。 引数 ky: 部分鍵 rt: 巡回シフトのシフト量 dir: 暗号復号の指定 (0 → 暗号化演算, 1 → 復号演算) 返り値 void void kyschRt(ky,rt,dir) 3.1. DPA 未対策版の DES ソフトウェア unsigned char ky[8]; unsigned char rt; unsigned char dir; { unsigned char i; unsigned char msk; unsigned char shft; unsigned char kytmp[8]; if(dir) /* Decryption */ { if(rt != 0) { if(rt == 1) { msk = 0x1; shft = 0x7; } else { msk = 0x3; shft = 0x6; } for(i = 1; i < 8; i++) { kytmp[i] = ((ky[i-1] & msk) << shft) | (ky[i] >> rt); } if(rt == 1) { kytmp[0] = ((ky[3] & 0x10) << 3) | (ky[0] >> 1); kytmp[4] = ((ky[7] & 0x10) << 3) | (ky[4] >> 1); } else { kytmp[0] = ((ky[3] & 0x30) << 2) | (ky[0] >> 2); kytmp[4] = ((ky[7] & 0x30) << 2) | (ky[4] >> 2); } } } 35 36 第 3 章 DES のソフトウェア実装 else /* Encryption */ { if(rt == 1) { msk = 0x80; shft = 7; } else { msk = 0xc0; shft = 6; } for(i = 0; i < 7; i++) { kytmp[i] = (ky[i] << rt) | ((ky[i+1] & msk) >> shft); } if(rt == 1) { kytmp[3] = ((ky[3] & 0x70) << 1) | ((ky[0] & msk) >> 3); kytmp[7] = ((ky[7] & 0x70) << 1) | ((ky[4] & msk) >> 3); } else { kytmp[3] = ((ky[3] & 0x30) << 2) | ((ky[0] & msk) >> 2); kytmp[7] = ((ky[7] & 0x30) << 2) | ((ky[4] & msk) >> 2); } } if(rt != 0) { for(i = 0; i < 8 ; i++) { ky[i] = kytmp[i]; } } } 3.1. DPA 未対策版の DES ソフトウェア 37 DES 最上位関数であり、この中で初期転置 (initPerm) や F 関数 (ffunc) などを呼びだし、仕様に定 められた演算を行っている。 巡回シフトのシフト量は、配列でグローバル変数として定義している。 引数 ky: 鍵 ct: 入力される平文/暗号文 dir: 暗号復号の指定 (0 → 暗号化演算, 1 → 復号演算) rslt: 演算結果 返り値 void unsigned char sftl[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}; unsigned char sftr[16] = {0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}; void des(ky,ct,dir,rslt) unsigned char ky[8]; unsigned char ct[8]; unsigned char dir; unsigned char rslt[8]; { unsigned char rndky[8]; unsigned char i,j; unsigned char kywork[8]; /* temporary work area for key schedule */ unsigned char ctwork[8]; /* temporary work area for key schedule */ /* Initial Permuation */ initPerm(ct,ctwork); kyschpc1(ky,kywork); j = 0x4; for(i = 0; i < 16; i++) { if(dir) { kyschRt(kywork,sftr[i],dir); /* Key Schedule */ 38 第 3 章 DES のソフトウェア実装 } else { kyschRt(kywork,sftl[i],dir); /* Key Schedule */ } kyschpc2(kywork,rndky); ffunc(rndky,&ctwork[j],&ctwork[j^0x4]); j = j ^ 0x4; } finPerm(ctwork,rslt); } SBOX DES の S-Box の仕様では、各 S-Box への入力 6 ビット (i5 , i4 , i3 , i2 , i1 , i0 ) を、ビットを (i5 , i0 , i4 , i3 , i2 , i1 ) とし並び替えてからテーブル参照を行う。今回の実装では、(i5 , i4 , i3 , i2 , i1 , i0 ) を入力したとき、(i5 , i0 , i4 , i3 , i2 , i1 ) に対応した値を出力するように S-Box のテーブルを事前に変 更しておく。 このようにテーブルを事前に作り直しておくことで、実行時間を短くできる。 /*並び変え後の SBOX*/ static unsigned char sbox0[64] = {14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1, 3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8, 4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7, 15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13, }; /* 並び変え前の SBOX */ /* {14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7, 0, 15, 7, 4,14, 2,13, 1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13 }; */ static unsigned char sbox1[64] = {15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14, 9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5, 0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2, 3.1. DPA 未対策版の DES ソフトウェア 5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9, }; /* {15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9 }; */ static unsigned char sbox2[64] = {10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10, 1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1, 13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7, 11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12, }; /* { 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12 }; */ static unsigned char sbox3[64] = {7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3, 1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9, 10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8, 15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14, }; /* { 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14 }; */ 39 40 第 3 章 DES のソフトウェア実装 static unsigned char sbox4[64] = {2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1, 8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6, 4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13, 15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3, }; /* { 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3 }; */ static unsigned char sbox5[64] = {12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5, 0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8, 9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10, 7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13, }; /* { 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,16 }; */ static unsigned char sbox6[64] = {4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10, 3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6, 1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7, 10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12, }; /* { 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12 3.2. Akkar らによる DPA 対策のソフトウェア実装 41 }; */ static unsigned char sbox7[64] = {13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4, 10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2, 7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13, 0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11, }; /* { 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11 }; */ 3.2 Akkar らによる DPA 対策のソフトウェア実装 本節では、DPA への対策として Akkar ら [3] が提案した Transformed Masking Method につ いての紹介、および実装したコードの説明を行う。 3.2.1 論文紹介 学会名 An Implementation of DES and AES, Secure against Some Attacks Mehdi-Laurent Akkar and Christophe Giraud Cryptographic Hardware and Embedded Systems 2001 – CHES 2001 発行年 2001 年 タイトル 著者 Akkar らは、DES と AES の DPA 対策としてデータを乱数などでマスクして演算を行う方法 を提案している。この提案方法では、演算中に中間データはすべてマスクされるため、マスク用の 乱数がわからない限り攻撃者が中間データを正しく予測することはできないので、DPA 対策とし て有効であることが述べられている。ここでは、提案されている DES の DPA 対策をまとめる。 DES DES の場合、データをマスクするのに最も適切な方法は Boolean Mask である。Initial Permutation (IP) を行う前に平文 M をマスク X で排他的論理和 (XOR) し、Final Permutation (FP) の後にマスクをはがし、演算結果を出力する。 42 第 3 章 DES のソフトウェア実装 データをマスクする場合、XOR 演算などの線形演算の場合には、演算後にマスクをはがすこと ができる。しかし、非線形変換では、マスクつけたまま変換を行うとマスクをはがすことができな いため、非線形変換をデータマスクに対応したものに変換しなければならない。 DES における非線形変換部分は S-Box のみであり、データをマスクして演算を行う場合には、 S-Box を修正しなければならない。 本方式では、マスク値を決定した後に、S-Box を動的に構成し、修正された S-Box を用いて DES の処理を行う。 マスク対策が施された DES の構成を 図 3.1 に示す。 • 平文 M (64 ビット), マスク値 X(64 ビット) • IP:初期転置 • X1 =IP(X):64 ビット • X1L = X10−31 :下位 32 ビット, X1R = X132−63 :上位 32 ビット • EP:拡大転置 • X2 =EP(X1R ):48 ビット • X3 = P −1 (X1L ⊕ X1R ), P −1 :P の逆転置 • SM-Box(Modified S-Box):SM-Box(A) =S-Box(A ⊕ X2) ⊕ X3 図 3.1 の破線で表した箇所が 本来の DES のアルゴリズムに追加された演算である。Akkar ら のアルゴリズムでは、DES を実行するために、まず 64 ビットの乱数 X を生成する。さらに、 X1 = IP (X) を計算し、上位 32 ビットを X1L = X10−31 、下位 32 ビットを X1R = X132−63 とおき、X2 = EP (X1R )、X1L ⊕ X1R 、X3 = P −1 (X1L ⊕ X1R ) を計算する。さらに、S-Box を修正した SM-Box のテーブルを、SM-Box(A) =S-Box(A ⊕ X2) ⊕ X3 をみたすように構成して おく。 平文 M を暗号化するためには、まず マスク X を生成して上述の事前計算を実行し、IP を計算 する前に M を X でマスクする。その後、S-Box のかわりに SM-Box を利用し、各ラウンドの左 出力を計算するにあたり X1L ⊕ X1R を XOR して、その他は DES と同様の処理を行う。このと き、各ラウンド (第 i ラウンド) の左出力は 本来の DES の処理で現れる左出力値 ResiL に X1L が XOR された値となり、右出力は 本来の DES の処理で現れる右出力値 ResiR に X1R が XOR された値となる。16 段の処理を終えた後、左右両方の出力に X1L ⊕ X1R を XOR して、FP 終 了後にマスク値 X を XOR することで、本来の DES の出力結果を得ることができる。 マスクの準備 攻撃者はマスク値 (X, X1, X2, X3) が分かればこの対策を破ることができるため、マスクを用 いた S-Box の修正は、安全に計算しなければならない。この S-Box の修正には計算時間がかかる が、DES の実行前に一度だけ計算すればよいため、この部分の攻撃の機会は 1 演算につき 1 回で あることから、安全性は保たれている。最悪の場合でも、電圧の変動から攻撃者が得ることので きる情報は、マスクのハミングウェイトのみであり、マスク値を正確に知ることは難しい。 3.2. Akkar らによる DPA 対策のソフトウェア実装 43 M X Key IP IP( M ) L ⊕ X1L IP(M ) R ⊕ X1R S - Box P EP X3 X2 X 1L ⊕ X 1R SM - Box Res1L ⊕ X1L Res1R ⊕ X1R Res16 L ⊕ X1L Res16 R ⊕ X1R X 1L ⊕ X 1R X 1L ⊕ X 1R Res16 R ⊕ X1R Res16 L ⊕ X1L FP X DESkey ( M ) 図 3.1: Modified DES 44 第 3 章 DES のソフトウェア実装 SPA に対して DES の鍵スケジュールの処理で、攻撃者は SPA によりラウンド鍵 Ki のハミングウェイトを得 る可能性がある。この情報を利用すると、16 ラウンドでの 16 本の一次方程式を構成でき、鍵に 関する情報が得られる。この問題を避けるために、鍵の全ビットを各ラウンドで処理する。それに よって攻撃者の得ることのできる情報は鍵のハミングウェイトのみとなる。 他の命令の実行中であれば、攻撃者がある命令でロードされた 32 ビットの正確な値を獲得する ことを防ぐことができる。しかし、高次 DPA も考えると、データをランダムにロード、ストア、 XOR する方がより効果的である。 特に、DES の初めの X1, X2 の計算は注意深くランダム化がされるべきである。 DPA に対して DPA 攻撃はアルゴリズム実行中の中間値の予測に基づいた攻撃手法である。このため、本方式 では、DES の演算の最初から最後まで “実際の” 中間値は現れないため、このような単純な DPA 攻撃に完全な耐性を持っている。 3.2.2 コードの説明 グローバル変数 マスク値、S-Box テーブルの宣言 unsigned char mskX[8]; unsigned char mskX1LR[4]; unsigned char mskX1[8], mskX2[8], mskX3[8]; unsigned char smbox0[64], smbox1[64], smbox2[64], smbox3[64], smbox4[64], smbox5[64], smbox6[64], smbox7[64]; /* S-Box */ static unsigned char sbox0[64] = {14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1, 3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8, 4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7, 15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13}; static unsigned char sbox1[64] = {15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14, 9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5, 0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2, 3.2. Akkar らによる DPA 対策のソフトウェア実装 5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9}; static unsigned char sbox2[64] = {10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10, 1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1, 13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7, 11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12}; static unsigned char sbox3[64] = {7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3, 1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9, 10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8, 15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14}; static unsigned char sbox4[64] = {2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1, 8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6, 4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13, 15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3}; static unsigned char sbox5[64] = {12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5, 0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8, 9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10, 7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13}; static unsigned char sbox6[64] = {4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10, 3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6, 1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7, 10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12}; static unsigned char sbox7[64] = {13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4, 10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2, 7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13, 0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11}; 45 46 第 3 章 DES のソフトウェア実装 initPerm DES の初期転置 (IP) 引数 ct : 入力された平文または暗号文 work : 初期転置結果 返り値 void void initPerm(ct,work) const unsigned char ct[8]; unsigned char work[8]; { unsigned char i,j; unsigned char msk = 0x40; unsigned char tmp; unsigned char shft = 6; for(i = 0; i < 8; i++){ for(j = 8; 0 < j ; j = j -1){ work[i] = work[i] << 1; tmp = ct[j-1]; tmp = tmp & msk; tmp = tmp >> shft; work[i] = work[i] | tmp; } msk = msk >> 2; shft = shft - 2; if(msk == 0){ msk = 0x80; shft = 7; } } } finPerm DES の最終転置 (FP) 引数 3.2. Akkar らによる DPA 対策のソフトウェア実装 47 ct : 入力された平文または暗号文 work : 最終転置結果 返り値 void void finPerm(ct,work) const unsigned char ct[8]; unsigned char work[8]; { unsigned char i,j,msk; unsigned char sft; unsigned char tmp; msk = 1; sft = 0; for(i = 0; i < 8; i++){ for(j = 0; j < 4; j++){ tmp = (ct[j] & msk) >> sft; work[i] = ((work[i] << 2) | (tmp << 1) | ((ct[j+4] & msk) >> sft)); } msk = msk << 1; sft++; } } ffunca DES の F 関数 EP → Modified S-Box → P → XOR (X1L ⊕ X1R ) の順に処理される。Modified S-Box では関 数 desa により生成されたものを用いる。 引数 rndky : round key dt : 各ラウンドの入出力 rdt : 各ラウンドの入出力 ※ラウンドごとに右側と左側が入れ替わる 返り値 void 48 第 3 章 DES のソフトウェア実装 void ffunca(rndky,dt,rdt) const unsigned char rndky[8]; unsigned char dt[4]; unsigned char rdt[4]; { unsigned char dttmp[8]; unsigned char i; /* Expansion Permuation */ /* 32 1 2 3 4 5 */ dttmp[0] = ((dt[3] & 0x1) for(i = 0; i < 3 ; i++){ << 5 ) | ((dt[0] & 0xf8) >> 3); dttmp[2*i+1] = ((dt[i] & 0x1f) << 1) | ((dt[i+1] & 0x80 ) >> 7); dttmp[2*(i+1)] = ((dt[i] & 0x1) << 5) | ((dt[i+1] & 0xf8) >> 3); } /* 28 29 30 31 32 1 */ dttmp[7] = (dt[3] & 0x1f) << 1 | ((dt[0] & 0x80) >> 7); /* calcurate Modified S-Box */ dttmp[0] = smbox0[0x3f & (dttmp[0] ^ rndky[0])]; dttmp[1] = smbox1[0x3f & (dttmp[1] ^ rndky[1])]; dttmp[2] = smbox2[0x3f & (dttmp[2] ^ rndky[2])]; dttmp[3] = smbox3[0x3f & (dttmp[3] ^ rndky[3])]; dttmp[4] = smbox4[0x3f & (dttmp[4] ^ rndky[4])]; dttmp[5] = smbox5[0x3f & (dttmp[5] ^ rndky[5])]; dttmp[6] = smbox6[0x3f & (dttmp[6] ^ rndky[6])]; dttmp[7] = smbox7[0x3f & (dttmp[7] ^ rndky[7])]; /* P Permutation & IP()L XOR P() */ rdt[0] = (((dttmp[3] & 0x1) << 7) | ((dttmp[1] & 0x2) << 5) | ((dttmp[4] & 0x1) << 5) | ((dttmp[5] & 0x8) << 1) | ((dttmp[7] & 0x8)) | ((dttmp[2] & 0x1) << 2) | ((dttmp[6] & 0x1) << 1) | ((dttmp[4] & 0x8) >> 3)) ^ rdt[0]; 3.2. Akkar らによる DPA 対策のソフトウェア実装 49 rdt[1] = (((dttmp[0] & 0x8) << 4) | ((dttmp[3] & 0x2) << 5) | ((dttmp[5] & 0x2) << 4) | ((dttmp[6] & 0x4) << 2) | ((dttmp[1] & 0x8)) | ((dttmp[4] & 0x4)) | ((dttmp[7] & 0x2)) | ((dttmp[2] & 0x4) >> 2)) ^ rdt[1]; rdt[2] = (((dttmp[0] & 0x4) << 5) | ((dttmp[1] & 0x1) << 6) | ((dttmp[5] & 0x1) << 5) | ((dttmp[3] & 0x4) << 2) | ((dttmp[7] & 0x1) << 3) | ((dttmp[6] & 0x2) << 1) | ((dttmp[0] & 0x2)) | ((dttmp[2] & 0x8) >> 3)) ^ rdt[2]; rdt[3] = (((dttmp[4] & 0x2) << 6) | ((dttmp[3] & 0x8) << 3) | ((dttmp[7] & 0x4) << 3) | ((dttmp[1] & 0x4) << 2) | ((dttmp[5] & 0x4) << 1) | ((dttmp[2] & 0x2) << 1) | ((dttmp[0] & 0x1) << 1) | ((dttmp[6] & 0x8) >> 3)) ^ rdt[3]; /* IP()R XOR X1LR */ for(i=0;i<4;i++) dt[i] ^= mskX1LR[i]; } desa DES 実行部分 元の入力平文 (暗号文) データを漏洩しないように、各マスク値を XOR しながら DES を実行 する。 1. マスクと SM-Box 生成 50 第 3 章 DES のソフトウェア実装 2. 入力平文 (暗号文)CT にマスク X を XOR する 3. IP(CT), 鍵置換 PC1(KY) 4. 鍵スケジューリング& F 関数 (16 ラウンド分) 5. 16 ラウンド終了時の左右 32 ビットのデータそれぞれにマスク X1L⊕R をかける 6. FP 後、マスク X を XOR し、暗号文を得る Modified S-Box 生成部分 マスク X を rand 関数により生成し、そのマスクを基に Modified S-Box を作成する。 1. X1 = IP (X) 2. X1L⊕R = X1L ⊕ X1R 3. X2 = EP (X1R ) 4. X3 = P −1 (X1L⊕R ) 5. Modified S-Box テーブル作成 引数 ky : 秘密鍵 ct : 入力される平文/暗号文 dir: 暗号復号の指定 (0 → 暗号化演算, 1 → 復号演算) rslt: 中間値 返り値 void void desa(ky,ct,dir,rslt) unsigned char ky[8]; unsigned char ct[8]; unsigned char dir; unsigned char rslt[8]; { unsigned char rndky[8]; unsigned char i,j; unsigned char kywork[8]; /* temporary work area for key schedule */ /* Mask X generate */ // provisional implement 3.2. Akkar らによる DPA 対策のソフトウェア実装 for(i=0;i<8;i++) mskX[i] = rand() % 0x100; /*-------- Make Modified S-Box --------*/ /* IP(X) -> X1 */ initPerm(mskX, mskX1); /* X1L XOR X1R -> X1LR */ for(i=0;i<4;i++){ mskX1LR[i] = mskX1[i] ^ mskX1[i+4]; } /* inverse P Permuation */ /* invP(X1LR) -> X3*/ mskX3[0] =(((mskX1LR[1]&0x80) >> 4) | ((mskX1LR[2]&0x80) >> 5) | ((mskX1LR[2]&0x02) >> 0) | ((mskX1LR[3]&0x02) >> 1)) & 0x0f; mskX3[1] =(((mskX1LR[1]&0x08) >> 0) | ((mskX1LR[3]&0x10) >> 2) | ((mskX1LR[0]&0x40) >> 5) | ((mskX1LR[2]&0x40) >> 6)) & 0x0f; mskX3[2] =(((mskX1LR[2]&0x01) << 3) | ((mskX1LR[1]&0x01) << 2) | ((mskX1LR[3]&0x04) >> 1) | ((mskX1LR[0]&0x04) >> 2)) & 0x0f; mskX3[3] =(((mskX1LR[3]&0x40) >> 3) | ((mskX1LR[2]&0x10) >> 2) | ((mskX1LR[1]&0x40) >> 5) | ((mskX1LR[0]&0x80) >> 7)) & 0x0f; mskX3[4] =(((mskX1LR[0]&0x01) << 3) | ((mskX1LR[1]&0x04) >> 0) | ((mskX1LR[3]&0x80) >> 6) | ((mskX1LR[0]&0x20) >> 5)) & 0x0f; 51 52 第 3 章 DES のソフトウェア実装 mskX3[5] =(((mskX1LR[0]&0x10) >> 1) | ((mskX1LR[3]&0x08) >> 1) | ((mskX1LR[1]&0x20) >> 4) | ((mskX1LR[2]&0x20) >> 5)) & 0x0f; mskX3[6] =(((mskX1LR[3]&0x01) << 3) | ((mskX1LR[1]&0x10) >> 2) | ((mskX1LR[2]&0x04) >> 1) | ((mskX1LR[0]&0x02) >> 1)) & 0x0f; mskX3[7] =(((mskX1LR[0]&0x08) >> 0) | ((mskX1LR[3]&0x20) >> 3) | ((mskX1LR[1]&0x02) >> 0) | ((mskX1LR[2]&0x08) >> 3)) & 0x0f; /* EP(X1R) -> X2 */ /* 31 1 2 3 4 5 */ mskX2[0] = ((mskX1[7] & 0x1) << 5 ) | ((mskX1[4] & 0xf8) >> 3); for(i = 0; i < 3 ; i++){ mskX2[2*i+1] = ((mskX1[i+4] & 0x1f) << 1) | ((mskX1[i+5] & 0x80 ) >> 7); mskX2[2*(i+1)] = ((mskX1[i+4] & 0x1) << 5) | ((mskX1[i+5] & 0xf8) >> 3); } /* 28 29 30 31 32 1 */ mskX2[7] = (mskX1[7] & 0x1f) << 1 | ((mskX1[4] & 0x80) >> 7); /* Make Modified S-Box */ for(i=0x00;i<0x40;i++){ smbox0[i] = sbox0[i ^ mskX2[0]] ^ mskX3[0]; smbox1[i] = sbox1[i ^ mskX2[1]] ^ mskX3[1]; smbox2[i] = sbox2[i ^ mskX2[2]] ^ mskX3[2]; smbox3[i] = sbox3[i ^ mskX2[3]] ^ mskX3[3]; smbox4[i] = sbox4[i ^ mskX2[4]] ^ mskX3[4]; smbox5[i] = sbox5[i ^ mskX2[5]] ^ mskX3[5]; smbox6[i] = sbox6[i ^ mskX2[6]] ^ mskX3[6]; smbox7[i] = sbox7[i ^ mskX2[7]] ^ mskX3[7]; } 3.2. Akkar らによる DPA 対策のソフトウェア実装 53 /*----- execute DES with Masking Countermeasure -----*/ /* XOR Mask X */ for(i=0;i<8;i++) ct[i] ^= mskX[i]; /* Initial Permuation */ initPerm(ct,rslt); kyschpc1(ky,kywork); /* Key Sc & Ffunction */ j = 0x4; for(i = 0; i < 16; i++){ if(dir){ kyschRt(kywork,sftr[i],dir); /* Key Schedule @ kysch.c */ } else{ kyschRt(kywork,sftl[i],dir); } kyschpc2(kywork,rndky); /* Key Schedule */ ffunca(rndky,&rslt[j],&rslt[j^0x4]); j = j ^ 0x4; } /* XOR maskX1LR */ for(i=0;i<4;i++){ rslt[i] ^= mskX1LR[i]; rslt[i+4] ^= mskX1LR[i]; } /* Final Permutaion */ finPerm(rslt,ct); /* XOR mskX */ for(i=0;i<8;i++) ct[i] ^= mskX[i]; } /* F-function */ 54 第 3 章 DES のソフトウェア実装 Goubin らによる DPA 対策のソフトウェア実装 3.3 本節では、DES [38] に対する DPA (Differential Power Analysis, [33]) 対策として Goubin ら [17] が提案した “Duplication Method” を紹介し、DPA 対策としての Duplication Method の有 効性の評価に用いた実装コードを説明する。 3.3.1 論文紹介 タイトル 著者 学会名 発行年 DES and Differential Power Analysis (The “Duplication” Method) L. Goubin and J. Patarin Cryptographic Hardware and Embedded Systems 1999 – CHES ’99 1999 年 文献 [17] では、DES の DPA (Differential Power Analysis, [33]) 対策の実装方法が述べられてい る (対策は RSA 暗号 [43] にも適用可能であることも主張されている)。文献 [17] によれば、DPA 対策には以下の 3 つの手法が考えられる。 実行時間のランダム化 電力波形の統計処理によっても無効化できないランダムなタイムシフトを 挿入し、同一命令に対する消費電力の平均値の計算を実行不能にする 命令の置き換え carry へのデータ書き込みや array からのデータ読み込みなどの (電力消費が大 きく) 重要な命令を、電力特性 (comsumption signature) の解析が困難なアセンブラ命令に 置き換える アルゴリズムの改良 (DES における S-Box 計算時など) DPA 攻撃の対象となる部分について、実 装攻撃を行ったとしても情報を得られないことが保証できるアルゴリズムを構成する 文献 [17] は “アルゴリズムの改良” について、DES 実行時 (ラウンド間のデータの入出力時 お よび 非線形演算 (S-Box) 計算時) の DPA 攻撃への対策として、DES で用いる変数の多重化 (特 に 2 重化) を提案している。 DES では平文に対して、初期転置 (Initial Permutation) を行い、非線形演算を含む 16 段の処 理を行ったのち、最終転置 (Final Permutation) を行うことで暗号文が計算される。各段で用いら れる非線形演算は、S-Box とよばれる、8 ビットを入力とし 6 ビットを出力する 8 個の非線形な テーブル (S1 , · · · , S8 ) を参照することで実行される。 DES の S-Box 計算時での DPA 攻撃では、例えば S1 (図 3.2) に対して、多数のサンプルにつ いて S1 の計算実行時の消費電力を測定し、次に S1 に関連したラウンド鍵 (6 ビット) を推測し、 各サンプルを 推測したラウンド鍵と入力データから計算される出力の 1 ビット目が “0” になるも のと “1” になるもので分類し、分類されたサンプルの S1 計算時の消費電力の平均値が 全サンプ ルの平均値に比べて特性をもつかどうかで鍵の推測が正しいかどうかを判定する。鍵の推測が正し くない場合には、鍵の推測を再度実行して統計評価を行い、正しいラウンド鍵の一部 (6 ビット) を探索する。この処理を S2 , · · · , S8 についても行い、計 48 ビットのラウンド鍵を求める。その後、 鍵の残り 8 ビットを全数探索により求めることで、秘密鍵の探索が可能となる。 3.3. Goubin らによる DPA 対策のソフトウェア実装 55 同様の攻撃は、S-Box の値が排他的論理和として作用されている各ラウンドの入出力情報に対 しても実行可能である。 · 攻撃者が出力値 v を一意に計算可能 · 入出力値に依存した消費電力が観測可能 (RAM 読み込み/書き込み時に正規の値が現れる) 図 3.2: S-Box (S1 ) DES の S-Box 計算時に DPA 攻撃が可能となるのは、攻撃者が 推測したラウンド鍵に対して S-Box の出力値を計算できること、および、データの入出力時 または S-Box 計算時には消費電力 の大きなデータの書き込みや読み出しが行われて鍵に依存した情報の漏洩が起こりやすいことに よる。文献 [17] では、ラウンド間を流れるデータを 2 重化 (多重化) することと、(2 重化された データのそれぞれを入力とする) 各段の処理における非線形演算の構成とが提案されている。非線 形演算の処理では、図 3.3 に示すように、各 S-Box に対して Si (v) = Sa,i (v1 ) ⊕ Sb,i (v2 ) (ただし v = v1 ⊕ v2 , i = 1, · · · , 8) を満たすような 2 つの S-Box を用意し、正規の入力 v を v = v1 ⊕ v2 を 満たす v1 と v2 にランダムに分割して、それぞれを Sa,i と Sb,i に入力して計算する。このとき、 入力 v1 (および v2 ) はランダムに決定されるため、攻撃者は Sa,i (および Sb,i ) の出力を求めるこ とができず、サンプルの分類が行えないため、DPA 攻撃は困難になると考えられる。さらに、入 力 v1 と v2 は (v = v1 ⊕ v2 の関係はあるが 攻撃で用いるハミング重みなどの点では) 正規の入力 v と独立であり、観測により得られる消費電力値は 正規の入力 v に依存しないため、DPA 攻撃は 困難になると考えられる。 しかし、S1 から S8 に対して、図 3.3 のような Sa,1 , Sa,2 , · · · , Sa,8 をそれぞれランダムに用意 する場合、12 ビット入力 4 ビット出力の S-Box が 合計 16 個必要となる (S-Box の実装には 32 KByte 必要となる)。文献 [17] には、Sa,1 = Sa,2 = · · · = Sa,8 とすることで、用意すべき S-Box を 9 個に削減できることも主張されている (First Variation、S-Box の実装には 18 KByte 必要)。 しかし、削減した場合でも これらの S-Box を用意することは多くのメモリを要するため、スマー トカードなどの小規模な実装には不向きである。文献 [17] では、図 3.3 のように ランダムに分割 された入力 v1 と v2 をそのまま S-Box に入力するのではなく、図 3.4 のように、ランダムに分割 された入力 v1 と v2 を 攻撃者には秘密の (設計者のみが知る) 全単射な写像 φ に対して 6 ビット 56 第 3 章 DES のソフトウェア実装 · 攻撃者は出力値 v1 、v2 を一意には計算不可能 · 正規の入出力値に依存した消費電力の観測が不可能 (RAM 読み込み/書き込み時に正規の値が現れない) 図 3.3: Duplication Method (S1 ) 3.3. Goubin らによる DPA 対策のソフトウェア実装 57 の値 φ(v1 ⊕ v2 ) にまとめ、それぞれの S-Box に入力して計算することも提案されている。これに より、6 ビットを入力として 4 ビットを出力する S-Box を 16 個 (Second Variation、S-Box の実 装には 512 byte 必要)、もしくは Sa,1 = Sa,2 = · · · = Sa,8 とすることで 9 個 (Third Variation、 S-Box の実装には 288 byte 必要) 用意すればよい。そのほか、Sa,1 , · · · , Sa,8 としてテーブル参照 をする代わりに代数的な演算を行うことで 6 ビットを入力として 4 ビットを出力する S-Box を 8 個に削減できることも主張されている (Fourth Variation、S-Box の実装には 256 byte 必要)。今 回は、Third Variation を実装したソフトウェアを評価する。 · 攻撃者は出力値 v1 、v2 を一意には計算不可能 · 正規の入出力値に依存した消費電力の観測が不可能 (RAM 読み込み/書き込み時に正規の値が現れない) 図 3.4: スマートカード向けの Duplication Method (S1 ) φ(v1 ⊕ v2 ) の計算方法 文献 [17] では、攻撃者には秘密な (設計者のみが知る) 関数 φ の φ(v1 ⊕ v2 ) の計算方法につい て、以下に示す 2 通りの方法が紹介されている。 Example 1: A linear bijection v の各ビットを (v1 , v2 , v3 , v4 , v5 , v6 ) とする。このとき、 - φ(v) = (v1 ⊕v2 ⊕v4 , v1 ⊕v2 ⊕v4 ⊕v6 , v2 ⊕v3 ⊕v5 , v1 ⊕v2 ⊕v3 ⊕v5 , v2 ⊕v3 ⊕v4 ⊕v5 , v3 ⊕v4 ⊕v6 ) とし、φ(v1 ⊕ v2 ) = φ(v1 ) ⊕ φ(v2 ) で計算する。 58 第 3 章 DES のソフトウェア実装 Example 2: A quadratic bijection v の各ビットを (v1 , v2 , v3 , v4 , v5 , v6 ) とする。このとき、 - φ(v) = (v2 v5 ⊕ v1 v4 ⊕ v4 ⊕ v6 ⊕ v6 v2 ⊕ v4 v6 ⊕ v2 ⊕ v5 ⊕ v3 ⊕ v4 v3 , v2 v5 ⊕ v5 v1 ⊕ v1 v4 ⊕ v4 ⊕ v6 ⊕ v4 v5 ⊕ v2 ⊕ v3 ⊕ v3 v1 , v2 v5 ⊕ v5 v1 ⊕ v6 v5 ⊕ v1 v4 ⊕ v3 v5 ⊕ v1 ⊕ v4 v6 ⊕ v6 v3 ⊕ v4 v3 ⊕ v3 v1 , v1 v4 ⊕ v2 v3 ⊕ v6 v1 ⊕ v4 v6 ⊕ v5 ⊕ v6 v3 ⊕ v4 v3 , v5 v1 ⊕ v1 v4 ⊕ v6 ⊕ v3 v5 ⊕ v4 v5 ⊕ v1 ⊕ v6 v1 ⊕ v4 v6 ⊕ v3 ⊕ v6 v3 ⊕ v4 v2 , v4 ⊕ v6 ⊕ v3 v5 ⊕ v1 ⊕ v4 v6 ⊕ v6 v3 ) とする。φ(v1 ⊕ v2 ) を計算するために、x = (x1 , x2 , x3 , x4 , x5 , x6 ), y = (y1 , y2 , y3 , y4 , y5 , y6 ) に対 して、次の ψ(x, y) を定義する。 - ψ(x, y) = (x3 y5 ⊕x6 y2 ⊕x6 y3 ⊕x6 y4 ⊕x3 y1 ⊕x6 y1 ⊕x1 y3 ⊕x1 y5 ⊕x5 y2 ⊕x5 y5 ⊕x5 y1 ⊕x6 y6 ⊕ x1 y6 ⊕x1 y2 ⊕x1 y4 ⊕x2 y1 ⊕x2 y2 ⊕x4 y4 ⊕x3 y3 ⊕x3 y6 ⊕x4 y3 ⊕x5 y3 , x4 y5 ⊕x3 y1 ⊕x6 y1 ⊕x2 y5 ⊕ x5 y1 ⊕x6 y6 ⊕x1 y6 ⊕x1 y2 ⊕x2 y1 ⊕x2 y2 ⊕x4 y1 ⊕x4 y4 ⊕x3 y3 , x6 y2 ⊕x6 y3 ⊕x6 y4 ⊕x6 y5 ⊕x3 y1 ⊕ x6 y1 ⊕x2 y5 ⊕x5 y1 ⊕x1 y6 ⊕x1 y1 ⊕x1 y2 ⊕x1 y4 ⊕x2 y1 ⊕x2 y4 ⊕x4 y2 ⊕x2 y6 ⊕x3 y4 ⊕x5 y3 , x3 y1 ⊕ x6 y2 ⊕ x2 y6 ⊕ x5 y3 ⊕ x5 y4 ⊕ x5 y6 ⊕ x6 y3 ⊕ x2 y3 ⊕ x4 y6 ⊕ x6 y5 ⊕ x1 y3 ⊕ x5 y5 ⊕ x2 y4 ⊕ x4 y2 ⊕ x4 y5 ⊕x3 y5 ⊕x4 y3 ⊕x6 y1 ⊕x4 y1 , x3 y1 ⊕x6 y6 ⊕x5 y3 ⊕x5 y6 ⊕x5 y2 ⊕x1 y5 ⊕x1 y1 ⊕x1 y2 ⊕x2 y1 ⊕ x2 y3 ⊕x3 y6 ⊕x6 y5 ⊕x1 y3 ⊕x2 y4 ⊕x3 y3 ⊕x4 y5 ⊕x2 y5 ⊕x6 y1 ⊕x4 y1 ⊕x6 y4 ⊕x3 y2 , x6 y6 ⊕x4 y4 ⊕ x5 y4 ⊕x5 y6 ⊕x6 y3 ⊕x1 y6 ⊕x1 y1 ⊕x1 y2 ⊕x2 y1 ⊕x6 y5 ⊕x2 y4 ⊕x4 y2 ⊕x4 y5 ⊕x3 y5 ⊕x6 y1 ⊕x6 y4 ) このとき、φ(v1 ⊕ v2 ) = ψ(v1 , v1 ) ⊕ ψ(v1 , v2 ) ⊕ ψ(v2 , v1 ) ⊕ ψ(v2 , v2 ) で計算する。 Duplication Method の Second Variation もしくは Third Variation を DES に適用した処理の 流れを図 3.5 に示す。図 3.5 で用いる記号は以下のとおり: • M : 平文 (暗号化の場合、64 ビット)、または 暗号文 (復号の場合、64 ビット) • IP: 初期転置 (Initial Permutation、64 ビット入力 64 ビット出力) • EP: 拡大転置 (Expansive Permutation、32 ビット入力 48 ビット出力) • P: 転置 (Permutation、32 ビット入力 32 ビット出力) • FP: 最終転置 (Final Permutation、64 ビット入力 64 ビット出力) • Li , Ri : (第一系列) 第 i ラウンドへの左入力と右入力 (各 32 ビット) • Li ’, Ri ’: (第一系列) 第 i ラウンドの左出力と右出力 (各 32 ビット) • L’i , R’i : (第二系列) 第 i ラウンドへの左入力と右入力 (各 32 ビット) • L’i ’, R’i ’: (第二系列) 第 i ラウンドの左出力と右出力 (各 32 ビット) • RdKeyi : 第 i ラウンドで用いるラウンド鍵 (48 ビット) • Mask: ラウンド間を流れるデータの二重化のために用いるマスク値 (IP 実行前に乱数により 設定される、64 ビット) • Sa 、Sb : Si (v) = Sa,i (v1 ) ⊕ Sb,i (v2 ) (ただし v = v1 ⊕ v2 , i = 1, · · · , 8) を満たすような S-Box (Second Variation では計 16 個の S-Box、Third Variation では計 9 個の S-Box、各 6 ビッ ト入力 4 ビット出力) • φ: φ(v) 計算部 (各 6 ビットの v1 と v2 を入力として 6 ビットの φ(v1 ⊕ v2 ) を出力) 3.3. Goubin らによる DPA 対策のソフトウェア実装 59 Goubin らのアルゴリズムでは、設計時に φ に対して S-Box を Si (v) = Sa,i (v1 ) ⊕ Sb,i (v2 ) (た だし v = v1 ⊕ v2 , i = 1, · · · , 8) となるように設定する。 平文 M を暗号化するためには、まず マスク Mask を生成して、IP を計算する前に M を Mask でマスクし、M ⊕Mask と Mask の 2 系列について IP を計算する。各ラウンドの F 関数は、2 系 列のそれぞれについて、一方は EP を計算してからラウンド鍵を XOR して (計算結果を v1 とす る)、もう一方は EP のみ計算し (v2 )、上述の方法にて φ(v1 ⊕ v2 ) を計算する。得られた φ(v1 ⊕ v2 ) は Sa と Sb のそれぞれに入力され、出力はそれぞれ 転置した後に 2 つの系列に XOR される。こ こで、各ラウンド (第 i ラウンド) の出力 Li ’, L’i ’, Ri ’, R’i ’ について、Li ’ ⊕ L’i ’ は本来の DES の処理で 第 i ラウンドの左出力として現れる値に一致し、Ri ’ ⊕ R’i ’ は第 i ラウンドの右出力と して現れる値に一致する。 今回は、Third Variation で、φ 関数として Example 1 を実装したソフトウェアを評価する。 3.3.2 コードの説明 以下、Duplication Method の Third Variation の Example 1 の実装コードについて説明する。 S-Box の設定 Si (v) = Sa,i (v1 ) ⊕ Sb,i (v2 ) (ただし v = v1 ⊕ v2 , i = 1, · · · , 8) を満たすような S-Box Sa,i 、Sb,i を設定するにあたり、正規の S-Box を以下で宣言する。 static unsigned char sbox0[64] = {14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13 }; static unsigned char sbox1[64] = {15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9 }; static unsigned char sbox2[64] = { 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 60 第 3 章 DES のソフトウェア実装 M Mask IP IP IP(M1)L IP(M1)R RdKey1 IP(M2)L P P Sa IP(M2)R EP φ Sb EP L2=L1’ R2=R1’ L’2=L’1’ R’2=R’1’ L16’ R16’ L’16’ R’16’ FP FP DESkey(M) 図 3.5: Duplication Method (Second and Third Variations) を利用した DES 3.3. Goubin らによる DPA 対策のソフトウェア実装 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12 }; static unsigned char sbox3[64] = { 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14 }; static unsigned char sbox4[64] = { 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3 }; static unsigned char sbox5[64] = { 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13 }; static unsigned char sbox6[64] = { 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12 }; static unsigned char sbox7[64] = { 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 61 62 第 3 章 DES のソフトウェア実装 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11 }; Example 1 で用いる φ の設定 (S-Box 生成用) Example 1 で用いる φ (3.3.1 節 Example 1 を参照、6 ビット入力 6 ビット出力) を計算する。 このプログラムコードは S-Box の生成にのみ用いる。 引数 dt: S-Box の入力 (6 ビット) 返り値 tmp: φ(dt) (6 ビット) unsigned char phi1(dt) unsigned char dt; { unsigned char tmp; tmp= (( ((dt & 0x20) >> 5)^((dt & 0x10) >> 4)^((dt & 0x4) >> 2) ) << 5)| (( ((dt & 0x20) >> 5)^((dt & 0x10) >> 4)^((dt & 0x4) >> 2)^(dt & 0x1) ) << 4)| (( ((dt & 0x10) >> 4)^((dt & 0x8) >> 3)^((dt & 0x2) >> 1) ) << 3)| (( ((dt & 0x20) >> 5)^((dt & 0x10) >> 4)^((dt & 0x8) >> 3)^(dt & 0x2) >> 1 ) << 2)| (( ((dt & 0x10) >> 4)^((dt & 0x8) >> 3)^((dt & 0x4) >> 2)^(dt & 0x2) >> 1 ) << 1)| (( ((dt & 0x8) >> 3)^((dt & 0x4) >> 2)^(dt & 0x1) ) << 0); return(tmp); } 3.3. Goubin らによる DPA 対策のソフトウェア実装 63 S-Box Sa,i の計算 8 個の 6 ビット入力 4 ビット出力の テーブルを rand 関数により生成された乱数を用いて、以下 のコードにより計算する。このコードは、S-Box Sa の初期値を与えるものとして、設計時に PC 上で一度だけ動作させる。 引数 void 返り値 void #include <stdio.h> #include <stdlib.h> #include <time.h> void main( void ) { unsigned char i; int sboxa0[64]={0}, sboxa1[64]={0}, sboxa2[64]={0}, sboxa3[64]={0}, sboxa4[64]={0}, sboxa5[64]={0}, sboxa6[64]={0}, sboxa7[64]={0}; srand( (unsigned)time( NULL ) ); printf("static unsigned char sboxa0[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); else printf("%d", rand()%16); } printf("};\n\n"); printf("static unsigned char sboxa1[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); 64 第 3 章 DES のソフトウェア実装 else printf("%d", rand()%16); } printf("};\n\n"); printf("static unsigned char sboxa2[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); else printf("%d", rand()%16); } printf("};\n\n"); printf("static unsigned char sboxa3[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); else printf("%d", rand()%16); } printf("};\n\n"); printf("static unsigned char sboxa4[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); else printf("%d", rand()%16); } printf("};\n\n"); printf("static unsigned char sboxa5[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); else printf("%d", rand()%16); } printf("};\n\n"); printf("static unsigned char sboxa6[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); 3.3. Goubin らによる DPA 対策のソフトウェア実装 65 else printf("%d", rand()%16); } printf("};\n\n"); printf("static unsigned char sboxa7[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", rand()%16); else printf("%d", rand()%16); } printf("};\n\n"); } S-Box Sb,i の計算 前に示したコードにより生成された Sa に対し、Si (v) = Sa,i (v1 ) ⊕ Sb,i (v2 ) (ただし v = v1 ⊕ v2 , i = 1, · · · , 8) を満たすような S-Box Sb,i を以下のコードにより計算する (Sa の具体的な値は次節 参照)。このコードは、S-Box Sa 、後に示す φ に対して S-Box Sb の初期値を与えるものとして、 設計時に PC 上で一度だけ動作させる。 引数 void 返り値 void (printf 関数により S-Box を出力) void main( void ) { unsigned char i; int sboxbd0[64]={0}, sboxbd1[64]={0}, sboxbd2[64]={0}, sboxbd3[64]={0}, sboxbd4[64]={0}, sboxbd5[64]={0}, sboxbd6[64]={0}, sboxbd7[64]={0}; int sboxb0[64]={0}, sboxb1[64]={0}, sboxb2[64]={0}, sboxb3[64]={0}, sboxb4[64]={0}, 66 sboxb5[64]={0}, sboxb6[64]={0}, sboxb7[64]={0}; unsigned char tmp1, tmp2; for(i=0;i<64;i++) { tmp2=i; /* Kirikae */ // tmp1=phi1(tmp2); tmp1=phi2(tmp2); tmp2=tmp1; sboxbd0[tmp2]=sbox0[i]; sboxbd1[tmp2]=sbox1[i]; sboxbd2[tmp2]=sbox2[i]; sboxbd3[tmp2]=sbox3[i]; sboxbd4[tmp2]=sbox4[i]; sboxbd5[tmp2]=sbox5[i]; sboxbd6[tmp2]=sbox6[i]; sboxbd7[tmp2]=sbox7[i]; } for(i=0;i<64;i++) { sboxb0[i]=sboxa0[i]^sboxbd0[i]; } for(i=0;i<64;i++) { sboxb1[i]=sboxa1[i]^sboxbd1[i]; } for(i=0;i<64;i++) { sboxb2[i]=sboxa2[i]^sboxbd2[i]; } 第 3 章 DES のソフトウェア実装 3.3. Goubin らによる DPA 対策のソフトウェア実装 for(i=0;i<64;i++) { sboxb3[i]=sboxa3[i]^sboxbd3[i]; } for(i=0;i<64;i++) { sboxb4[i]=sboxa4[i]^sboxbd4[i]; } for(i=0;i<64;i++) { sboxb5[i]=sboxa5[i]^sboxbd5[i]; } for(i=0;i<64;i++) { sboxb6[i]=sboxa6[i]^sboxbd6[i]; } for(i=0;i<64;i++) { sboxb7[i]=sboxa7[i]^sboxbd7[i]; } printf("static unsigned char sboxb0[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb0[i]); else printf("%d", sboxb0[i]); } printf("};\n\n"); printf("static unsigned char sboxb1[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb1[i]); else printf("%d", sboxb1[i]); 67 68 第 3 章 DES のソフトウェア実装 } printf("};\n\n"); printf("static unsigned char sboxb2[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb2[i]); else printf("%d", sboxb2[i]); } printf("};\n\n"); printf("static unsigned char sboxb3[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb3[i]); else printf("%d", sboxb3[i]); } printf("};\n\n"); printf("static unsigned char sboxb4[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb4[i]); else printf("%d", sboxb4[i]); } printf("};\n\n"); printf("static unsigned char sboxb5[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb5[i]); else printf("%d", sboxb5[i]); } printf("};\n\n"); printf("static unsigned char sboxb6[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb6[i]); else printf("%d", sboxb6[i]); 3.3. Goubin らによる DPA 対策のソフトウェア実装 } printf("};\n\n"); printf("static unsigned char sboxb7[64]={"); for(i= 0;i<64;i++ ) { if(i!=63) printf("%d,", sboxb7[i]); else printf("%d", sboxb7[i]); } printf("};\n\n"); } Third Variation - Example 1 で用いる S-Box 本評価で用いる Sa 、Sb を以下のように宣言する。 /* Sa-box */ static unsigned char sboxa[64] = { 11,1,15,7,4,13,3,5,0,8,9,8,6,8,4,9,11, 14,12,2,4,0,1,15,7,10,1,7,1,0,12,13, 13,7,6,2,3,5,14,13,0,5,12,14,5,15,0, 15,2,8,8,12,4,6,2,5,12,7,3,1,2,3,7,5 }; /* Sb-boxes */ static unsigned char sboxb0[64] = { 5,14,15,11,8,14,8,11,2,0,6,2,1,14,0,11, 9,14,7,1,14,11,9,8,5,11,1,2,13,8,2,2,4, 1,1,3,10,10,0,11,3,8,8,2,1,2,5,5,8,13, 0,1,0,0,7,2,12,14,2,12,9,2,4,12 }; static unsigned char sboxb1[64] = { 4,10,10,10,12,4,2,2,13,3,12,11,12,10, 5,15,9,13,6,9,4,6,11,13,6,14,4,12,0,5, 3,0,11,7,2,12,12,8,2,3,7,12,15,6,2,7,9, 3,5,4,12,4,4,2,0,3,3,11,13,11,1,13,14,5 }; 69 70 第 3 章 DES のソフトウェア実装 static unsigned char sboxb2[64] = { 1,2,13,0,5,8,3,1,3,1,2,2,14,4,4,15,15, 3,2,13,15,15,12,8,7,2,4,3,4,1,15,10,1, 15,6,8,10,4,13,15,14,9,10,4,12,9,11,13, 15,3,13,5,9,9,12,9,11,5,5,9,13,13,6,1 }; static unsigned char sboxb3[64] = { 12,7,11,2,5,8,14,12,7,8,6,10,9,0,9,9,4, 3,0,12,8,4,1,7,1,7,6,14,3,9,10,5,12,0, 13,1,2,6,5,15,5,11,6,1,0,15,10,11,0,3, 2,2,14,13,10,11,8,4,5,13,11,0,6,9 }; static unsigned char sboxb4[64] = { 9,11,1,8,13,11,11,4,7,3,6,11,15,11,8, 14,12,0,6,10,14,15,13,2,0,8,5,1,14,6, 8,6,14,7,4,3,13,14,7,8,0,6,13,6,9,2,9, 10,7,5,14,8,0,11,2,0,2,11,1,11,9,2,15,5 }; static unsigned char sboxb5[64] = { 7,3,10,3,4,12,0,10,12,13,14,5,13,11,5, 0,7,4,2,1,2,14,3,5,11,5,1,12,12,8,11,2, 13,6,2,7,6,1,9,5,1,8,5,13,7,6,11,9,15, 6,0,6,13,14,9,15,10,3,13,3,4,12,7,2 }; static unsigned char sboxb6[64] = { 15,1,9,0,11,13,13,14,7,5,3,13,7,1,15,6, 2,3,0,10,10,5,12,8,15,0,3,14,4,6,8,13, 15,4,13,8,7,3,1,14,0,9,13,5,2,14,15,1, 14,13,5,14,5,5,11,13,14,1,7,13,10,13,4,15 }; 3.3. Goubin らによる DPA 対策のソフトウェア実装 71 static unsigned char sboxb7[64] = { 6,14,3,9,2,2,1,1,14,9,9,11,1,11,6,15,8, 15,7,11,7,12,15,2,0,2,4,8,7,2,6,2,13,2, 11,6,9,7,14,11,9,14,8,15,13,8,14,3,11, 13,9,4,3,10,7,8,4,13,8,8,9,7,13,5 }; Example 1 で用いる φ の設定 Example 1 で用いる φ (3.3.1 節 Example 1 を参照、6 ビット入力 6 ット出力) を計算する。 S-Box の設定に用いたコード (S-Box 生成用) は 6 ビットの数を写すのみで良かったが、評価用の コードでは 48 ビット (8 個の 6 ビットの数) を写す必要があるため配列を用いている点が異なる。 引数 dt: S-Box の入力 (6 ビット) 返り値 void (入力 v に対して 6 ビットの φ(v) を計算) void phi1(dt) unsigned char dt[8]; { unsigned char i; for(i=0;i<8;i++) { dt[i]=(( ((dt[i] & 0x20) >> 5)^ ((dt[i] & 0x10) >> 4)^ ((dt[i] & 0x04) >> 2) ) << 5)| (( ((dt[i] & 0x20) >> 5)^ ((dt[i] & 0x10) >> 4)^ ((dt[i] & 0x04) >> 2)^ ((dt[i] & 0x01) >> 0) ) << 4)| (( ((dt[i] & 0x10) >> 4)^ ((dt[i] & 0x08) >> 3)^ ((dt[i] & 0x02) >> 1) ) << 3)| (( ((dt[i] & 0x20) >> 5)^ ((dt[i] & 0x10) >> 4)^ 72 第 3 章 DES のソフトウェア実装 ((dt[i] & 0x08) >> 3)^ ((dt[i] & 0x02) >> 1) ) << 2)| (( ((dt[i] & 0x10) >> 4)^ ((dt[i] & 0x08) >> 3)^ ((dt[i] & 0x04) >> 2)^ ((dt[i] & 0x02) >> 1) ) << 1)| (( ((dt[i] & 0x08) >> 3)^ ((dt[i] & 0x04) >> 2)^ ((dt[i] & 0x01) >> 0) ) << 0); } } Example 1 で用いる F 関数 Example 1 で用いる F 関数 を以下で計算する。 引数 rndky: ラウンド鍵 (合計 48 ビット) dt: 各ラウンドの (第一系列) 右入出力 (32 ビット) dtd: 各ラウンドの (第二系列) 右入出力 (32 ビット) rdt: 各ラウンドの (第一系列) 左入出力 (32 ビット) rdtd: 各ラウンドの (第二系列) 左入出力 (32 ビット) 返り値 void (各ラウンドの右左データの入れ替え直前までを計算) void ffunc(rndky,dt,dtd,rdt,rdtd) const unsigned char rndky[8]; unsigned char dt[4]; unsigned char dtd[4]; unsigned char rdt[4]; unsigned char rdtd[4]; { unsigned char dttmpa[8]={0,}, dttmp[8]={0,}; unsigned char dttmpad[8]={0,}, dttmpd[8]={0,}; unsigned char i; 3.3. Goubin らによる DPA 対策のソフトウェア実装 /* Expansion Permuation */ /* Expansion of masked input */ /* 32 1 2 3 4 5 */ dttmpa[0] = ((dt[3] & 0x1) << 5 ) | ((dt[0] & 0xf8) >> 3); dttmpad[0] = ((dtd[3] & 0x1) << 5 ) | ((dtd[0] & 0xf8) >> 3); for(i = 0; i < 3 ; i++) { dttmpa[2*i+1] = ((dt[i] & 0x1f) << 1) | ((dt[i+1] & 0x80 ) >> 7); dttmpa[2*(i+1)] = ((dt[i] & 0x1) << 5) | ((dt[i+1] & 0xf8) >> 3); dttmpad[2*i+1] = ((dtd[i] & 0x1f) << 1) | ((dtd[i+1] & 0x80 ) >> 7); dttmpad[2*(i+1)] = ((dtd[i] & 0x1) << 5) | ((dtd[i+1] & 0xf8) >> 3); } /* 28 29 30 31 32 1 */ dttmpa[7] = (dt[3] & 0x1f) << 1 | ((dt[0] & 0x80) >> 7); dttmpad[7] = (dtd[3] & 0x1f) << 1 | ((dtd[0] & 0x80) >> 7); /* End of Expansion */ /* Add round keys */ for(i=0;i<8;i++) { dttmpa[i] = dttmpa[i]^rndky[i]; } /* Example 1 input-output of phi1 */ phi1(dttmpa); phi1(dttmpad); /* phi(v)=phi(v1)^phi(v2) */ for(i=0;i<8;i++) { dttmp[i]=dttmpa[i]^dttmpad[i]; } /* S1-box (phi(input)) */ dttmpa[0] = sboxa0[0x3f & dttmp[0]]; dttmpa[1] = sboxa1[0x3f & dttmp[1]]; dttmpa[2] = sboxa2[0x3f & dttmp[2]]; dttmpa[3] = sboxa3[0x3f & dttmp[3]]; 73 74 第 3 章 DES のソフトウェア実装 dttmpa[4] = sboxa4[0x3f & dttmp[4]]; dttmpa[5] = sboxa5[0x3f & dttmp[5]]; dttmpa[6] = sboxa6[0x3f & dttmp[6]]; dttmpa[7] = sboxa7[0x3f & dttmp[7]]; /* S2-box (phi(input))*/ dttmpad[0] = sboxb0[0x3f & dttmp[0]]; dttmpad[1] = sboxb1[0x3f & dttmp[1]]; dttmpad[2] = sboxb2[0x3f & dttmp[2]]; dttmpad[3] = sboxb3[0x3f & dttmp[3]]; dttmpad[4] = sboxb4[0x3f & dttmp[4]]; dttmpad[5] = sboxb5[0x3f & dttmp[5]]; dttmpad[6] = sboxb6[0x3f & dttmp[6]]; dttmpad[7] = sboxb7[0x3f & dttmp[7]]; /* P Permuation P(phi(v1)^P(phi(v2)) */ /* rdt ^ S1 */ rdt[0] = (((dttmpa[3] & 0x1) << 7) | ((dttmpa[1] & 0x2) << 5) | ((dttmpa[4] & 0x1) << 5) | ((dttmpa[5] & 0x8) << 1) | ((dttmpa[7] & 0x8)) | ((dttmpa[2] & 0x1) << 2) | ((dttmpa[6] & 0x1) << 1) | ((dttmpa[4] & 0x8) >> 3)) ^ rdt[0]; rdt[1] = (((dttmpa[0] & 0x8) << 4) | ((dttmpa[3] & 0x2) << 5) | ((dttmpa[5] & 0x2) << 4) | ((dttmpa[6] & 0x4) << 2) | ((dttmpa[1] & 0x8)) | ((dttmpa[4] & 0x4)) | ((dttmpa[7] & 0x2)) | ((dttmpa[2] & 0x4) >> 2)) ^ rdt[1]; rdt[2] = (((dttmpa[0] & 0x4) << 5) | ((dttmpa[1] & 0x1) << 6) | ((dttmpa[5] & 0x1) << 5) | ((dttmpa[3] & 0x4) << 2) | ((dttmpa[7] & 0x1) << 3) | 3.3. Goubin らによる DPA 対策のソフトウェア実装 ((dttmpa[6] & 0x2) << 1) | ((dttmpa[0] & 0x2)) | ((dttmpa[2] & 0x8) >> 3)) ^ rdt[2]; rdt[3] = (((dttmpa[4] & 0x2) << 6) | ((dttmpa[3] & 0x8) << 3) | ((dttmpa[7] & 0x4) << 3) | ((dttmpa[1] & 0x4) << 2) | ((dttmpa[5] & 0x4) << 1) | ((dttmpa[2] & 0x2) << 1) | ((dttmpa[0] & 0x1) << 1) | ((dttmpa[6] & 0x8) >> 3))^ rdt[3]; /* rdtd ^ S2*/ rdtd[0] = (((dttmpad[3] & 0x1) << 7) | ((dttmpad[1] & 0x2) << 5) | ((dttmpad[4] & 0x1) << 5) | ((dttmpad[5] & 0x8) << 1) | ((dttmpad[7] & 0x8)) | ((dttmpad[2] & 0x1) << 2) | ((dttmpad[6] & 0x1) << 1) | ((dttmpad[4] & 0x8) >> 3)) ^ rdtd[0]; rdtd[1] = (((dttmpad[0] & 0x8) << 4) | ((dttmpad[3] & 0x2) << 5) | ((dttmpad[5] & 0x2) << 4) | ((dttmpad[6] & 0x4) << 2) | ((dttmpad[1] & 0x8)) | ((dttmpad[4] & 0x4)) | ((dttmpad[7] & 0x2)) | ((dttmpad[2] & 0x4) >> 2)) ^ rdtd[1]; rdtd[2] = (((dttmpad[0] & 0x4) << 5) | ((dttmpad[1] & 0x1) << 6) | ((dttmpad[5] & 0x1) << 5) | ((dttmpad[3] & 0x4) << 2) | ((dttmpad[7] & 0x1) << 3) | ((dttmpad[6] & 0x2) << 1) | ((dttmpad[0] & 0x2)) | ((dttmpad[2] & 0x8) >> 3)) ^ rdtd[2]; 75 76 第 3 章 DES のソフトウェア実装 rdtd[3] = (((dttmpad[4] & 0x2) << 6) | ((dttmpad[3] & 0x8) << 3) | ((dttmpad[7] & 0x4) << 3) | ((dttmpad[1] & 0x4) << 2) | ((dttmpad[5] & 0x4) << 1) | ((dttmpad[2] & 0x2) << 1) | ((dttmpad[0] & 0x1) << 1) | ((dttmpad[6] & 0x8) >> 3))^ rdtd[3]; } 鍵スケジュール 鍵スケジュールで用いる関数 initkeyh (パリティビットの切捨て), kyschpc1 (PC-1), kyschpc2 (PC-2), kyschRt (鍵スケジュールのローテート部) は未対策版の実装と同一のものを用いるため説 明は省略する。 DES アルゴリズム DES で用いられる初期転置 (initPerm)、最終転置 (finPerm)、DES 本体 (des) のコードは以下 のとおり (initPerm, finPerm は未対策版の実装と同一のものを用いるため説明は省略する)。 des (DES 本体) 引数 ky: 鍵 (合計 56 ビット) ct: 入力された平文または暗号文 (合計 64 ビット) dir: 暗号復号の指定 (0 → 暗号化演算, 1 → 復号演算) rdm: rdm= 1 → マスク値をランダムに設定, rdm= 0 → マスク値として固定値を利用 rslt: 中間値 (64 ビット) 返り値 void (平文 (暗号文) に対して 暗号文 (復号文) を計算) void des(ky,ct,dir,rdm,rslt) unsigned char ky[8]; unsigned char ct[8]; unsigned char dir; unsigned char rdm; 3.3. Goubin らによる DPA 対策のソフトウェア実装 unsigned char rslt[8]; { unsigned char rndky[8]; unsigned char i,j; unsigned char kywork[8]; /* temporary work area for key schedule */ unsigned char ctd[8]; /* 2nd input -Mask- */ unsigned char rsltd[8]; /* 2nd output */ srand( (unsigned)time( NULL ) ); /* Set 8-bit values -Mask- masking the input ct before IP */ if(rdm==0) { for(i=0;i<8;i++) { ctd[i]=0xAA; } } else if(rdm==1) { for(i=0;i<8;i++) { ctd[i]=rand(); } } for(i=0;i<8;i++) { ct[i]=ct[i]^ctd[i]; } /* Initial Permuation */ initPerm(ct,rslt); initPerm(ctd,rsltd); kyschpc1(ky,kywork); j = 0x4; for(i = 0; i < 16; i++) 77 78 第 3 章 DES のソフトウェア実装 { if(dir) { kyschRt(kywork,sftr[i],dir); /* Key Schedule */ } else { kyschRt(kywork,sftl[i],dir); /* Key Schedule */ } kyschpc2(kywork,rndky); ffunc(rndky,&rslt[j],&rsltd[j],&rslt[j^0x4],&rsltd[j^0x4]); j = j ^ 0x4; } finPerm(rslt,ct); finPerm(rsltd,ctd); for(i=0;i<8;i++) { ct[i]=ct[i]^ctd[i]; } } 79 第4章 サイドチャネル攻撃追試験 本請負事業では、サイドチャネル攻撃の評価環境を構築することを目的の一つとしている。構築し た評価環境を用いてサイドチャネル攻撃の追試験を行った。サイドチャネル攻撃の追試験では、対 象を差分電力攻撃 (Differential Power Analysis, DPA) とした。4.1 節で DPA の特徴と原理を説 明する。 さらに、論文で紹介されている DPA 対策を 2 つ選び、C 言語によるソフトウェア実装を用い て、対策案の有効性を検証した。このように、サイドチャネル攻撃の追試験、および対策案の実装 と評価を行うことで、DPA に対する知見を深めることも評価環境の構築と共に本請負事業の目的 の一つである。DPA 対策としては、3.2 節と 3.3 節に述べた Akkar ら [3] と Goubin ら [17] の対 策案をソフトウェア実装し、その有効性を実機を用いて評価した。 4.1 DPA (Differential Power Analysis) の概要 DPA [33] は、IC チップなどに実装されている暗号アルゴリズム実行中の消費電力解析を用いた 攻撃で、消費電力波形内に含まれる秘密鍵に関係する変化量を多くの消費電力波形を用いて統計的 に増幅させ、その情報から秘密鍵を見出す攻撃である。 この攻撃の特徴としては、以下があげられる。 • 実験機材として大掛かりなものは必要なく、比較的簡単な機材で行うことができる。 • 攻撃に必要な情報は、暗号実行中の消費電力波形と平文 (もしくは暗号文のどちらか一方) だ けでよい。 • ターゲットモジュールを破壊せずに通常の動作を繰り返し行うだけなので、攻撃の痕跡が残 らない。 • 鍵を部分的に分けて攻撃を行うため、鍵の全数探索に比べて圧倒的に計算量が少ない。 具体的に DPA を行う手順の概要を説明する。 1. 複数の入力 (平文) に対する DES 実行時の消費電力波形をそれぞれ測定する。 2. 各入力時の DES 実行中の中間データ (ここでは参照値とよぶ) を平文もしくは暗号文から計 算する。参照値は秘密鍵の一部 (部分鍵) に依存するので、全ての部分鍵候補に対して計算 する (通常 64 通り、参照値の詳細については後述する)。 3. 各部分鍵候補について、各入力時の消費電力波形を、その入力時の参照値を基にグループ分け する。各グループの消費電力波形を平均化し、グループ間の平均消費電力波形の差分を取る。 80 第4章 サイドチャネル攻撃追試験 4. 消費電力波形内には参照値に関する情報も含まれている。参照値を用いて求めた鍵別の平均 消費電力波形差分のうち、どれか一つは大きな差分を持つ、すなわち参照値と消費電力波形 の間に強い相関を持つものがある。これが内部で使用されている部分鍵であり、それ以外の 部分鍵の場合は参照値と消費電力間に相関がないため、平均消費電力波形差分は小さくなる。 5. 以上より、内部で使われている鍵の一部が判別できる。鍵の残りビットも同様にして求めら れる。 ここで、暗号文を用いた場合の参照値の求め方を図 4.1 を用いて説明する。 IP 1段目F関数 15段目F関数 16段目F関数 L15 F16 CIPHER Inv IP 図 4.1: DES 全体図と DPA ターゲットポイント 図 4.1 は DES アルゴリズムの概要を示している。この図から分かるように、攻撃者は DES 16 段目の F 関数 の入力を暗号文から入手可能である。 図 4.2 は DES の 16 段目の処理内容を示している。DES の 16 段目で使われる秘密鍵は、鍵ス ケジューリングにより 64 ビット のうちの 48 ビット が選択される。この秘密鍵と F 関数の入力 (32 ビット) を拡大転置した演算結果 (48 ビット) とが排他的論理和 (XOR) される。さらに、この 4.1. DPA (Differential Power Analysis) の概要 81 排他的論理和の結果を非線形変換テーブル (S-Box) に入力し、32 ビットの出力を得て、最後に転 置を行い F 関数 の出力となる。この F 関数の中には、8 種類の S-Box があり、それぞれの S-Box は、6 ビットを入力とし、4 ビットを出力とする仕様となっている。 一つの S-Box の入出力に着目したとき、S-Box の出力に直接影響を与える鍵は 6 ビットである (これを部分鍵と呼ぶ)。まず最初に、6 ビットの部分鍵を (000000)2 と仮定する。次に、DES の出 力結果から F 関数の入力を計算し、F 関数の入力の一部 (6 ビット) と XOR し、その結果を S-Box に入力することで S-Box 出力ビットのデータ系列を計算する。 以上に述べたことを F 関数内にある 8 種類の S-Box すべてについて行う。 同様にして部分鍵 (111111)2 の場合の S-Box 出力ビットのデータ系列まで計算する。このよう にして、部分鍵を全て試して求めたデータ系列を参照値としている。今回は参照値として 2 箇所の データを用いて、2 通りの評価を行う。1 つは上記の説明の通りの 16 段目 S-Box の出力ビットで ある (F16 と略す、図 4.1 の青いライン)。もう 1 つは 15 段目 の F 関数に入力され、16 段目の F 関数の出力 32 ビットと XOR される 32 ビットデータである (L15 と略す、図 4.1 の緑のライン)。 L15 (32bit) 部分鍵 (6bit) x 8 L1-1 L1-0 L1-2 L1-3 F16 (32bit) S1-3 S1 S1-1 拡大転置 転置 S1-0 S2 F関数入力 (32bit) S1-2 S8 Sbox入力(48bit) 暗号文 (32bit) 16段目F関数 図 4.2: F 関数 実機の動作時の電圧の変動波形と上記のようにして求めた参照値を用いて DPA を行う。下式は 処理を表したもので、消費電力波形を参照値が “1” のときと “0” のときでグルーピングし、それ ぞれ平均化した消費電力波形の差分を求めている。 82 第4章 ∆D[j] = サイドチャネル攻撃追試験 Σm (1 − D(Ci , KS ))Ti [j] Σm i=1 D(Ci , KS )Ti [j] − i=1m m Σi=1 D(Ci , KS ) Σi=1 (1 − D(Ci , KS )) Ci : 暗号文 (1 ≤ i ≤ m), m : 取得波形数, KS : 部分鍵候補 (0 ≤ S ≤ 63), D(Ci .KS ) ∈ {0, 1} : 部分鍵候補 KS , 暗号文 Ci での参照値, T : 消費電力波形, j : サンプリングポイント 実際に使われている部分鍵の参照値では、∆D[j] の値があるタイミング (参照値のデータが使わ れたタイミング) で大きくなり、その他のタイミングでは 0 に近い値を示す。それ以外の鍵 (残り 63 通りの部分鍵) の参照値では、どのタイミングでも 0 に近い値を示すことになり、実際に使わ れている鍵が判別できる。 DPA 未対策版 DES の実装に対する DPA 攻撃 4.2 評価基板の動作確認および、測定環境、評価環境の機能を確認する目的で、DPA への対策を施 していない DES の実装に対して DPA の追試験を行った。 4.2.1 測定条件 評価に際して、下記の条件で消費電力波形を取り込んだ。 オシロスコープ 水平軸 (掃引時間) 0.5 msec/DIV オシロスコープ 垂直軸 (垂直軸感度) 200 mV/DIV サンプリングレート 500M samples/sec1 供給電圧 5V 波形捕捉範囲 L15: DES 15 段目開始の 1 msec 後から 1 msec 間、F16: DES 15 段目開始の 4 msec 後から 1 msec 間。 DPA 未対策版の演算処理をエミュレータで確認し、攻撃のポイントとなる演算を行ってい る処理時間を導き出した。 1 波形のデータ数 L15/F16 ともに 500,000 ポイント 測定波形数 3,000 平文は、C クロスコンパイラのライブラリ関数 (rand 関数) で生成される乱数を使用するように なっている。 1 消費電力波形の変動に急峻な部分が多く、500M samples/sec 以下のサンプリングレートでは同一入力に対しても同 じ波形を取得することができなかったため、500M samples/sec で取得した。詳細は付録 C を参照。 4.2. DPA 未対策版 DES の実装に対する DPA 攻撃 4.2.2 83 SPA (Simple Power Analysis) 実機で F 関数の繰り返しが電圧の変動から確認できるかどうかを調べるために、DES 実行時の 電圧の変動を 1 波形分取得し、SPA (Simple Power Analysis) を行った。 実際に攻撃の対象となる DES の 15 段目開始から 5 msec 間の電圧の変動を図 4.3 に示す。こ の図から、DES の繰り返し処理が確認できる。この部分には、DPA の際に参照値にする L15 と F16 部の処理が含まれている。 15段 16段 図 4.3: DES 15 段開始時から 5 msec 間の消費電力波形 (未対策版) 4.2.3 DPA (Differential Power Analysis) 評価基板上において異なる平文を用いて、DES を 3,000 回実行し、動作時の電圧の変動を取得 した。この取得した 3,000 個の波形を用いて DPA を行った。 DPA の結果は、図 4.4 (参照値として L15 を利用)、図 4.5 (参照値として F16 を利用) に示す。 これらの 図 4.4、図 4.5 は、DPA の原理で示された ∆D[j] に相当する DPA トレース であり、一 つの部分鍵候補 (64 通り) の DPA トレースを重ねて表示した結果である。 図中の赤色の DPA トレースは、実際に使われている部分鍵の参照値を用いたときの DPA ト レースである。4.1 節で簡単に原理を説明したように、実際に使われている部分鍵の参照値を用い た差分値は、他の鍵の参照値を用いたときに比べて大きくなることが確認できる。 攻撃ポイントとしては、L15 (緑のライン) のデータは 15 段 の処理の始めのほうで主に使われ るので、その周辺を攻撃した。 図 4.5 は、参照値を F16 にしたときの DPA の結果である。この図を見てわかるように、L15 の ときと同様に実際に使われている鍵の参照値を用いたときの DPA トレースは他の鍵のときに比べ て、大きな差分値を持っていることが分かる。 攻撃ポイントとしては、F16 (青のライン) のデータは 16 段目 の演算の最後のほうで使用され るので、その周辺の時間を攻撃した。 参照値 L15 の 32 ビット、参照値 F16 の 32 ビット、それぞれにおいて差分値 (DPA トレース のピーク) が一番大きかった鍵を 表 4.1 と表 4.2 に列挙する。 84 第4章 サイドチャネル攻撃追試験 図 4.4: 参照値を L15 としたときの DPA 結果 (未対策版) 図 4.5: 参照値を F16 としたときの DPA 結果 (未対策版) 表 4.1: 参照値を L15 としたときの DPA 結果一覧 (未対策版) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 14h 14h 14h 14h 0fh 0fh 0fh 0fh 1eh 1eh 1eh 1eh 22h 22h 22h 22h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 08h 08h 08h 08h 32h 32h 32h 32h 32h 32h 32h 32h 2fh 2hf 2fh 2fh 4.2. DPA 未対策版 DES の実装に対する DPA 攻撃 85 表 4.1 は各 S-Box (8 個) の出力 (4 ビット) の各々について、実際に使われている部分鍵と差分 値が一番大きかった鍵 (推定鍵) をまとめたものである。橙色で表した箇所が、実際に使われてい る部分鍵と推定鍵とが一致したポート (S-Box とその出力ビット) であり、参照値を L15 としたと きは 32 ビット 全てで一致した。L15 に関しては 32 ビット すべてにおいて、参照値と電圧の変動 との相関が高いことがわかる。 表 4.2: 参照値を F16 としたときの DPA 結果一覧 (未対策版) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 14h 14h 14h 14h 0fh 0fh 0fh 0fh 1eh 1eh 1eh 1fh 22h 22h 13h 13h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 08h 08h 13h 08h 32h 0fh 1dh 32h 32h 32h 32h 12h 2fh 0fh 2fh 2fh 表 4.2 は、F16 を参照値として用いたときの各 S-Box (8 個) の出力 (4 ビット) の各々について、 実際に使われている部分鍵と差分値が一番大きかった鍵 (推定鍵) をまとめたものである。参照値 を F16 とした場合、F 関数の出力 32 ビット中 25 ビットで、参照値と電圧の変動に高い相関があ ることがわかった。 本実験では、L15 を参照値として攻撃した場合のほうが、F16 を参照値した場合に比べると解 析の結果は良い。F16 を用いた場合でも、16 段目で使用した部分鍵 (計 48 ビット) の推定は可能 である。 4.2.4 結論 DPA 対策を施していない DES のソフトウェア実装チップに対して、DPA を行った。L15、F16 の 2 種類の参照値を用いた DPA により、16 段の拡大鍵 48 ビット が全て求められた。残り 8 ビッ トに関しては全数探索をするか、上記の結果から 15 段目の参照値、すなわち L14 と F15 を求め、 同様に DPA をすることで求められる。DES の鍵 56 ビット (パリティ分 8 ビットは除く) は鍵ス ケジューリングにより、15 段、16 段の拡大鍵の中に全て含まれるため、15 段までの DPA で全て の鍵が求まることになる。 86 第4章 サイドチャネル攻撃追試験 DPA 対策版 DES の実装への攻撃 (Akkar らの対策) 4.3 本節では、3.2 節で述べた Akkar らの DPA 対策を施した実装チップに対する解析を行う。 4.3.1 測定条件 評価に際して、下記の条件で消費電力波形を取り込んだ。 オシロスコープ 水平軸 (掃引時間) 0.5 msec/DIV オシロスコープ 垂直軸 (垂直軸感度) 200 mV/DIV サンプリングレート 500M samples/sec 供給電圧 5V 波形捕捉範囲 L15: DES 15 段目開始の 1 msec 後から 1 msec 間、F16: DES 15 段目開始の 5 msec 後から 1 msec 間。 Akkar らの対策版の演算処理をエミュレータで確認し、攻撃のポイントとなる演算を行って いる処理時間を導き出した。 1 波形のデータ数 L15/F16 ともに 500,000 ポイント 測定波形数 3,000 4.3.2 SPA 取得した波形に関して DES 15 段開始時から 10 msec 分を図 4.6 に示す。これから DES の繰り 返し処理が確認できる。この部分には、DPA の際に参照値にする L15 と F16 部の処理が含まれ ている。 4.3.3 DPA 今回は対策の有効性を確認するため、最初に対策の中で使われる乱数を固定し、対策を無効にし た実装で攻撃可能なタイミングを確認し、対策を有効にした実装にその位置で攻撃を行った。乱数 を固定して対策を無効にし、 1,000 個の波形を用いて DPA を行った結果を 図 4.7 に、対策を有 効にして 3,000 個の波形を用いて DPA を行った結果を図 4.8 に示す。DPA の原理より、DPA に 使用する波形の数を増やすと、DPA トレースの差分値が大きくなり鍵の判別がより容易になるた め、対策有効時の DPA では対策無効時に比べ、3 倍の数の波形を使用した。 図中の赤いトレースが実際に使われている鍵の参照値を用いたときの DPA トレースである。他 の鍵のものより大きい差分値を持つことが分かる。同じタイミングで対策を有効化した場合は、使 用した波形数が 3 倍であるにもかかわらず、図 4.8 のようにどの鍵も大きな差分値を持たない。つ まり使用している鍵の判別は不可能である。 4.3. DPA 対策版 DES の実装への攻撃 (Akkar らの対策) 図 4.6: DES 15 段開始時から 10 msec 間の電圧変動波形 (Akkar らの対策) 図 4.7: 参照値を L15 としたときの DPA 結果 (Akkar らの対策無効時、使用波形数 1,000) 87 88 第4章 サイドチャネル攻撃追試験 図 4.8: 参照値を L15 としたときの DPA 結果 (Akkar らの対策有効時、使用波形数 3,000) 図 4.9: 参照値を F16 としたときの DPA 結果 (Akkar らの対策無効時、使用波形数 1,000) 図 4.10: 参照値を F16 としたときの DPA 結果 (Akkar らの対策有効時、使用波形数 3,000) 4.3. DPA 対策版 DES の実装への攻撃 (Akkar らの対策) 89 参照値 F16 を用いた場合も L15 の場合とほぼ同様の結果で、対策を無効化して 1,000 個の電力 波形で DPA を行ったところ、図 4.9 のように実際に使われている鍵の参照値を用いたときの DPA トレースのみが大きな差分値を持ち、他の鍵ではもたない。対策を有効にすると、使用する波形数 を 3 倍にしても図 4.10 のように特定の鍵が大きな差分値を持つことはなかった。 鍵の特定 4.3.4 参照値 L15 の 32 ビット、参照値 F16 の 32 ビット、それぞれにおいて差分値が一番大きかった 鍵を表 4.3 と 表 4.4 に列挙する。 表 4.3: 参照値を L15 としたときの DPA 結果一覧 (Akkar らの対策) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 29h 26h 2bh 3dh 1ah 0ah 11h 36h 3fh 15h 2bh 3dh 1bh 09h 32h 23h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 23h 2bh 2eh 02h 3dh 1eh 00h 19h 1fh 10h 0eh 3bh 00h 27h 3ch 28h Akkar ら の対策で使用される乱数を固定することで対策を無効化した場合の実装では、L15 の 全ての参照値ビットで実際に使われている鍵のトレースが一番大きい差分値を持つ。しかし対策 を有効にした場合には、参照値 L15 を用いた DPA ではどのビットでも鍵を見出すことはできな かった。 参照値 F16 を用いた場合も L15 の場合とほぼ同様の結果で、対策を無効化した場合はほぼ全て のビットで鍵が導出できるが、対策を有効にすると表 4.4 のような結果となり、鍵の判別は不可能 であった。ポート番号 6-3 だけ、実際に使われている鍵と一番大きな差分を持つ鍵とが一致した が、これは偶然であると思われる。それは、対策を無効化した場合は 図 4.9 のように実際に使わ れている鍵とその他の鍵の間に大きな差があったが、表 4.4 のポート番号 6-3 では 図 4.10 のよう にその他の鍵との差がほとんどなく、偶然候補として残ったと考えることができる。 4.3.5 結論 Akkar ら の DPA 対策を施した DES のソフトウェア実装チップに対して、DPA を行った。対 策で使われる乱数を固定し、対策を無効化した実装で攻撃できることを確認し、対策を有効にした 90 第4章 サイドチャネル攻撃追試験 表 4.4: 参照値を F16 としたときの DPA 結果一覧 (Akkar らの対策) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 3ah 21h 07h 16h 31h 27h 25h 01h 3dh 36h 13h 3ah 3fh 34h 1bh 10h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 25h 35h 13h 14h 3ch 3ch 2eh 32h 23h 23h 2dh 05h 14h 18h 05h 38h 実装では、同じタイミングで攻撃しても攻撃が成功しないことを確認した。参照値 L15 と F16 の どちらで攻撃しても 1 ビット の鍵も導出できなかった。 DPA 対策版 DES の実装への攻撃 (Goubin らの対策) 4.4 文献 [17] では、DPA 対策として複数のバリエーションを提案している。今回の追試験では、提 案されている DPA 対策の中で、使用する S-Box の数が少なく、設計者のみが知る秘密の関数 φ の 構成が容易であることから比較的弱いと考えられるバリエーションの実装に対して攻撃を行った。 4.4.1 測定条件 評価に際して、下記の条件で消費電力波形を取り込んだ。 オシロスコープ 水平軸 (掃引時間) 0.5 msec/DIV オシロスコープ 垂直軸 (垂直軸感度) 200 mV/DIV サンプリングレート 500M samples/sec 供給電圧 5V 波形捕捉範囲 L15: DES 15 段目開始の 1 msec 後から 1 msec 間、F16: DES 15 段目開始の 16 msec 後から 1 msec 間。 Goubin らの対策版の演算処理をエミュレータで確認し、攻撃のポイントとなる演算を行っ ている処理時間を導き出した。 4.4. DPA 対策版 DES の実装への攻撃 (Goubin らの対策) 91 1 波形のデータ数 L15/F16 ともに 500,000 ポイント 測定波形数 3,000 4.4.2 SPA 取得した波形に関して DES 15 段目開始から 20 msec 分を図 4.11 に示す。ここから 15 段、16 段 の DES の繰り返し処理が確認できる。この部分には、DPA の際に参照値にする L15 と F16 部の処理が含まれている。 図 4.3 と比べると 3 倍くらい処理時間が長いことが分かる。 4.4.3 DPA Goubin らの対策では S-Box を 2 つに分けて演算を行っているため、未対策版 DES と比較して 攻撃のポイントは明確ではない。Goubin らの対策ではその性質上、Akkar らの対策のように乱数 を固定するだけでは対策を無効化することはできないため、エミュレータで DES の処理を追うこ とで攻撃ポイントを確認し、そのタイミングで攻撃を行った。 L15 を参照値にし 3,000 波形を用いて DPA を行った結果を図 4.12、F16 を参照値にし 3,000 波形を用いて DPA を行った結果を 図 4.13 に示す。 Akkar らの対策と同様に、参照値として L15 を用いた場合も F16 を用いた場合も、他の鍵に比 べて特に大きな差分値を持つ鍵は見られなかった。 4.4.4 鍵の特定 参照値 L15 の 32 ビット、参照値 F16 の 32 ビット、それぞれにおいて差分値が一番大きかった 鍵を 表 4.5 と 表 4.6 に列挙する。 Akkar らの対策と同様に、参照値として L15 を用いた場合も F16 を用いた場合も鍵を導出する ことはできなかった。表 4.5 で ポート番号 4-3 だけ、実際に使われている鍵と差分が一番大きい 鍵とが一致しているが、これも Akkar らの対策の場合と同様の理由により偶然であると思われる。 4.4.5 結論 Goubin らの DPA 対策を施した DES のソフトウェア実装チップに対して、DPA を行った。エ ミュレータで攻撃ポイントを特定し、3,000 波形を用いて DPA を行ったが、攻撃は成功しないこ とを確認した。参照値 L15 と F16 のどちらで攻撃しても 1 ビットの鍵も導出できなかった。 92 第4章 サイドチャネル攻撃追試験 15段 15段 16段 16段 16段 図 4.11: DES 15 段開始時から 20 msec 間の電圧変動波形 4.4. DPA 対策版 DES の実装への攻撃 (Goubin らの対策) 93 図 4.12: 参照値を L15 としたときの DPA 結果 (Goubin らの対策有効時、使用波形数 3,000) 図 4.13: 参照値を F16 としたときの DPA 結果 (Goubin らの対策有効時、使用波形数 3,000) 表 4.5: 参照値を L15 としたときの DPA 結果一覧 (Goubin らの対策) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 1ch 3fh 03h 0bh 1dh 37h 27h 0dh 02h 0dh 15h 35h 05h 17h 08h 22h S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 0eh 18h 09h 1dh 2dh 2dh 38h 1eh 3bh 05h 23h 24h 29h 3ah 21h 31h 94 第4章 サイドチャネル攻撃追試験 表 4.6: 参照値を F16 としたときの DPA 結果一覧 (Goubin らの対策) S-Box 部分鍵 S-Box 1 14h S-Box 2 0fh S-Box 3 1eh S-Box 4 22h ポート番号 1-0 1-1 1-2 1-3 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 4-0 4-1 4-2 4-3 推定鍵 22h 2ah 10h 30h 18h 00h 30h 05h 25h 07h 13h 06h 30h 33h 1ch 1fh S-Box 部分鍵 S-Box 5 08h S-Box 6 32h S-Box 7 32h S-Box 8 2fh ポート番号 5-0 5-1 5-2 5-3 6-0 6-1 6-2 6-3 7-0 7-1 7-2 7-3 8-0 8-1 8-2 8-3 推定鍵 10h 3eh 0dh 24h 1bh 1bh 10h 2ch 34h 1ch 07h 03h 30h 11h 07h 07h 95 第5章 5.1 国際標準規格案の調査 ISO 標準化動向 はじめに ISO/IEC JTC1 は、ISO (International Organization for Standardization, [23]) と IEC (International Electrotechnical Commission, [20]) が共同で、情報処理分野の標準化を進めるた めに設立した機関 JTC1 (Joint Technical Committee for information technology, [29]) である。 JTC1 では、特定の技術を標準化する際、担当のプロジェクトを起こし、エディタがドキュメント や投票をとりまとめる。通常、以下のステップのように、順次ドキュメントを更新する形で進めら れ、プロジェクトの開始から標準制定まで 3 年が目安とされている。 表 5.1: ISO/IEC JTC1 における標準化の過程 NP New work item Proposal WD Working Draft CD Committee Draft FCD Final Committee Draft FDIS Final Draft International Standard IS International Standard JTC1 は下部組織に SC (SubCommittee) を持ち、SC 27 [24] ではセキュリティ技術を担当して いる。SC 27 では親委員会の下に表 5.2 に示す 3 個の WG (Working Group) が設けられられてい る。具体的な技術的課題の検討は WG で行い、親委員会では JTC1 内外の他の標準との整合性と いった、より大局的な議論が行われる。 SC 27/WG 1 表 5.2: SC27「セキュリティ技術」の WG セキュリティ要求条件, セキュリティサービスとそのガイドライン SC 27/WG 2 セキュリティ技術とメカニズム SC 27/WG 3 セキュリティ評価基準 暗号モジュールに関する標準化は、2002 年 9 月 に米国とカナダの共同提案によって開始され、 IS 番号 “19790” とプロジェクト番号 1.27.40 が割り当てられた。IS 番号は標準として登録された ときの番号であり、暗号モジュールが標準となった場合、ISO/IEC 19790 となることを意味する。 19790 の主担当は WG3 で、暗号技術に関しては WG2 も協力する体制となっている。プロジェク ト番号 1.27.40 は、JTC1 SC27 の 40 番目 の標準化プロジェクトであることを意味する。 96 第 5 章 国際標準規格案の調査 表 5.3 に暗号モジュール標準化に関するこれまでの経緯を示す。 年月 表 5.3: JTC1 SC27 における暗号モジュール標準化活動 項目 2002/09 ANSI(米) と SCC(カナダ) が共同で、暗号モジュール標準化の NP 2002/10 国際会合 (ワルシャワ) で米国が趣旨説明 2003/03 NP 投票で賛成多数。番号 19790(プロジェクト番号 1.27.40) として承認 2003/05 国際会合 (ケベック) で 3 名のエディタを選出 2003/05 1st WD の配布 2003/09 1st WD に対するコメント集計 2003/10 国際会合 (パリ) でエディタが交代。1st WD について議論 2003/12 1st WD へのコメントを反映した 2nd WD を配布 2002/10 ワルシャワ会合: プロジェクトの提案 2002 年 10 月 の国際会合 (ワルシャワ) におい て、直前の同 9 月に ANSI [5] (米) と SCC [44] (カナダ) が共同で提案した暗号モジュール標準化 の NP (New work item Proposal) に関する議論が行われた。 趣旨は、米国連邦規格 FIPS 140-2 [13] (暗号モジュールの評価) に修正を加えたものを標準化し たいというものであった。FIPS 140-2 は、暗号方式自体の安全性ではなく、暗号方式を組み込ん だセキュリティ製品の実装に関する安全性や動作の確認を行うものである。実際の評価は、米国お よびカナダ政府が認定した研究機関による CMVP (Cryptographic Module Varidation Program, [11]) と称する評価基準に従って行われる。 FIPS 140-2 をそのまま標準化した場合、暗号方式としては、米国連邦政府が採用したものだけ が利用可能となる問題点が懸念された。しかし、米国は、近い将来に IS 化されるプロジェクト 18033 「暗号アルゴリズム」で採用される暗号方式を含む SC27 で標準化された暗号方式全部を利 用可能にすることを表明し、柔軟な姿勢を示した。また、担当する WG について議論され、内容が ISO/IEC 15408 (Common Criteria; CC [9]) に近いことや WG2 のメンバが概して暗号モジュー ルに詳しくないことなどから、WG3 で担当することになった。 2003 年 3 月に行われた各国 NB (National Body) による NP 投票で賛成多数。プロジェクト番 号 19790 が割り当てられた。 2003/5 ケベック会合: 方針の変更とエディタ選出 2003 年 5 月のケベック会合では、エディタ の Annabelle Lee (米) と2名のコエディタ Mike Chawrun (カナダ), J. Pierre Quemard (仏) が 選出された。Lee が代表して、標準化を次の 2 つのフェーズで行う趣旨の説明を行った。フェーズ 1 で、FIPS 140-2 に最低限の修正を行って IS 化を行い、フェーズ 2 で、ISO/IEC 15408 (CC) の 評価方式に合わせるように修正する。 この方針では、フェーズ 1 と フェーズ 2 の違いから生じる以下の事態が懸念される。 ・フェーズ 1 標準で一旦評価された暗号モジュールが、フェーズ 2 標準で評価しなおしになる ・フェーズ 1 では米国政府が採用した暗号方式しか利用できない ケベック会合後の 5 月中に 1st WD が配布され、同 9 月の WD 投票で賛成多数で承認された。 5.1. ISO 標準化動向 97 2003/10 パリ会合: エディタの変更 2003 年 10 月の国際会合 (パリ) では、エディタが、Annabelle Lee から、FIPS 140-1/-2 作成に関わった元 IBM の Randall Easter に交代した。コエディタの Mike Chawrun (カナダ) と J. P. Quemard (仏) は変わらず。 Easter は、1st WD に対する各国コメントを読み上げ、採用・不採用を説明した。どの暗号方式 を入れるかについては、次回までに WG2 のメンバが決めることになった。WG3 委員が Random bit gereration (18031) を急ぐように要求したので、次のドラフト 2nd WD に盛り込む模様。18031 のエディタの Chawrun がこちらのコエディタを兼任しているという事情が背景にある。 Easter はこの会議中には 2nd WD をまとめきれず、配布は同 12 月にずれ込んだ。2nd WD に 対するコメントの回答期限は 2004 年 4 月上旬で、次回シンガポール会合 (4 月下旬) で議論される 予定。 98 5.2 第 5 章 国際標準規格案の調査 FIPS140-2 要求要件の調査と考察 現在 IS (International Standard) 化に向けて米国とカナダが FIPS 140-2 を基にしたドラフトを 提案している。本請負事業では最終年度において、耐タンパー性に関する国際標準規格に貢献する ことを目標としている。そこで、本年度は基本的な情報収集という観点から、現在の米国における 暗号製品の要求要件である FIPS 140-2 において、サイドチャネル攻撃に対する耐タンパー性に関 する要求項目について調査を行った。 サイドチャネル攻撃に関する要求要件と考察 現在公開されている文章において、サイドチャネ ル攻撃についての要求要件は、特に記載はなく、FIPS140-2 4.Security Requirement による と、“サイドチャネル攻撃に対してテストを行う規定はないが、各ベンダー側では対策を施してい るのであれば、どのように攻撃を抑制しているかについて説明すること” が求められている。つま り、評価項目には含まれていないが、なんらかの対策を施していることを示す必要がある。 FIPS 140-2 に記載されているセキュリティ要求要件において、具体的に定量的な数値を明記し、 その基準を満たすようにと書かれているのは、認証メカニズムに関する記述のみである。ここにお いては、実際に数値を示して、その範囲内であることが求められている。 それ以外の要求要件については、具体的な数値は示されていない。例えば、FIPS 140-2 4.5 Physical Security において、“堅く不透明な封止材” という記述があるが、その不透明度や堅さ の基準などは記載されていない。 FIPS 140-2 を見たところ、ほとんどのセキュリティ要求要件には、定量的な数値目標は掲げら 得ておらず、FIPS 140-2 だけで認定基準を推定することはに困難である。数値的目標を明示する 場合には、その評価測定環境について明確に規定しておく必要があり、そのドキュメント化には多 大な労力がかかるものと推定され、あえてここに踏み込んでいないのではないかと推測される。 2004 年 3 月に開催された “「耐タンパー性」に関する標準化調査研究開発セミナー” (主催:(財) 日本規格協会 情報技術標準化研究センター (INSTAC)) において、CMVP の運営体制について、 テスト機関 CygnaCom の R. Tincati 氏は、NIST とテスト機関では定期的に会議を設けて情報 交換を行うと共に、テスト機関の評価能力の審査も行っていることを示唆した。テスト機関の能 力評価において、公開はしていないが実験評価設備に関する評価項目があり、NIST は評価測定環 境についてなんらかの基準を持っていることが考えられる。現在は、その評価環境において FIPS 140-2 に記載されている要求要件を満たしているかテストしていると考えられる。 現在テスト機関の評価環境については公開されていないため、必要となる評価環境の仕様につい て、本請負事業におけるサイドチャネル攻撃の追試験を通して、標準的な評価環境として妥当な仕 様を導き出し、その成果を公開することで標準化に貢献できる可能性がある。 99 第6章 非破壊攻撃に関する技術動向の調査 本章では、Cryptographic Hardware and Embedded Systems 2003 (CHES 2003)、2004 年 暗号 と情報セキュリティシンポジウム (SCIS 2004) で発表された最新の論文の中から代表的なものを 調査・報告する。 CHES 2003 からは 以下の 3 件を報告する。 • “Multi-channel Attacks”, D. Agrawal, J. R. Rao, and P. Rohatgi • “Security Evaluation of Asynchronous Circuit”, J. J. A. Fournier, S. Moore, H. Li, R. Mullins, and G. Taylor • “Attacking Unbalanced RSA-CRT Using SPA”, P.-A. Fouque, G. Martinet, and G. Poupard SCIS 2004 からは 以下の 2 件を報告する。 • “ランダム化初期点を用いた電力解析対策方法”, 伊藤 孝一、伊豆 哲也、武仲 正彦 • “キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析”, 大熊 建司 6.1 Multi-channel Attacks タイトル Multi-channel Attacks [1] 著者 学会名 D. Agrawal, J. R. Rao, and P. Rohatgi Cryptographic Hardware and Embedded Systems 2003 – CHES 2003 発行年 2003 年 概要 CMOS デバイスの消費電力や EM (electromagnetic) のような複数のサイドチャネル信号を 同時に利用して、より高精度な攻撃を行うマルチチャネル攻撃を提案した論文。ターゲットデバイ スの特性をあらかじめテンプレート化しておき、その情報を用いて攻撃を行うテンプレート攻撃 [10] をマルチチャネルの場合へ拡張し、最尤法を適用した攻撃モデルを提案している。SN 比を改 善して攻撃の成功確率を高めるためのマルチチャネルの選択指針や、消費電力/EM を単独で用い るシングルチャネル攻撃よりも両者を同時に用いたマルチチャネル攻撃の方がエラー確率が減少す ることを示した実験結果が報告されている。また、テンプレートを用いない従来の DPA スタイル 攻撃を拡張したマルチチャネル攻撃モデルも提案されており、この場合も消費電力と EM を用い たマルチチャネル攻撃は、それぞれのシングルチャネル攻撃よりも DPA に要する最小サンプル数 が少なくなるという結果が得られている。 100 6.1.1 第 6 章 非破壊攻撃に関する技術動向の調査 マルチチャネル攻撃 (テンプレート攻撃スタイル) CMOS サイドチャネル-リーケイジと攻撃モデル 消費電力や EM などのサイドチャネル信号は デバイス内の電流フローに起因し、CMOS デバイスの電流フローは理想的にはクロックサイクル 間のアクティブ回路の状態に依存していると考えられる。実際には非活性部分からもリーケイジが あるが、それらは回路の活性部分と無視できるほど小さい相関を持つ小さなガウシアンノイズで近 似することができる。よって、活性部分からのリーケイジで CMOS デバイスのサイドチャネル信 号をモデル化することは妥当と考えられる。 このようなコンセプトに基づき、2つのフェーズからなる攻撃モデル (テンプレート攻撃) を提 案している。第1フェーズはプロファイリングフェーズで、攻撃者はターゲットデバイスと同等な テストデバイスを用いて仮説に対する信号の特性 (確率分布) を求める。第2フェーズは仮説検定 フェーズで、攻撃者はターゲットデバイスに対して測定を行い、プロファイリングフェーズで得た 情報を利用して正しい仮説の選択を行う。 攻撃の概要 攻撃者は L 種類の統計的に独立なサイドチャネル信号 Oi , i = 1, . . . , L を収集可能で あるとする (ベクトル O は時系列データ {O[j]} を表す)。K 個の仮説 Hk , k = 1, . . . , K (K 個の 鍵候補に相当する) があると仮定し、仮説 H の下で信号 O が観測される確率を p(O|H) とすると、 k = argmax L 1≤k≤K i=1 p(Oi |Hk ) (6.1) を満たす k を最尤法1 を用いて求めることができる。この Hk が正しい仮説 (当り鍵) に相当する。 論文では p(O|H) の近似として、平均 µH 、共分散行列 ΣH で与えられるガウシアン分布 1 1 exp − (O − µH )T Σ−1 p(O|H) = (O − µ ) , O ∈ Rn (6.2) H H 2 (2π)n |ΣH | を仮定する。このガウシアン仮定は非常に多くのデバイスで成り立つと考えられる。 仮説が 2 個のケース (バイナリ仮説) では、最尤法の誤差確率は次式によって与えられる。 ∆ 1 √ P = erfc (6.3) 2 2 2 ここで、erfc(x) は相補誤差関数、∆2 = (µH1 − µH0 )T Σ−1 N (µH1 − µH0 )、ΣN はノイズの共分散行 列であり、ΣH0 = ΣH1 = ΣN を仮定している。∆2 は SN 比のよい指標を与える。すなわち上式は SN 比が良いほど最尤法の誤差確率が小さくなることを意味しており、∆2 を大きくすることが攻 撃のストラテジーとなる。 マルチチャネルの選び方 攻撃者が限られたリソースしか持たず、収集できるサイドチャネル信号 が M 種までという場合を想定する。この場合、攻撃者は最尤法の誤差確率を最小にする M チャ ネルを選択する必要があるが、この作業は単純ではない。論文では M = 2 の場合について、バイ ナリ仮説の下でのサイドチャネル選択指針を以下のように示している。 1 母数 θ で規定される母集団から標本値 x が得られる確率を p(x |θ) とすると、n 個の独立な標本値 x , . . . , x が得 n 1 i i n p(xi |θ) で与えられる。このとき、x1 , . . . , xn を固定値とみなして L を最大にす られる確率は L(x1 , . . . , xn |θ) = i=1 る母数 θ (正規分布の場合は平均値と分散) を求める推定方法が最尤法と呼ばれている。 6.1. Multi-channel Attacks 101 表 6.1: シングルチャネル-テンプレート攻撃とマルチチャネル-テンプレート攻撃のエラー確率の 比較 Correct Hyp Error(Pwr) Error(EM) Error(Pwr+EM) H0 9.5% 15.1% 2.8% H1 20.1% 15.2% 6.6% 2つのサイドチャネル信号 O1 , O2 (ある時刻での信号) が、仮説 H0 に対して Ok = Nk 、仮説 H1 に対して Ok = Sk + Nk である場合を考える。ノイズ N = (N1 , N2 )T はゼロ平均と共分散行列 1 ρ ΣN = ρ 1 を持ち、O1 , O2 の SN 比がそれぞれ S12 , S22 であると仮定すると ∆2 = (S1 − S2 )2 (S1 + S2 )2 + 2(1 + ρ) 2(1 − ρ) (6.4) を得る。 上式に対して、まず2つの信号 O1 , O2 とも高い SN 比で測定される場合を考える。この場合 S1 = S2 であり、∆2 = 2S12 /(1 + ρ) が得られる。両方の信号の起源が同じような周波数のキャリア にあるため、ノイズは高い相関係数 ρ を持つことが予想され、これは ∆2 を小さくさせる方向に働 く。一方、質の良いキャリアと質の悪いキャリアから O1 , O2 がそれぞれ測定された場合は、ノイ ズ相関は小さいかゼロであることが期待されるため、∆2 = S12 (1 + S22 /S12 ) が得られる。これは、 S22 /S12 > (1 − ρ)/(1 + ρ) である限り、高い SN 比と低い SN 比の信号の組み合わせが優れた攻撃指 針であることを示している。以上のような考察から、他のチャネルと強く相関しているチャネルは リジェクトし、たとえ低い SN 比であっても相関が小さいチャネルを選択する方針を提案している。 シングル/マルチチャネル-テンプレート攻撃の比較 消費電力と EM をそれぞれ単独で用いたシ ングルチャネル-テンプレート攻撃と、2つを同時に用いたマルチチャネル-テンプレート攻撃で、 バイナリ仮説への分類誤差を比較した結果が表 6.1 に示されている。マルチチャネル-テンプレー ト攻撃の方がエラー確率が減少することが見てとれる。 シングル/マルチチャネル DPA 攻撃 ここまでは攻撃者がターゲットデバイスと同等なテストデ バイスにアクセスでき、テストデバイスを用いてプロファイリングを実行できることを仮定してい た (テンプレート攻撃)。多くの状況では攻撃者はテストデバイスにアクセスすることは容易では ないため、デバイスの特性や実装に関する事前知識を用いない DPA スタイル攻撃を実行すること になる。シングルチャネル DPA 攻撃を最適化した新しいマルチチャネル DPA 攻撃が以下のよう に提案されている。 シングルチャネル DPA の改良 従来の DPA 攻撃では、攻撃者はシングルチャネルから N サンプ ルの信号 Oi , i = 1, . . . , N を測定する (信号は N についての平均がゼロになるようにノーマライズ 102 第 6 章 非破壊攻撃に関する技術動向の調査 表 6.2: DPA の従来の判定基準と改良された判定基準による必要サンプル数の比較 Sbox Hyp Min Smpls (Mean-diff) Min Smpls (Max-Likl) S1,B3 640 350 S2,B3 630 210 S7,B3 110 40 S8,B3 130 90 されているとする)。次に各々の仮説 H に対して、DPA のターゲットビットの 0/1 に応じて信号を 2つのグループに振り分けることを行う。グルーピングされたそれぞれの平均値を µH,0 [j], µH,1 [j] として、 MH [j] = (µH,0 [j] − µH,1 [j]) 2 (6.5) というメトリックを導入すると、ある時刻 j0 において MHi [j0 ] ≥ MH [j] が全ての H と j に対し て成り立つ Hi が正しい仮説として選択される。 論文ではこのメトリックを改良した 2 MHi [j] = (µHi [j] − E[µHi [j]]) (µHi [j] − E[µHv [j]]) − V [µHv [j]] V [µHi [j]] V [µHi [j]] − ln V [µHv [j]] 2 (6.6) を導入している。ここで Hv は、ターゲットビットの 0/1 に対して N サンプルが全くランダムに 分類されるような仮説を表す。上記のメトリックを評価するには E[µH [j]], V [µH [j]] を求めること が必要であり、この問題には最尤法が適用可能である。ただし最尤法では非線型方程式を扱う必要 があるため、論文では近似値 E[µH [j]] V [µH [j]] = µH [j] 2 2 σH,0 [j] σH,1 [j] = + N0 N1 (6.7) (6.8) を導入し、これを式 (6.6) に代入して MHi [j] = (µHi [j] − µHv [j]) 2 σH v,0 [j] N0 + 2 σH v,1 N1 2 [j] ⎛ 2 σH i,0 [j] − ln ⎝ σ2 N0 [j] Hv,0 N0 + + 2 σH i,1 [j] N1 2 σH [j] ⎞ ⎠ (6.9) v,1 N1 2 2 を得ている。ここで、σH,0 [j], σH,1 [j] はリファレンスビット 0/1 で分類されたそれぞれの信号の分 散を表す。従来の DPA 攻撃のメトリックである式 (6.5) が平均値のみを考慮しているのに対し、式 (6.9) は分散も考慮したものになっている。式 (6.5) と式 (6.9) による DPA を DES に対して実行 し、それぞれで必要となるサンプル数を比較した結果が表 6.2 である。式 (6.9) の方が最小サンプ ル数が減少する結果が示されている。 6.2. Security Evaluation of Asynchronous Circuit 103 表 6.3: シングルチャネル DPA とマルチチャネル DPA での必要サンプル数の比較 Sbox Hyp Min Smpls (Pwr+EM) Min Smpls (Pwr) Min Smpls (EM) S1,B1 150 170 640 S1,B2 60 (>1000) 340 S1,B3 110 350 160 S2,B2 30 50 230 S2,B3 120 210 340 S4,B0 60 200 340 S6,B1 180 180 190 S7,B3 30 40 520 S8,B3 60 90 140 マルチチャネル DPA への拡張 マルチチャネル DPA 攻撃はシングルチャネル DPA 攻撃の一般 化であり、攻撃者が収集する信号 Oi , i = 1, . . . , N は、L 種類のサイドチャネル信号 O1i , . . . , OL i T によって Oi = [O1i , . . . , OL i ] のように構成される。論文ではマルチチャネル DPA に対する繁雑 な数式は省略されており、実験結果のみが示されている。表 6.3 から、消費電力/EM を単独で利 用した場合より、両者を同時に利用したマルチチャネルの方が DPA に要するサンプル数が減少傾 向にあることが分かる。 今後の課題 6.1.2 DPA/DEMA では、正しい仮説に対してピークがいくつかの時刻で生じることが知られている。 これは消費電力や EM をマルチチャネルとして用いた場合に、それらのピークが一致しないこと を意味している。また、テンプレート攻撃と通常の DPA 攻撃とにギャップがあることも表してい る。著者らはこのギャップを埋めるアイディアとして、収集した信号だけから意味のあるピークの 特性を評価し、最尤法を適用して正しい仮説を特定するというアプローチを試みることから始めて いる。 6.2 Security Evaluation of Asynchronous Circuit タイトル 著者 学会名 発行年 概要 Security Evaluation of Asynchronous Circuit [15] J. J. A. Fournier, S. Moore, H. Li, R. Mullins, and G. Taylor Cryptographic Hardware and Embedded Systems 2003 – CHES 2003 2003 年 2 線式非同期プロセッサ Springbank [35] を開発し、その耐タンパー性の評価をおこない、 また、設計時の解析の重要性を指摘している。 104 第 6 章 非破壊攻撃に関する技術動向の調査 2 線式非同期プロセッサの開発 6.2.1 2 線式の符号方式を用いることで、耐タンパー性を向上することができる [35, 6]。 以下の符号方式を用いることで、データのハミング重みを一定にできる、故障状態を伝播させる ことができる という特長が得られる。 A1 A0 meaning 0 0 clear 0 1 1 0 logical 0 logical 1 1 1 alarm また、非同期 (クロックが不要) という特長から、動作タイミングがランダム化されるという利 点とクロックラインに対するグリッチ攻撃が無効であるという利点がもたらされる。 開発されたチップには、同じプロセッサアーキテクチャをもつ、5 つの異なる実装方式が搭載さ れている。1 つは、単純な同期型プロセッサ (S-XAP) で、これと対極にあるのがセキュアな 2 線 式非同期プロセッサ (SC-XAP) である。サイドチャネル解析に対しては、この両者を比較するこ とで、2 線式非同期プロセッサの特長を評価している。評価に関しては、実際の暗号処理に対する 解析ではなく、以下に示される XOR 動作時の解析で評価を行っている。 1. データのメモリアドレスをロードする 2. 第一オペランド (Op1) をレジスタにロードする 3. Op1 と第二オペランド (Op2) の XOR を実行する 4. 結果 (Res) をメモリにストアする サイドチャネル解析 6.2.2 サイドチャネル解析として電力解析 (DPA, [33]) と電磁波解析 (DEMA, [16, 42]) を行っている。 DPA S-XAP と SC-XAP の XOR 動作に対する DPA 解析を行った. SC-XAP の電力洩れは、S-XAP より 22dB も低いことが確認された。しかし、2 線式の配線の 不均衡により、DPA に対して完全に安全であるというレベルまでは達していない。これは、汎用 の配置配線ツールを用いたためで、市販の配置配線ルールは、信号配線をバランスさせる機能は 持っていない。 対策としては、完全なカスタム設計を行う、専用の配置配線ツールを開発すること、そして、入 力容量が均一となるスタンダードセルを開発することである。 DEMA S-XAP と SC-XAP の XOR 動作に対する EMA 解析を行った。 プロセッサを覆う程度のコイルを用いて電磁波を測定し、DPA と同様の統計処理を行った。そ の結果、S-XAP と SC-XAP の両方に対して、データに依存したピークを得ることができた。 6.2. Security Evaluation of Asynchronous Circuit 105 DPA では、22dB の削減が確認されたが、DEMA では、それほどの削減を観測できなかった。 これは、EMA では、局所的な洩れ信号を捕捉することができるため、2 線間の不均衡がより顕著 に影響したためである。また、EMA では、クロックがノイズ源となるが、非同期動作であるため、 クロックが無く、解析が容易になった。 解決策として、上位層でのメタル層、幾何学的に規則的な構造を構成する、などがある。 6.2.3 Fault Injection Analysis [7] 故障を印加する解析を SC-XAP に対してのみ行った。故障源として、Optical-Probing と電源 グリッチ [4] を用いた。 Optical Probing Optical-Probing は、LSI 上の特定の領域に強い光エネルギーをあたえ、トラ ンジスタのチャネル領域をイオン化し、導通状態にさせることで故障を起こさせるものである。本 論文では、光源としてレーザーを用いた。 Dual-rail アーキテクチャでは、2 線式の符号化で故障を検出することが可能であると考えられ ていた。しかし、実装上の問題で、ALU とレジスタに関して脆弱であることが確認された。 ALU の脆弱性に関しては、設計段階での譲歩のために、誤った結果を生成するという故障と結 果が 0x0001 となってしまう故障が発生し、かつ、故障検出ができないというものである。 レジスタに関しては、その値を 1 にセットするという故障を引き起こすことができる。これは、 フリップフロップが信号伝播のようにアラーム状態をもたず、0 か 1 の状態しかとり得ないためで ある。 これらの対策としては、ALU に関しては、エラー状態が伝播する回路構成を用いることと、レ ジスタに関しては、状態数を増やしてエラー状態もとり得るような回路構成を用いることである。 また、スタンダードセル内に光タンパーセンサを用いるという方法でさらにセキュリティを改善で きる。このようなセンサは、製造時のプラズマによる損傷を検出するセンサとして用いられている アンテナダイオードを利用することで達成できる。 Power Glitch Attacks [8, 7] SC-XAP では、クロックラインが無いので、電源ライン (Vcc) に対するグリッチ攻撃を行った。短い時間間隔のグリッチに対しては耐性を持っているが、長い時 間間隔では、故障することを観測した。プロセッサの動作 (データのロードなど) に同期して電源 を切り、数十ナノ秒後に回復させることで XOR 動作のオペランドを破壊することに成功した。 6.2.4 Design-Time Security Analysis Springbank チップは、要求仕様、設計、評価という典型的な手順で開発された。要求仕様の段 階で、セキュリティ基準を作ったが、設計段階でその確認を怠っていた。また、いくつかの側面に 対して見落としがあった。これらの背景により、設計段階のセキュリティ評価技術 (Design-Time Security Analysis) の研究を始めた。 106 第 6 章 非破壊攻撃に関する技術動向の調査 Simulating Side-Channel Information Leakage 市販のゲートレベルの電力計算ツール (Primepower, [19]) を用いて電力シミュレーションを行った。このシミュレーションでは、メモリ に対する電力モデルが欠けているが、実験で得られた結果と同様に、XOR 動作での電力の差を観 測することができた。電磁界放射に関しては、その予測が困難であるが、電力シミュレーション は、DPA や DEMA に対する良い近似を与える。 Design-Time Analysis of Fault Tolerance 故障を引き起こす物理現象をモデル化できるか もしれない。そして、一つのトランジスタの故障から複数のトランジスタの故障まで、攻撃シナリ オの広い範囲をモデル化できる。 故障の原因によらず、結果としてデータが変わる。したがって、データを変える攻撃を検知す ることが目標であり、シミュレーションレベルで回路内の攻撃に弱い部分を特定し、再構成を行っ た。小さなモジュールでは、従来の故障シミュレーションによって、故障発生時の動作を網羅する ことができる。より大きなシステムに対しては、小さなモジュールでの結果を用いて抽象的なレベ ルで推論することができる。 6.3 Attacking Unbalanced RSA-CRT Using SPA タイトル Attacking Unbalanced RSA-CRT Using SPA [14] 著者 P.-A. Fouque, G. Martinet, and G. Poupard Cryptographic Hardware and Embedded Systems 2003 – CHES 2003 2003 年 学会名 発行年 概要 中国剰余定理を利用した RSA 署名の実装 (RSA-CRT) に対する SPA 攻撃手法の拡張を検 討している。PKC 2001 にて Novak が示した RSA-CRT に対する SPA 攻撃は、Garner アルゴリ ズムを用いて CRT の結合計算を行う実装に対して、選択文書攻撃によって法 N の素因数分解を 可能とする。ただし、最近の RSA 署名ではランダムなパディング手法が利用されるため、Novak の攻撃は実際には適用できない場合が多い。本論文では、ランダムパディングを利用した RSA 署 名でも SPA 攻撃とラティスを利用した解析手法により法 N を素因数分解する攻撃手法を考案し ている。ただし、本論文の攻撃では法 N の素因数である p, q のサイズにわずかな差 (10 ビット程 度) を必要とする。 6.3.1 前提 攻撃対象となる RSA-CRT の実装は次のとおりである。ただし、RSA の法を N (= p · q)、秘密 指数を dp , dq 、u = q −1 mod p とする。パラメータの条件として p > q を仮定。 1. メッセージ M を PKCS#1 によりエンコードし m ∈ ZN を生成。 2. sp = mdp mod p を計算。 3. sq = mdq mod q を計算。 6.3. Attacking Unbalanced RSA-CRT Using SPA 107 4. t = sp − sq を計算。 5. t < 0 ならば、t ← t + p 6. S = sq + ((t · u) mod p) · q を計算。 Novak が提案した SPA による素因数分解手法は次の手順である [40]。ただし、Novak の攻撃対 象は上記の RSA-CRT において step1 のメッセージのエンコード処理はなく、攻撃者は直接 m を 指定して攻撃対象に入力できるものとする。RSA-CRT の step5 において、t ← t + p の処理が行 われるような S に対して diff(S) = 1、そうでないとき diff(S) = 0 として関数 diff() を定義する。 1. 乱数 x ∈ ZN を生成し、m = xe mod N を計算。 2. m を RSA 署名させ、電力トレースを観測し、diff(x) = 1 となるかどうかを判定する。 3. diff(x) = 1 となった場合には次の step へ、そうでない場合には step1 に戻る。 4. 区間 [0, x] に diff(y − 1) = 0, diff(y) = 1, diff(z) = 1 (y ≤ ∀z < x) なる y が存在する。この ような y を区間の 2 分探索と上記 step1 から step3 の手順を繰り返して求める。 5. y は p の倍数であるので、gcd(y, N ) = p となる。 このように Novak の攻撃は、RSA 署名時の電力トレースの結果を見ながら入力 m を適応的に変 化させる必要があり、適応的選択文書攻撃である。 6.3.2 攻撃手法 この論文ではラティス基底縮小アルゴリズム LLL を利用した攻撃手法を考案している。次の d + 1 次行列の列ベクトルが張るラティスを考える。 ⎛ N 0 ··· ··· ⎜ .. ⎜ . N ⎜ 0 ⎜ ⎜ .. .. .. .. ⎜ . . . . ⎜ ⎜ 0 ··· 0 N ⎝ −s1 −s2 · · · −sd 0 .. . .. . 0 ⎞ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ A ここで si は d 個の整数であり、si = ri + ui × p, ri ∈ Zp , ui ∈ Zq とする。さらに、全ての ri (= si mod p) は定められた閾値 A(< p/2) よりも小さいものとする。このラティスに対して LLL により最短の基底ベクトルを求めると、その成分に q の倍数が現れ、N の素因数分解が可能とな る。実際に先の行列に対して、(u1 , u2 , · · · , ud , q) を左からかけた場合に最短ベクトルが得られ、そ の最後の成分は Aq となる。 この解析が成功する確率を P rob とし、P rob > 1 − 0 とするとき、素因数 p と閾値 A のビッ ト長には次の条件が必要である。 log p − log A > max √ log q − log 0 − 0.105 + 2.047, log(2 d + 1) d 108 第 6 章 非破壊攻撃に関する技術動向の調査 この証明は論文中に与えられている。 上記の結果を利用して RSA-CRT を攻撃するには、ランダムなメッセージを与えて署名を生成 させ、演算時の電力波形を観測し、t = sp − sq < 0 となる署名 S を d 個集める。この場合、q < p と仮定していることから、sp < sq < q < p が成立するので、閾値 A を |A| = |q| なる最大の整数 として定義する。このようにすると、集めた d 個の署名 Si を先の行列における si とみなすと、 ri (= Si mod p) < A を満たすことが分かる。従って、p, q, A, d, 0 の間に先の条件式が成立すれば LLL を併用することで法 N の素因数分解が求められる。 以下、素因数 p, q のビット長の差は l より大きいものとする (|p| − |q| > l)。q < p/2l が成立す ることに注意。素因数分解の成功確率 P rob > 1 − 2−10 とするためには、先の攻撃成立の条件式 から l ≥ log N −20+4d 2d+1 となるような d 個の署名が必要であることが導ける。このようにラティスの 次元 d は素因数 p, q のビット長の差の下界 l に依存する。さらに、条件を満たす d 個の署名を求 めるために必要な署名計算の実行回数の期待値は d · 2l であることも導出できる。 LLL アルゴリズム実行時の経験から、1024 ビットの整数を要素として扱う場合に d = 100 を超 えると妥当な時間では解が得られなかったり、求解に失敗したりする。そこで、|N | = 1024 の場合 に素因数 p, q のビット長の差を決める l を調整し、d < 100 となるようなパラメータを複数組求め て、実際に計算機実験を行っている。Pentium IV, XEON 1.5GHz, Shoup の NTL ライブラリを 利用した環境で計算機実験を行ったところ、一例として |N | = 1024 の場合、d = 60, |p| − |q| = 10 としたとき、署名の実行回数は 216 、16 分で素因数分解に成功した。この他にも法 N のビット長 を 768 や 2048 に変えた場合でも計算機実験をしており、本攻撃が様々なパラメータサイズで汎用 的に利用できるものであることが示されている。 この攻撃では署名データのうち、sp = S mod p が閾値 A より小さいという条件を満たすものを 集める必要があるが、入力メッセージはランダムで良いため、RSA-PSS などのパディング処理が 実装されたモジュールであっても攻撃できる。素因数 p, q のサイズに 10 ビット程度の差が必要で あるが、RSA のほとんどの仕様書では p, q はほぼ同じ長さであるとしか規定されていないため、 本論文の著者らはこの前提は非現実的なものではないとしている。 6.3.3 対策 本攻撃の対策として次の 2 つの方法がある。最初の方法は、RSA-CRT の実装において t = sp − sq < 0 かどうかが実行時間や消費電力から判別できないようにダミー演算を追加することで ある。例えば、t = sp − sq を最初に計算し、次に t = t + p を求める。t < 0 ならば t ← t そう でなければ t ← t とする。このような対策は、t = t + p の計算過程にエラーを発生させるフォー ルト攻撃 [45] により対策が無効化される場合があることに注意。PKCS#1 v1.5 のように固定のパ ディングを利用する場合には問題となる。 別の方法は、メッセージ m に対するランダム変換を利用するものである。実装の内部で re × m に対する署名 s を計算し、最後に s/r mod N により本来の署名を求める。乱数 r は秘密であり、 漏洩情報 t と出力される署名 s/r mod N には関係がなくなる。 6.4. ランダム化初期点を用いた電力解析対策方法 ランダム化初期点を用いた電力解析対策方法 6.4 タイトル ランダム化初期点を用いた電力解析対策方法 [25] 著者 伊藤 孝一、伊豆 哲也、武仲 正彦 学会名 2004 年 暗号と情報セキュリティシンポジウム – SCIS 2004 2004 年 発行年 概要 109 楕円曲線暗号の実装に対する電力解析攻撃として、近年 RPA、ZPA が提案されている。本 論文では、DPA/RPA/ZPA への対策法として RIP を提案し、従来の対策法である ES 法 との実 装効率を比較している。 6.4.1 楕円曲線暗号と SPA/DPA および その対策 E を 体 K 上定義された楕円曲線とし、E(K) := {P = (x, y) ∈ K 2 |P は E 上の点 } ∪ {O} を K-有理点 の集合とするとき、E(K) に 2 項演算 (加算演算) を定義することで E(K) は加法群を なす (以下 E と E(K) を同一視する)。ここで、O は無限遠点とよばれる点であり、加法に関する 単位元である。点 P ∈ E のスカラー倍を dP = P + · · · + P (d 回の加算) と定めるとき、P と dP から d を求める問題は楕円曲線上の離散対数問題 (ECDLP) として知られ、計算量的に解くこと が困難とされている。楕円曲線暗号は ECDLP の計算困難さを安全性の根拠としているが、実装 によっては秘密鍵 (スカラー値) d を電力解析により求めることができる。 実装に対する攻撃として、SPA と DPA がある。SPA への対策としては Add-and-Double- always 法 が提案されている。DPA への対策としては、RE (Randomized Exponent 法):乱数 r と点 P ∈ E の位数 φ に対して (d + rφ)P = dP を計算する、RBP (Randomized Base Point 法): ランダムに選んだ点 R ∈ E に対して d(P + R) − dR = dP を計算する、ES (Exponent Splitting 法):乱数 r に対して (d − r)P + rP = dP を計算する、RPC (Randomized Projective Coordinate 法):射影座標表現された点 P = (X, Y, Z) と乱数 r に対して d(rX, rY, rZ) = d(X, Y, Z) を計算 する、RC (Randomized Curve 法):P ∈ E を P ∈ E に同型変換して E 上で dP を計算し、 得られた点を E 上の点に戻す、が提案されている。このうち、RE、RBP は乱数性に偏りがある ことが指摘されている。ES は |r| = |d| であることが望ましく計算時間が 2 倍になるという問題が ある。RPC、RC の変換処理はスカラー倍の処理に比べて軽いため、演算時間はほとんど増加しな い。ES、RPC、RC は SPA への耐性をもっていないので、SPA 対策と併用する必要がある。 6.4.2 RPA と ZPA 2003 年に Goubin [18] は楕円曲線暗号にのみ適用可能な DPA の一種である RPA (Refined Power Analysis) を提案した。同年、秋下- 高木 [2] は RPA を拡張した ZPA (Zero-value Point Analysis) を提案した。楕円曲線上の点のスカラー倍を LSB からの Add-and-Double-always 法 (Algorithm 2、表 6.4) で計算しているとする。RPA/ZPA は、攻撃者がベースポイント (P ) を自 由に選べるとき、スカラー値 d = (dn−1 dn−2 · · · d0 )2 のうち d0 , · · · , dj−1 から dj を帰納的に求め る攻撃である。 110 第 6 章 非破壊攻撃に関する技術動向の調査 RPA は、曲線上の特殊点 (Qy = (0, y)) が現れたときの消費電力波形が特徴的であることを利用 してスカラー値 d を求める攻撃である。具体的な攻撃手順は以下のとおり:攻撃者は d0 , · · · , dj−1 を知っていると仮定する。ここで、Algorithm 2 の j 回目のループ終了後の T [0] は、dj = 0 なら j−1 i i j ば T [0] = Σj−1 i=0 di 2 P 、dj = 1 ならば T [0] = (Σi=0 di 2 + 2 )P となる。攻撃者はベースポイント i j −1 を P̄ = (Σj−1 Qy として Algorithm 2 を実行し、dj = 1 ならば j 回目のループ終了後 i=0 di 2 + 2 ) i j に T [0] = (Σj−1 i=0 di 2 + 2 )P̄ = Qy となるので、消費電力波形から dj = 1 を推測できる。 ZPA の攻撃方法は本質的には RPA と同様である。RPA との違いは、RPA が加算鎖の中で特 殊点 (Qy = (0, y)) が現れる点を Algorithm 2 に入力するのに対して、ZPA は楕円加算、楕円 2 倍算の計算過程で 0 が現れるような点 (Zero-value Point、ZVP) を入力することである。これに より、ZPA は特殊点をもたない楕円曲線にも適用可能となる [2]。 既存の DPA 対策の ES/RPC/RC のうち、RPC/RC は RPA および ZPA に耐性がない。ES はスカラー値 d をランダムに分割するため、RPA に対しては特殊点が計算過程で攻撃者の意図ど おりに現れないので、ZPA に対しては ZVP から攻撃者の意図どおりに楕円加算、楕円 2 倍算が 行われないので、これらの攻撃に対しても安全である。 6.4.3 提案対策法 (Randomized Initial Point 法, RIP) Algorithm 2 (表 6.4) では、dj = 1 のときにその点を初期点 T [0] = O に加え、dj の値にかか わらず T [2] = 2j+1 P を計算する。RPA は加算鎖で現れる点がベースポイントに対して一意に決 まるため、途中に特殊点が現れるような点を用いることで攻撃が可能であった。 提案対策法 (RIP、Algprithm 4、表 6.4) は、初期点を毎回異なるランダムな点 T [0] = R とす る。これにより、加算鎖の途中で現れる点は攻撃者が意図した点と異なるため、RPA は成功しな い。さらに、スカラー倍算の中間情報が毎回異なるため、DPA/ZPA への対策ともなっている。 固定点を初期点として用い RPC を適用する、固定点を更新 (2 倍算など) しながら初期点として 利用する、ことが提案されている。 DPA/RPA/ZPA に耐性がある実装効率のよい対策としては、ES+IT (26M +8S)、RLC+iECDBL (17M+8S)、RIP+iECDBL (16M+8S) がある。ここで、IT は伊豆-高木 [28] による DPA への対 策、iECDBL は中間情報を再利用しながら楕円 2 倍加算を行う方法 [27]、RLC は座標系をランダ Algorithm 2: Input: d, P Output: dP 1: T[0] = 0, T[2] = P 2: for i = 0 upto n-1 { 3: T[1] = ECADD(T[0],T[2]) 4: T[2] = ECDBL(T[2]) 5: T[0] = T[d[i]] 6: } 7: return T[0] Algorithm 4 Input: d, P Output: dP 1: R = randompoint() 2: T[0] = R, T[2] = P 3: for i = 0 upto n-1 { 4: T[1] = ECADD(T[0],T[2]) 5: T[2] = ECDBL(T[2]) 6: T[0] = T[d[i]] 7: } 8: return T[0]-R 表 6.4: Algorithm 2 (LSB からの Add-and-Double-always 法) と Algorithm 4 (RIP) 6.5. キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 111 ムに線形変換してスカラー倍を計算する DPA/RPA/ZPA への対策 [26] であり、カッコ内はビッ トあたりの計算時間 (M, S はそれぞれ定義体の元の掛け算、2 乗算に要する計算時間をあらわす) である。このことから、提案方式 (RIP) が最も実装効率のよい DPA/RPA/ZPA 対策であること が確認できる。 6.5 キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 タイトル キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 [56] 著者 大熊 建司 学会名 2004 年 暗号と情報セキュリティシンポジウム – SCIS 2004 2004 年 発行年 タイミング攻撃とは 暗号の実装に対する攻撃で、計算時間の変動に着目して暗号化鍵を推定する ものをタイミング攻撃と呼ぶ。タイミング攻撃の代表的なものとして、P.Kocher が提案した RSA 暗号や Diffie-Hellman 鍵共有の実装に対する攻撃がある [32]。Kocher は、べき乗計算で利用され る分岐処理で処理ステップ数が変動することに注目し、計算時間の変動から暗号化鍵の推定が可能 であることを示した。 キャッシュメモリの特性に着目したタイミング攻撃 タイミング攻撃は、RSA 暗号など公開鍵暗 号の実装例のように分岐処理に伴う計算時間の変動に着目したものの研究が先行した。しかし、分 岐処理が無くても、CPU の高速化に利用されるキャッシュメモリ2 の動作特性による計算時間の 変動に注目した攻撃を Kelsey らが提案し [30]、Page らがブロック暗号の DES に対する攻撃の可 能性を指摘した [41]。キャッシュメモリの動作特性に着目したこのような攻撃をここでは、キャッ シュ攻撃と呼ぶことにする。 ブロック暗号に対するキャッシュ攻撃 ブロック暗号では、計算時間の大きな部分を S-Box の計算 が占めていて、ソフトウェア実装では通常、S-Box 計算にはテーブル参照が利用される。 参照データがキャッシュ上に有るとき、キャッシュがヒットしたと言い、処理は高速に行われる。 一方、キャッシュ上にデータが無いとき、キャッシュがミスしたと言い、データはメインメモリか らロードされるため処理は低速になる。この際、読み出されたデータはキャッシュに置かれるので、 それ以降の読み出しは速くなる。キャッシュ攻撃では、このようなキャッシュメモリにおけるデー タのロードの有無に伴う計算時間の変動に着目する。 最近の PC 用 CPU のほとんどで、処理の高速化のためキャッシュメモリが利用されているので、 キャッシュ攻撃が脅威となる潜在的可能性は高い。 キャッシュ攻撃の前提条件 キャッシュ攻撃が適用可能となるための基本条件として、特定のテー ブルに対する固定回数の参照に関して以下を仮定する。 2 キャッシュメモリは、最近の PC 用 CPU に広く利用されており、CPU とメインメモリの間に置かれ、CPU へのデー タ供給を高速化する。 112 第 6 章 非破壊攻撃に関する技術動向の調査 (i) 初期状態でキャッシュはクリアされている (ii) キャッシュにロードされるデータは入力アドレスに対する1個分だけ (iii) キャッシュのヒットおよびミスに対する計算時間は各々一定 仮定 (i),(ii) の元では、次の関係が成立する。 「キャッシュミス回数」=「S-Box に対する異なる入力値 (アドレス) の個数」 また、(iii) の仮定を加えると、キャッシュメモリ処理に要する計算時間はキャッシュミス回数の 一次式になるので、他の計算処理による時間変動がなければ、計算時間からキャッシュミス回数が 逆算できる。 実際のキャッシュ攻撃では、上記の条件 (i) を満たすため、キャッシュは、1ブロックないし数 ブロックの暗号化ごとにクリアすると仮定する。この仮定は特殊なものであり、例えば S-Box の テーブル全部を最初にキャッシュに置くといった対策でこの攻撃を防げると考えられる。しかし、 キャッシュメモリで S-Box 用に利用できるサイズが限定される低スペックの実装環境の場合も実際 には多く、攻撃が適用できる状況が生じる可能性を否定はしきれない。 キャッシュ攻撃の基本的分類 キャッシュ攻撃の基本は、特定の2個の S-Box に着目し、その入力 値の一致/不一致によって生じるキャッシュミス回数の分布の違いを測定することで、拡大鍵に関 する情報を得る点にある。キャッシュ攻撃は、推定する拡大鍵に応じて次の2種類に分かれる。 • 注目する2個の S-Box の入力直前で加算される拡大鍵を推定 • 注目する2個の S-Box の片方または両方の入力に出力値を送る上流の S-Box の入力直前で加 算される拡大鍵を推定 キャッシュ攻撃の計算機実験 NEC の角尾らは、2個の S-Box の入力直前で加算される拡大鍵を 推定する方針で攻撃モデルを立て、理想化された計算機環境で MISTY1 に対する攻撃実験を行い、 特定の条件下での有効性を立証した [47]。彼らは、キャッシュヒットが1回も起こらないと推測で きる、暗号化の計算時間が長い方から全体の 2−7 以内に入るデータを選び、注目する S-Box 2個 の入力直前の鍵差分値として取りえないものを捨てていくことで、正しい鍵の特定に成功した。 SCIS 2003 における関連研究の集中発表 SCIS2003 では、角尾らの研究に刺激され、CRYPTREC で評価対象となっているブロック暗号に対するキャッシュ攻撃の計算機実験の発表が8件 [58, 54, 49, 60, 51, 50, 52, 55]、理論解析に関する発表が2件なされた [59, 57]。 表 6.5 にキャッシュ攻撃でソフトウェア実装の解読が成功した暗号方式と攻撃者の所属を示す。 キャッシュ攻撃ではないものの、CIPHERUNICORN-A に対して、乗算の時間差に着目したタ イミング攻撃による解読実験の成功が NTT と日立の共同研究として報告されている [53]。以上の 結果、CRYPTREC において推奨暗号に選ばれたブロック暗号の全部に対し、タイミング攻撃で 解読可能なソフトウェア実装が存在することが示された。 以上の結果から、CRYPTREC の推奨暗号の安全性に関する懸念が生じかねない。しかし、攻 撃対象のソフトウェア実装には、キャッシュ攻撃が有効なものを選んでいるのであり、実際に利用 されるソフトウェア実装が危険であることを意味するわけではないことに注意する必要がある。 6.5. キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 攻撃者 113 表 6.5: SCIS 2003 で発表されたキャッシュ攻撃の計算機実験 攻撃対象暗号 NTT AES , SC2000 , Hierocrypt-3 三菱電機 Triple DES , CIPHERUNICORN-E , Hierocrypt-L1 NEC AES , DES , Camellia , KASUMI , SC2000 , Hierocrypt-3/-L1 理論解析の2件の論文は、各々NEC と東芝によるもので、いずれも暗号化の計算を単純化し、 入力が一様に独立な複数の鍵加算付き S-Box を参照するモデルを解析対象としている [59, 57]。具 体的攻撃法は、2個1組の S-Box に注目し、鍵加算前の入力値の差分によって入力平文をグルー プ分けし、グループごとの計算時間の分布からキャッシュヒットを起こす差分値を割り出し、鍵差 分値を推定するという最も基本的なものである。キャッシュ攻撃の具体的なアルゴリズムには、こ れ以外に様々なバリエーションが有るが、鍵推定確率を固定したときに必要な平文数のオーダーは 大きくは変わらないと考えられるので、基本的な攻撃法での解析結果は安全性を評価する上で重要 な意味を持つ。 キャッシュ攻撃の統計数理的解析 基本的攻撃法における解析の中心は、キャッシュミス回数の分 布に関するものである。2個1組の S-Box の入力値について一致/不一致の条件を加えることに よる分布の変化を調べて、使用する平文の個数と鍵推定の成功率の関係を評価する。文献 [57] で は、キャッシュミス回数分布に関する漸化式を立てて解くことにより、その厳密解を求めた。 キャッシュミス回数分布を利用して、2個の S-Box 入力が一致するときの鍵加算前の入力差分値 を推定するが、その方法として、次の2種類が存在する。 (a) 計算時間が設定したしきい値以下になる平文の割合で推定 (b) 計算時間の平均値で推定 文献 [57] では、(a) をしきい値法、(b) を平均値法と呼ぶ。(a) のしきい値法は、さらに、しきい 値の設定に関して次の三種類に分けられる。 (a1) 最大しきい値法 (a2) 一般しきい値法 (a3) 最小しきい値法 最大しきい値法 (a1) は、計算時間が最大、つまり S-Box への入力が全部異なってキャッシュヒッ トが 1 回も起こらないものとそれ以外を区別するようにしきい値を設定する方法である。逆に、最 小しきい値法 (a3) は、計算時間が最小となる、S-Box への入力が等しく最初の 1 回以外の参照が 全部キャッシュヒットする場合とそれ以外を区別するようにしきい値を設定する方法である。 一般しきい値法 (a2) は、しきい値を上記2種類の両極の間に設定するものであり、しきい値の 設定によって推定の有効性が左右される。 (a1) と (a3) は、S-Box 数が少ない暗号に対しては有効だが、S-Box 数の増加に伴って解読に必 要な平文数が急激に増加し、多くの暗号では適用が困難になり、一般しきい値法 (a2)、または、平 均値法 (b) が有効になる。 S-Box が複数種類ある場合には、各々に対して異なる入力値の個数を数え、それらを足し合わせ たものをキャッシュミス回数とすれば良い。 114 第 6 章 非破壊攻撃に関する技術動向の調査 しきい値法と平均値法の比較 S-Box が十分多い場合は、一般しきい値法 (a2) か平均値法 (b) が有 効であるが、どちらが優れているかが問題となる。文献 [57] では、AES、Camellia、Hierocrypt- 3/-L1 に対して、同じ鍵推定成功率を得るのに必要な平文数を両方式について解析した。その結果、 これらの暗号方式の全部について、しきい値を最適に選んだ場合の一般しきい値法より平均値法の 方が、必要平文数が少なくて済むことが分かった。 いくつかの暗号で、平均値法が一般しきい値法より優れていることが具体的に分かったが、他の 暗号についても同様に成り立つか否かは未解決の問題であった。文献 [56] では、ごく一般的な条件 下で正当化できる近似評価を利用して、平均値法が一般しきい値法より少ない平文数で同じ鍵推定 確率を実現できることを示した。 キャッシュラインの影響 解析を簡単にするするためにこれまでの解析では評価結果に影響を与え る項目をいくつか無視した。その中で重要なものの一つであるキャッシュラインの効果について述 べる。 これまでは、S-Box の入力値が完全に一致する場合にのみ、キャッシュヒットが起こると仮定し た、しかし、実際にはテーブル参照では、参照対象を含む一定長の連続する入力アドレスに対する 出力データがキャッシュに置かれる。そのため、既に述べた基本的攻撃法では鍵ビットの差分が一 意的には決まらず下位の数ビットが不定となり、また推定確率も影響を受ける [48, 57]。この結果、 キャッシュに着目して得られる鍵ビット数は減り、一定の推定成功率の実現に必要な必要平文数も 増加し、解読の困難さは増す。ただし、解読が不可能になる場合はまれであるので、その効果を定 量的に評価する必要がある。 テーブル参照以外の時間変動の影響 テーブル参照以外の計算プロセスも、計算時間の変動を引 き起こすことでキャッシュ攻撃の解読性能に影響する項目として重要なものである。 文献 [56] では、キャッシュメモリの動作以外の計算プロセスによる時間変動が、キャッシュのミ ス/ヒットと相関が無く、正規分布に従うとしたときの影響を解析し、一定の鍵推定成功率を実現 するのに必要な平文数がどれだけ増加するか評価した。 おわりに 共通鍵ブロック暗号のソフトウェア実装に対するキャッシュメモリの動作に着目した攻 撃法の有効性を示した。理論解析および計算機実験による研究を紹介した。これらの攻撃法に対 して、キャッシュの定期的なクリアなどの非現実的な条件が仮定されており、実際に有効となる可 能性はほとんど無いとする研究者もいる。しかし、暗号の利用形態による制約条件の結果、キャッ シュ攻撃が有効となる条件を満たすような実装が行われる可能性は否定しきれない。S-Box を利用 したブロック暗号のソフトウェア実装の安全性を評価する際、キャッシュ攻撃の適用可能性の検討 は必要であろう。 115 参考文献 [1] Dakshi Agrawal, Josyula R. Rao, and Pankaj Rohatgi. Multi-channel attacks. In Colin D. Walter, Çetin Kaya Koç, and Christof Paar, editors, Cryptographic Hardware and Embedded Systems - CHES 2003, volume 2779 of Lecture Notes in Computer Science, pages 2–16, Berlin, Heidelberg, New York, 2003. Springer. [2] Toru Akishita and Tsuyoshi Takagi. Zero-value point attacks on elliptic curve cryptosystem. In Colin Boyd and Wenbo Mao, editors, Information Security, 6th International Conference, ISC 2003, volume 2851 of Lecture Notes in Computer Science, pages 218–233, Berlin, Heidelberg, New York, 2003. Springer. [3] Mehdi-Laurent Akkar and Christophe Giraud. An Implementation of DES and AES, Secure against Some Attacks. In Çetin Kaya Koç, David Naccache, and Christof Paar, editors, Cryptographic Hardware and Embedded Systems - CHES 2001, volume 2162 of Lecture Notes in Computer Science, pages 309–318, Berlin, Heidelberg, New York, 2001. Springer. [4] R. J. Anderson and Markus G. Kuhn. Tamper resistance - a cautionary note. In Second USENIX Workshop on Electronic Commerce, pages 1–11, USENIX, 1996. [5] ANSI: American National Standards Institute. http://www.ansi.org/. [6] W. J. Bainbridge, P. A. Riocreux, J. D. Garside, A. Bardsley, S. Temple, and L. A. Plana. SPA - a synthesisable amulet core for smartcard applications. Proc, 8th IEEE International Symposium on Asynchronous Circuit and Systems - ASYNC ’02, pages 201–210, 2002. [7] Eli Biham and Adi Shamir. Differential fault analysis of secret key cryptosystems. In Burton S. Kaliski Jr, editor, Advances in Cryptology - CRYPTO ’97, volume 1294 of Lecture Notes in Computer Science, pages 513–525, Berlin, Heidelberg, New York, 1997. Springer. [8] Dan Boneh, Richard A. DeMillo, and Richard J. Lipton. On the importance of checking cryptographic protocols for faults. In Walter Fumy, editor, Advances in Cryptology - EUROCRYPT ’97, volume 1233 of Lecture Notes in Computer Science, pages 37–51, Berlin, Heidelberg, New York, 1997. Springer. [9] CC: Common Criteria for IT Security Evaluation. http://csrc.nist.gov/cc/. [10] Suresh Chari, Josyula R. Rao, and Pankaj Rohatgi. Template attacks. In Burton S. Kaliski Jr., Çetin Kaya Koç, and Christof Paar, editors, Cryptographic Hardware and Embedded 116 第 6 章 非破壊攻撃に関する技術動向の調査 Systems - CHES 2002, volume 2523 of Lecture Notes in Computer Science, pages 13–28, Berlin, Heidelberg, New York, 2003. Springer. [11] CMVP: Cryptographic Module Validation Program. http://www.cse.dnd.ca/en/services/ industrial services/cmv program.html. [12] CRYPTREC: Cryptography Research & http://www.ipa.go.jp/security/enc/CRYPTREC/. [13] FIPS 140-2. Security requirements Evaluation for Committees. cryptographic modules. http://csrc.nist.gov/publications/fips/fips140-2/fips1402.pdf. [14] Pierre-Alain Fouque, Gwenaelle Martinet, and Guillaume Poupard. Attacking unbalanced RSA-CRT using SPA. In Colin D. Walter, Çetin Kaya Koç, and Christof Paar, editors, Cryptographic Hardware and Embedded Systems - CHES 2003, volume 2779 of Lecture Notes in Computer Science, pages 254–268, Berlin, Heidelberg, New York, 2003. Springer. [15] Jacques J. A. Fournier, Simon Moore, Huiyun Li, Robert D. Mullins, and George S. Taylor. Security evaluation of asynchronous circuits. In Colin D. Walter, Çetin Kaya Koç, and Christof Paar, editors, Cryptographic Hardware and Embedded Systems - CHES 2003, volume 2779 of Lecture Notes in Computer Science, pages 137–151, Berlin, Heidelberg, New York, 2003. Springer. [16] Karine Gandolfi, Christophe Mourtel, and Francis Olivier. Electromagnetic analysis: Concrete results. In Çetin Kaya Koç, David Naccache, and Christof Paar, editors, Cryptographic Hardware and Embedded Systems - CHES 2001, volume 2162 of Lecture Notes in Computer Science, pages 251–261, Berlin, Heidelberg, New York, 2001. Springer. [17] L. Goubin and J. Patarin. DES and Differential Power Analysis (The “Duplication” Method). In Çetin Kaya Koç and Christof Paar, editors, Cryptographic Hardware and Embedded Systems – CHES’99, volume 1717 of Lecture Notes in Computer Science, pages 158–172, Berlin, Heidelberg, New York, 1999. Springer-Verlag. [18] Louis Goubin. A refined power-analysis attack on elliptic curve cryptosystems. In Yvo Desmedt, editor, Public Key Cryptography – PKC 2003, volume 2567 of Lecture Notes in Computer Science, pages 199–210, Berlin, Heidelberg, New York, 2003. Springer. [19] http://www.synopsys.com/products/power/primepower ds.html. [20] IEC: International Electrotechnical Commission. http://www.iec.ch/. [21] INSTAC: Information Technology Research and http://www.jsa.or.jp/domestic/instac/index.htm. [22] IPA: Information-technology http://www.ipa.go.jp/index.html. Promotion Standardization Agency, Center. Japan. 6.5. キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 117 [23] ISO: International Organization of Standardization. http://www.iso.ch/. [24] ISO/IEC JTC 1 SC 27 - IT Security Techniques. http://www.din.de/ni/sc27/. [25] Kouichi Itoh, Tetsuya Izu, and Masahiko Takenaka. A random initial point countermeasure against power analysis”. SCIS 2004, The 2004 Symposium on Cryptography and Information Security, pages 653–658, 2004. [26] Kouichi Itoh, Tetsuya Izu, and Masahiko Takenaka. A randomized linearly-transformed coordinates countermeasure against power analysis”. SCIS 2004, The 2004 Symposium on Cryptography and Information Security, pages 659–664, 2004. [27] Kouichi Itoh, Masahiko Takenaka, Naoya Torii, Syouji Temma, and Yasushi Kurihara. Fast implementation of public-key cryptography ona DSP TMS320c6201”. In Çetin Kaya Koç and Christof Paar, editors, Cryptographic Hardware and Embedded Systems - CHES 2002, volume 1717 of Lecture Notes in Computer Science, pages 61–72, Berlin, Heidelberg, New York, 1999. Springer. [28] Tetsuya Izu and Tsuyoshi Takagi. A fast parallel elliptic curve multiplication resistant against side channel attacks”. In David Naccache and Pascal Paillier, editors, Public Key Cryptography – PKC 2002, volume 2274 of Lecture Notes in Computer Science, pages 280– 296, Berlin, Heidelberg, New York, 2002. Springer. [29] JTC1: Joint Technical Committee for information technology. http://www.jtc1.org/. [30] J. Kelsey, B. Schneier, D. Wagner, , and C. Hall. Side channel cryptanalysis of product ciphers. In Journal of Computer Security, volume 8, pages 141–158. Springer-Verlag, 2000. [31] Neal Koblitz. Elliptic curve cryptosystems. In Math. Comp., volume 48, pages 203–209, 1987. [32] Paul Kocher. Timing attacks on implementations of Diffie-Hellman, RSA, DSS, and other systems. In Neal Koblitz, editor, Advances in Cryptology – CRYPTO’96, volume 1109 of Lecture Notes in Computer Science, pages 104–113, Berlin, Heidelberg, New York, 1996. Springer-Verlag. [33] Paul Kocher, Joshua Jaffe, and Benjamin Jun. Differential power analysis. In M. Wiener, editor, Advances in Cryptology – CRYPTO’99, volume 1666 of Lecture Notes in Computer Science, pages 388–397, Berlin, Heidelberg, New York, 1999. Springer-Verlag. [34] Victor S. Miller. Use of elliptic curves in cryptography. In Hugh C. Williams, editor, Advances in Cryptology - CRYPTO ’85, volume 218 of Lecture Notes in Computer Science, pages 417–426, Berlin, Heidelberg, New York, 1985. Springer. [35] S. Moore, R. Anderson, P. Cunningham, R. Mullins, and G. Taylor. Improving smart card security using self-timed circuit. Proc. 8th IEEE International Symposium on Asynchronous Circuit and Systems - ASYNC ’02, pages 23–58, 2002. 118 第 6 章 非破壊攻撃に関する技術動向の調査 [36] National Institute of Standards and Technology. http://www.nist.gov/. [37] NESSIE: New European Schemes for Signatures, Integrity, Encryption. https://www.cosic.esat.kuleuven.ac.be/nessie/. [38] NIST. Federal information processing standard publication 46-2: Data Encryption Standard. 1993. http://www.itl.nist.gov/fipspubs/fip46-2.htm. [39] NIST. Advanced Encryption Standard. 2001. http://csrc.nist.gov/encryption/aes/. [40] R. Novak. SPA-based adaptive chosen-ciphertext attack on RSA implementation. In David Naccache and Pascal Paillier, editors, Public Key Cryptography – PKC 2002, volume 2274 of Lecture Notes in Computer Science, pages 252–262, Berlin, Heidelberg, New York, 2002. Springer. [41] D. Page. Theoretical use of cache memory as a cryptanalytic side-channel. In Cryptology ePrint Archive, Report 2002/169, 2002. http://eprint.iacr.org/2002/169. [42] Jean-Jacques Quisquater and David Samyde. ElectroMagnetic Analysis (EMA): Measures and counter-measures for smart cards. In Isabelle Attali and Thomas P. Jensen, editors, Smart Card Programming and Security – E-smart 2001, volume 2140 of Lecture Notes in Computer Science, pages 200–210, Berlin, Heidelberg, New York, 2001. Springer. [43] R. L. Rivest, A. Shamir, and L. Adleman. A method for obtaining digital signatures and public key cryptosystems. Communications of the ACM, 21(2):120–126, 1978. [44] SCC: Standards Council of Canada. http://www.scc.ca/. [45] S.M.Yen and M.Joye. Checking before output may not be enough agaist fault-based cryptanalysis. In IEEE Trans. on Computers, 49, pages 967–970, 2000. [46] TAO: Telecommunications http://www.shiba.tao.go.jp/. Advancement Organization of Japan. [47] Y. Tsunoo, E. Tsujihara, K. Minematsu, and H. Miyauchi. Cryptanalysis of block ciphers implemented on computers with cache. In ISITA 2002, 2002. [48] Yukiyasu Tsunoo, Teruo Saito, Tomoyasu Suzaki, Maki Shigeri, and Hiroshi Miyauchi. Cryptanalysis of DES Implemented on Computers with Cache. In Colin D. Walter, Çetin Kaya Koç, and Christof Paar, editors, Cryptographic Hardware and Embedded Systems CHES 2003, volume 2779 of Lecture Notes in Computer Science, pages 62–76, Berlin, Heidelberg, New York, 2003. Springer. [49] 角尾, 久保, 茂, 辻原, 宮内. S-box におけるキャッシュ遅延を利用した AES へのタイミング攻 撃. 2003 年 暗号と情報セキュリティシンポジウム (SCIS 2003), 2003. 6.5. キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析 119 [50] 角尾, 洲崎, 齊藤, 川幡, 宮内. S-box におけるキャッシュ遅延を利用した Camellia へのタイミ ング攻撃. 2003 年 暗号と情報セキュリティシンポジウム (SCIS 2003), 2003. [51] 角尾, 川幡, 辻原, 峯松, 宮内. S-box におけるキャッシュ遅延を利用した KASUMI へのタイミ ング攻撃. 2003 年 暗号と情報セキュリティシンポジウム (SCIS 2003), 2003. [52] 角尾, 茂, 辻原, 宮内. SC2000 へのタイミング攻撃. 2003 年 暗号と情報セキュリティシンポジ ウム (SCIS 2003), 2003. [53] 青木, 古谷, 盛合. CIPHERUNICORN-A 実装に対する乗算の時間差を使ったタイミング攻撃. 2003 年 暗号と情報セキュリティシンポジウム (SCIS 2003), 2003. [54] 青木, 山本, 植田, 盛合. 128 ビットブロック暗号に対するキャッシュ攻撃. 2003 年 暗号と情報 セキュリティシンポジウム (SCIS 2003), 2003. [55] 川幡, 角尾, 齊藤, 辻原, 宮内. Hierocrypt-L1/-3 へのタイミング攻撃. 2003 年 暗号と情報セ キュリティシンポジウム (SCIS 2003), 2003. [56] 大熊. キャッシュミス攻撃に適した拡大鍵選択法とノイズの影響解析. 2004 年 暗号と情報セ キュリティシンポジウム (SCIS 2004), 2004. [57] 大熊, 川村, 清水, 村谷. キャッシュミス利用実装攻撃における鍵推定の解析. 2003 年 暗号と 情報セキュリティシンポジウム (SCIS 2003), 2003. [58] 鶴丸, 酒井, 反町, 松井. 64 ビットブロック暗号に対するタイミング攻撃. 2003 年 暗号と情報 セキュリティシンポジウム (SCIS 2003), 2003. [59] 峯松, 角尾, 辻原. キャッシュ攻撃の成功確率の解析. 2003 年 暗号と情報セキュリティシンポ ジウム (SCIS 2003), 2003. [60] 齊藤, 角尾, 洲崎, 宮内. S-box におけるキャッシュ遅延を利用した DES へのタイミング攻撃. 2003 年 暗号と情報セキュリティシンポジウム (SCIS 2003), 2003. 121 付 録A 回路評価基板 本評価で用いた評価基板の回路図を、図 A.1、図 A.2、図 A.3 に示す。 FD[7..0] 2[8D] 1 FA[15..0] 2[8D] FD[7..0] FA[15..0] nCS_RAM nRD_M EM nW R_M EM GND Vcc Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 図 A.1: 評価基板の回路図 1/3 20 22 27 21 23 24 25 26 1 2 3 4 5 6 7 8 9 10 FA0 FA1 FA2 FA3 FA4 FA5 FA6 FA7 FA8 FA9 FA10 FA11 FA12 FA13 FA14 GND GND Vcc 8 +5V 16 15 14 13 12 11 10 9 7 2 CY62256-70SNC CE OE WE A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 IO0 IO1 IO2 IO3 IO4 IO5 IO6 IO7 IC9 74AS138N(DIP) G1 G2A G2B 11 12 13 15 16 17 18 19 6 4 5 FA7 FA6 FA5 A B C IC8 FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 1 2 3 FA2 FA3 FA4 FA15 2 GND 14 +5V 28 C19 0.1u C26 0.1u LND15 LND16 LND17 LND18 LND19 LND20 RO M -SO CKET nCS_ROM nRD_M EM nW R_M EM 20 22 27 10 9 8 7 6 5 4 3 25 24 21 23 2 26 1 AT28C256-15PC 3 GND Vcc nFCS_CNT GND 14 +5V 28 3 1 3 nCCS_CNT 1 nFCS_SIO A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 CE OE WE 1 F C F C F C 1[3C] 1[3C] 1[3C] C27 0.1u JP6 JP3PIN CNT_CS JP5 JP3PIN SIO _CS JP2 JP3PIN M EM _CS 1[4B]2[3B] R79 10k R78 10k R77 10k R76 10k nCCS_SIO IO0 IO1 IO2 IO3 IO4 IO5 IO6 IO7 IC10 +5V FCS_RAM /nROM 3 IC-SOCKET(28PIN) CN8 FA0 FA1 FA2 FA3 FA4 FA5 FA6 FA7 FA8 FA9 FA10 FA11 FA12 FA13 FA14 11 12 13 15 16 17 18 19 nFCS_CNT nFCS_SIO FCS_RAM /nROM FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 2[5C] 2[5C] 2[5C] 3 +5V CLK2 CLK3 CLK4 2 2 2 nRST CLK2 CLK3 CLK4 R94 10k R88 10k R87 10k nCS_CNT nRD_IO nW R_IO R84 10k +5V R83 10k +5V R80 10k +5V nRST 4 LND25 LND24 LND23 1 3 5 9 11 13 4 GND Vcc 1Y 2Y 3Y 4Y 5Y 6Y 19 20 FA0 FA1 16 18 14 15 11 9 21 22 23 8 7 6 5 4 3 2 1 FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 74F04N(DIP) 1A 2A 3A 4A 5A 6A IC7 GND C18 0.1u GND Vcc OUT2 OUT1 GND R103 x R101 x GND R102 x +5V R100 x +5V RST OUT0 M SM 82C53-2RS GATE2 CLK2 GATE1 CLK1 GATE0 CLK0 CS RD WR A0 A1 D0 D1 D2 D3 D4 D5 D6 D7 IC11 7 +5V 14 2 4 6 8 10 12 R105 x GND TP64 TP63 TP62 C28 0.1u R104 x +5V GND 12 +5V 24 17 13 10 nCS_CNT nCS_SIO nCS_ROM nCS_RAM 5 1[3C] 5 CLK5 nCS_SIO nRD_IO nW R_IO 10k R89 RST CLK5 +5V FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 2[5C] 1[6D] 2[5C] RESET GND Vcc SYNDET/BD TXEM PTY M SM 82C51A-2GS-K R107 x GND TXC RXC DSR DTR CTS RTS F C F C F C F C 5 6 GND C20 0.1u 2 2 2 2 +5V 30 18 21 17 16 10 28 25 27 19 26 22 3 JP8 JP3PIN M EM _W R JP7 JP3PIN M EM _RD TXD RXD 3 1 3 JP4 JP3PIN IO _W R JP3 JP3PIN IO _RD TXRDY RXRDY nFM W R nM W R nFM RD 1 3 nM RD 1 nFIOW R 3 1 nIOW R nFIORD CLK CS RD WR C/D NC NC NC NC D0 D1 D2 D3 D4 D5 D6 D7 IC12 R106 x +5V 24 23 12 15 11 14 20 29 13 4 31 32 1 2 6 7 8 9 nFM W R nM W R nFM RD nM RD nFIOW R 1[6D] nIOW R 2[5C] nFIORD nIORD 1[6D] 2[5C] 1[6D] nIORD 6 R99 x R91 10k R90 10k R86 10k +5V R85 10k +5V R82 10k +5V R81 10k +5V +5V ' ' ^ ^ C22 0.1u C21 0.1u LND28 R93 10k 5 4 3 1 10 9 11 12 b g ´ ¯ b g ´ ¯ +5V J J R92 10k +5V LND27 p LND26 LND22 p LND21 nW R_M EM nRD_M EM nW R_IO nRD_IO Title y W 7 O ` 6 15 16 2 7 8 14 13 GND +5V LND32 LND29 LND30 LND31 Sheet3 of3 Revision:1 d ˝ “ Ł { [ h C24 0.1u C25 0.1u C23 0.1u 232TX 232RX GND Tim e: 12:50:31 Num ber:0 Date: 26-Dec-2003 File: 3.Sch Size: A2 V- GND Vcc V+ T2OUT R2IN T1OUT R1IN 232side-> M AX232CW E C2- C2+ C1- C1+ T2IN R2OUT T1IN R1OUT IC13 Ø – ˘ B Ø – ˘ B 7 ‡ 9 8 7 6 5 4 3 2 1 F RS232C } 8 D-SUB9PIN CN7 8 v } ˚ ‹ A B C D 付 録A A B C D 1 122 回路評価基板 A B 1 PRO M -SO CKET GND 2 Vcc Vcc DATA CLK CE RESET/OE TP56 TP57 TP58 TP59 TP60 TP61 XC17S20PD8C NC IC6 IC-SOCKET(8PIN) CN3 6 +5V GND TDI TDO TM S TSK JTAG 5 7 8 1 2 4 3 GND +5V C16 0.1u C7 0.1u GND +5V C17 0.1u +5V +5V R63 10k 1[8C] R65 10k R64 10k A[15..0] D[7..0] 2 GND JP3PIN 1[8C] 3 3 A[15..0] D[7..0] PRO M C R61 10k R62 10k R67 10k R68 10k JP1 R66 10k JTAG 図 A.2: 評価基板の回路図 2/3 1 2 3 D 1 +5V R75 10k R74 10k R73 10k R72 10k R71 10k R70 10k R69 10k 1[4B]3[3D] nRST nRST 1[3D] nBUSACK 1[3D] nHALT 1[3D] nM 1 1[6D] nIORQ 1[6D] nM REQ 1[6D] nRD 1[6D] nW R 1[3C] GND CLK1 LND13 LND14 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 nBUSACK nHALT nM 1 nIORQ nM REQ nRD nW R D4 D3 D5 D6 D2 D7 D0 D1 4 GND R98 x 38 34 143 33 70 106 2 39 76 112 105 107 72 53 44 40 74 36 6 109 11 7 TSP0 TSP1 TSP2 TSP3 TSP4 TSP5 TSP6 FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 R97 x +5V CLK1 R1091k 4 IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO XCS20-3TQ144C IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IO IC5A XCS20-3TQ144C 137 127 118 110 100 91 81 71 64 55 45 35 27 17 8 1 144 128 108 90 73 37 54 18 C8 0.1u TSP31 TSP30 TSP29 TSP28 TSP27 TSP26 TSP25 TSP24 TSP23 TSP22 TSP21 TSP20 TSP19 TSP18 TSP17 TSP16 TSP15 TSP14 TSP13 TSP12 TSP11 TSP10 TSP9 TSP8 TSP7 104 103 102 101 99 98 97 96 95 94 93 92 89 88 87 86 85 84 83 82 80 79 78 77 75 Vcc Vcc Vcc Vcc Vcc Vcc Vcc Vcc FA15 FA14 FA13 FA12 FA11 FA10 FA9 FA8 FA7 FA6 FA5 FA4 FA3 FA2 FA1 FA0 nFIORD nFIOW R nFM RD nFM W R FCS_RAM /nROM nFCS_CNT nFCS_SIO nNM I nINT nW AIT nBUSREQ 142 141 140 139 138 136 135 134 133 132 131 130 129 126 125 124 123 122 121 120 119 117 116 115 114 113 111 GND GND GND GND GND GND IO/PGCK1 GND IO/PGCK2 GND IO/PGCK3 GND IO/PGCK4 GND GND IO/SGCK1 GND IO/SGCK2 GND IO/SGCK3 GND IO/SGCK4(DOUT) GND GND NC NC IO(DIN) CCLK DONE IO(INIT) IO(LDC) IO(HDC) PROGRAM M ODE IO/TDI O/TDO IO/TM S IO/TCK IC5B 41 42 43 46 47 48 49 50 51 52 56 57 58 59 60 61 62 63 65 66 67 68 69 3 4 5 9 10 12 13 14 15 16 19 20 21 22 23 24 25 26 28 29 30 31 32 5 5 C9 0.1u C10 0.1u C11 0.1u nFIORD 3[5D] nFIOW R 3[5D] nFM RD 3[5C] nFM W R 3[5C] FCS_RAM /nROM 3[3D] nFCS_CNT 3[3C] nFCS_SIO 3[3C] nNM I 1[3C] nINT 1[3C] nW AIT 1[3C] nBUSREQ 1[3C] C12 0.1u C13 0.1u C14 0.1u GND C15 0.1u +5V FA0 FA1 FA2 FA3 FA4 FA5 FA6 FA7 FA8 FA9 FA10 FA11 FA12 FA13 FA14 FA15 ' 1 6 6 p ^ CN5 SM A-J J R52 10k R51 10k R50 10k R49 10k R48 10k R47 10k R46 10k R45 10k R44 10k R43 10k R42 10k R41 10k R40 10k R39 10k FPG A_G m c b g ´ ¯ +5V R38 10k R37 10k “ s y W c 7 Date: 26-Dec-2003 File: 2.Sch ` FD7 FD6 FD5 FD4 FD3 FD2 FD1 FD0 FA[15..0] FD[7..0] Sheet2 of3 Revision:1 3[1B] “ s ‡ F o ˝ Q FD7 TP48 TP49 TP50 TP51 TP52 TP53 TP54 TP55 FD0 FA[15..0] 3[1B] FD[7..0] d ˝ “ Ł { [ h CN-32PIN CN6 32 32 31 31 30 30 29 29 28 28 27 27 26 26 25 25 24 24 23 23 22 22 21 21 20 20 19 19 18 18 17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 N 1^ j 1⁄ Tim e: 12:50:28 Num ber:0 O TSP31 TSP30 TSP29 TSP28 TSP27 TSP26 TSP25 TSP24 TSP23 TSP22 TSP21 TSP20 TSP19 TSP18 TSP17 TSP16 TSP15 TSP14 TSP13 TSP12 TSP11 TSP10 TSP9 TSP8 TSP7 TSP6 TSP5 TSP4 TSP3 TSP2 TSP1 i d TSP0 „ R l +5V FPGA_TP R60 10k R59 10k R58 10k R57 10k R56 10k R55 10k R54 10k R53 10k D T S s b ` FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 Size: A2 Title Ł f m o ˝ Q FA15 TP32 TP33 TP34 TP35 TP36 TP37 TP38 TP39 TP40 TP41 TP42 TP43 TP44 TP45 TP46 TP47 FA0 Ø – ˘ BSM A-J FA15 FA14 FA13 FA12 FA11 FA10 FA9 FA8 FA7 FA6 FA5 FA4 FA3 FA2 FA1 FA0 7 8 } FPGA D T S s b ` 8 v } ˚ ‹ A B C D 123 2 FD[7..0] 2[8D] 1 FA[15..0] 2[8D] FD[7..0] FA[15..0] nCS_RAM nRD_M EM nW R_M EM GND Vcc Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 図 A.3: 評価基板の回路図 3/3 20 22 27 21 23 24 25 26 1 2 3 4 5 6 7 8 9 10 FA0 FA1 FA2 FA3 FA4 FA5 FA6 FA7 FA8 FA9 FA10 FA11 FA12 FA13 FA14 GND GND Vcc 8 +5V 16 15 14 13 12 11 10 9 7 2 CY62256-70SNC CE OE WE A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 IO0 IO1 IO2 IO3 IO4 IO5 IO6 IO7 IC9 74AS138N(DIP) G1 G2A G2B 11 12 13 15 16 17 18 19 6 4 5 FA7 FA6 FA5 A B C IC8 FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 1 2 3 FA2 FA3 FA4 FA15 2 GND 14 +5V 28 C19 0.1u C26 0.1u LND15 LND16 LND17 LND18 LND19 LND20 RO M -SO CKET nCS_ROM nRD_M EM nW R_M EM 20 22 27 10 9 8 7 6 5 4 3 25 24 21 23 2 26 1 AT28C256-15PC 3 GND Vcc nFCS_CNT GND 14 +5V 28 3 1 3 nCCS_CNT 1 nFCS_SIO A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 CE OE WE 1 F C F C F C 1[3C] 1[3C] 1[3C] C27 0.1u JP6 JP3PIN CNT_CS JP5 JP3PIN SIO _CS JP2 JP3PIN M EM _CS 1[4B]2[3B] R79 10k R78 10k R77 10k R76 10k nCCS_SIO IO0 IO1 IO2 IO3 IO4 IO5 IO6 IO7 IC10 +5V FCS_RAM /nROM 3 IC-SOCKET(28PIN) CN8 FA0 FA1 FA2 FA3 FA4 FA5 FA6 FA7 FA8 FA9 FA10 FA11 FA12 FA13 FA14 11 12 13 15 16 17 18 19 nFCS_CNT nFCS_SIO FCS_RAM /nROM FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 2[5C] 2[5C] 2[5C] 3 +5V CLK2 CLK3 CLK4 2 2 2 nRST CLK2 CLK3 CLK4 R94 10k R88 10k R87 10k nCS_CNT nRD_IO nW R_IO R84 10k +5V R83 10k +5V R80 10k +5V nRST 4 LND25 LND24 LND23 1 3 5 9 11 13 4 GND Vcc 1Y 2Y 3Y 4Y 5Y 6Y 19 20 FA0 FA1 16 18 14 15 11 9 21 22 23 8 7 6 5 4 3 2 1 FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 74F04N(DIP) 1A 2A 3A 4A 5A 6A IC7 GND C18 0.1u GND Vcc OUT2 OUT1 GND R103 x R101 x GND R102 x +5V R100 x +5V RST OUT0 M SM 82C53-2RS GATE2 CLK2 GATE1 CLK1 GATE0 CLK0 CS RD WR A0 A1 D0 D1 D2 D3 D4 D5 D6 D7 IC11 7 +5V 14 2 4 6 8 10 12 R105 x GND TP64 TP63 TP62 C28 0.1u R104 x +5V GND 12 +5V 24 17 13 10 nCS_CNT nCS_SIO nCS_ROM nCS_RAM 5 1[3C] 5 CLK5 nCS_SIO nRD_IO nW R_IO 10k R89 RST CLK5 +5V FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 2[5C] 1[6D] 2[5C] RESET GND Vcc SYNDET/BD TXEM PTY M SM 82C51A-2GS-K R107 x GND TXC RXC DSR DTR CTS RTS F C F C F C F C 5 6 GND C20 0.1u 2 2 2 2 +5V 30 18 21 17 16 10 28 25 27 19 26 22 3 JP8 JP3PIN M EM _W R JP7 JP3PIN M EM _RD TXD RXD 3 1 3 JP4 JP3PIN IO _W R JP3 JP3PIN IO _RD TXRDY RXRDY nFM W R nM W R nFM RD 1 3 nM RD 1 nFIOW R 3 1 nIOW R nFIORD CLK CS RD WR C/D NC NC NC NC D0 D1 D2 D3 D4 D5 D6 D7 IC12 R106 x +5V 24 23 12 15 11 14 20 29 13 4 31 32 1 2 6 7 8 9 nFM W R nM W R nFM RD nM RD nFIOW R 1[6D] nIOW R 2[5C] nFIORD nIORD 1[6D] 2[5C] 1[6D] nIORD 6 R99 x R91 10k R90 10k R86 10k +5V R85 10k +5V R82 10k +5V R81 10k +5V +5V ' ' ^ ^ C22 0.1u C21 0.1u LND28 R93 10k 5 4 3 1 10 9 11 12 b g ´ ¯ b g ´ ¯ +5V J J R92 10k +5V LND27 p LND26 LND22 p LND21 nW R_M EM nRD_M EM nW R_IO nRD_IO Title y W 7 O ` 6 15 16 2 7 8 14 13 GND +5V LND32 LND29 LND30 LND31 Sheet3 of3 Revision:1 d ˝ “ Ł { [ h C24 0.1u C25 0.1u C23 0.1u 232TX 232RX GND Tim e: 12:50:31 Num ber:0 Date: 26-Dec-2003 File: 3.Sch Size: A2 V- GND Vcc V+ T2OUT R2IN T1OUT R1IN 232side-> M AX232CW E C2- C2+ C1- C1+ T2IN R2OUT T1IN R1OUT IC13 Ø – ˘ B Ø – ˘ B 7 ‡ 9 8 7 6 5 4 3 2 1 F RS232C } 8 D-SUB9PIN CN7 8 v } ˚ ‹ A B C D 付 録A A B C D 1 124 回路評価基板 125 付 録B 基本命令実行時の電圧の変動 CPU の電圧の変動は、演算データに依存していると考えられる。実際、差分電力攻撃 (DPA) は、 演算中のデータを推測し、その推測値と観測された電圧の変動との間に相関があるか否かを統計的 に処理して判定し、鍵を特定する攻撃である。 評価基板を用いたサイドチャネル攻撃の追試験に成功したことから、データと電圧の変動には確 かに相関があると考えられる。しかし、データと電圧の変動の間の相関の強弱は、実装 (パッケー ジ) に依存すると考えられる。そのため、本章では 今回の実証実験で用いたパッケージにおける データと電圧の変動の相関を簡易的に評価する。 算術演算命令の実行 B.1 サイドチャネル攻撃の追試験 4 章 において、未対策版 DES の暗号演算時の電圧の変動から DES の F 関数の繰り返しが確認できたことから、ジャンプ命令 (jmp) またはサブルーチンコール命令 (call) などは、他の命令よりも電圧の変動への影響が大きいことが予想される。 仮にジャンプ命令の回数やジャンプ命令後の処理時間が鍵データと関係がある場合には、SPA により内部で演算に使用している鍵データを推定できる可能性がある。 本節では、算術演算の演算命令と演算に用いられるオペランドと電圧の変動との相関について測 定実験を行った。測定実験としては、簡単な 2 種類の命令に対して、オペランドを変えることで、 命令の違いやオペランドの違いを電圧の変動から識別できるかどうかを主眼に測定および解析を 行った。 B.1.1 AND 命令の実行時の電圧の変動 AND 命令を実行したとき、ソースレジスタおよびオペランド値の影響による電圧の変動を調 べた。 同じプログラムを 100 回実行させた測定データを取得し、それを平均処理してノイズの影響を 減らし、演算データに依存した電圧の変動を観測しやすくしている。 測定実験に利用した命令は、AND A (reg A ← reg A & reg A) と、AND B (reg A← reg A & reg B) である。演算データの影響を調べるために、ハミング重みが同じで数値として異なる 00h と ffh などの 20 個のデータを用いて調べた (カッコ内はハミング重みをあらわす)。 演算データ 00h (0), 01h (1), 03h (2), 05h (2), 06h (2), 0ah (2), 0ch (2), 10h (1), 30h (2), 50h (2), 60h (2), a0h (2), c0h (2), 11h (2), 33h (4), 55h (4), 66h (4), aah (4), cch (4), ffh (8) 126 付 録B 基本命令実行時の電圧の変動 AND B 命令の実行では、reg B を 00h に固定し、reg A として上の 20 個の演算データを用い て実験した。 測定ではサンプリングレートを 1G samples/sec として測定を行った。図の横軸は、時間を表し ており、単位はナノ秒である1 。 AND A 命令実行時 最初に AND A の命令を実行したときの電圧の変動について、グラフを作成して演算データと の相関について考察する。 AND 命令の実行にかかる 4 clock 間の電圧の変動は、図 B.1 となった。図 B.1 は、20 個の演 算データの結果を一つのグラフに表したものである。この図から、2, 4 clock 目では 20 本ある波 形が、ほぼ揃っているが、1, 3 clock 目で波形が分かれていることがわかる。4 つの clock はそれ ぞれ、1 clock 目が命令フェッチ、2 clock 目が命令ラッチ、3 clock 目が演算の実行、4 clock 目が リフレッシュを行っていると考えられる。したがって、3 clock 目がデータに依存して電圧が変動 する部分と考えられる。3 clock 目のみ拡大したものが、図 B.2 である2 。 図 B.1: AND A 演算時の電圧の変動 図 B.2 からわかるように、21 nsec、86 nsec 近辺ではデータの違いにより、波形が分かれている ことが確認できる。このことから、今回測定に利用した Z80 では、データに依存した電圧の変動 を観測できることがわかった。しかし、このグラフを見た限りでは、ハミング重みが大きいと電圧 の変動が大きいといった簡単な相関関係は見い出せない。 18 MHz (125 nsec) なので、目盛 1 から 125 が 1 clock である。 個の演算データの電圧の変動のみを表示している。 2 図を見易くするため、6 B.1. 算術演算命令の実行 127 図 B.2: AND A 演算時の 3 clock 目 さらに、演算データのハミング重みが同じ場合の電圧の変動を調べるため、ハミング重みが 4 の 演算データを演算したときの電圧の変動をグラフにしたものが 図 B.3 である。 図 B.3 から、今回測定に利用した Z80 では、ハミング重みが同じであっても演算データによっ て電圧の変動は若干異なることが確認できる。 128 付 録B 基本命令実行時の電圧の変動 図 B.3: AND A 演算時のハミング重みの影響 B.1. 算術演算命令の実行 129 AND B 命令実行時 AND B 命令実行時の電圧の変動を表したものが、図 B.4 である。データの測定方法および演算 データは、AND A 命令を実行したときと同じである。AND B 命令を実行したときも、1, 3 clock 目で波形が分かれている。3 clock 目の電圧の変動を拡大したものが、図 B.5 である3 。 図 B.4: AND B 演算時の電圧の変動 図 B.5 からもわかるように、演算データによって波形が分かれていることが確認できる。このこ とから、今回測定に利用した Z80 では、データに依存した電圧変動が観測できることがわかった。 AND A 命令のときと同じように、演算データのハミング重みが同じ場合の電圧の変動を調べる ため、ハミング重みが 4 の演算データを演算したときの電圧の変動をグラフにしたものが図 B.6 である。 AND A の時と同様に、図 B.6 から、今回測定に利用した Z80 では、ハミング重みが同じであっ ても演算データによって電圧の変動が若干異なることがわかる。 3 見易くするために、表示する波形の数を 5 個に減らしている。 130 付 録B 基本命令実行時の電圧の変動 図 B.5: AND B 演算時の 3 clock 目 図 B.6: AND B 演算時のハミング重みの影響 B.1. 算術演算命令の実行 B.1.2 131 XOR 命令の実行時の電圧の変動 共通鍵暗号アルゴリズムにおいて、よく利用される排他的論理和 (XOR) 演算の電圧の変動を、 AND 命令のときと同様に測定し、解析を行った。実験手順および測定条件、演算データなどは、 AND 命令の測定を行ったときと同じである。 測定実験で測定した命令は、XOR A (reg A ← reg A ⊕ reg A) と XOR B (reg B ← reg A ⊕ reg B) の 2 種類である。 測定した結果は、図 B.7 のようになった。XOR 演算においても 2, 4 clock 目は、波形がそろっ ているが、1, 3 clock 目は波形は重なっていない。そこで、3 clock 目を拡大したものが、図 B.8 である。XOR A 演算の実行時にも、演算データによって、波形が異なっていることがわかる。 図 B.7: XOR A 演算時の電圧の変動 同じハミング重みの異なるデータを演算したときの電圧の変動を表したものが、図 B.9 である。 演算データのハミング重みが一緒であっても、波形がきれいに重なるわけではない。 XOR B 命令実行時 XOR B の命令も XOR A と同様に測定したところ、その傾向は AND 命令実行時と同じであっ た。測定時のグラフを図 B.10、図 B.11、図 B.12 に示す。 132 付 録B 基本命令実行時の電圧の変動 図 B.8: XOR A 演算時の 3 clock 目 図 B.9: XOR A 演算時のハミング重みの影響 B.1. 算術演算命令の実行 133 図 B.10: XOR B 演算時の電圧の変動 図 B.11: XOR B 演算時の 3 clock 目 134 付 録B 基本命令実行時の電圧の変動 図 B.12: XOR B 演算時のハミング重みの影響 135 付 録C サンプリングレート 製作した基板において、電圧の変動を測定する際のサンプリングレートは、本報告書の 4 章に記載 したように、500M samples/sec としいる。ここでは、500M samples/sec とした理由を説明する。 同じ平文と鍵を用いて、未対策版 DES を動作時の 1 µ sec 間の電圧の変動をサンプリングレー トを変えて測定した。同じ条件で、2 回測定を行い、その結果をグラフにしたものが図 C.1、図 C.2、図 C.3、図 C.4、図 C.5 になる。それぞれのグラフにおいて、横軸は時間であり、縦軸は電圧 である。 図 C.1 は、サンプリングレートを 50M samples/sec、以下同様に図 C.2 は 100M samples/sec、 図 C.3 は 200M samples/sec、図 C.5 は 1G samples/sec としたときの結果である。 同じデータを使ったときの電圧の変動を測定しているので、本来ならば 2 つの波形は重なるはず である。ところが、サンプリングレートが 200M samples/sec 以下では、同じ演算を行っているに も関わらず、測定したデータは違う波形となっていることがわかる。500M samples/sec の図 C.4 では、グラフでは 2 つの線が重なっており、ほぼ同じデータを測定できていることがわかる。 図 C.1: サンプリングレート 50M samples/sec このようにサンプリングレートにより、測定結果が大きく異なるのは、クロックのジッタが原因 136 付 録C 図 C.2: サンプリングレート 100M samples/sec 図 C.3: サンプリングレート 200M samples/sec サンプリングレート 137 図 C.4: サンプリングレート 500M samples/sec 図 C.5: サンプリングレート 1G samples/sec 138 付 録C サンプリングレート と推測している。今回製作した基板はクロック信号に同期するシステムとなっているため、クロッ ク信号が時間軸方向に変動しないのであれば、同じ測定条件で複数回測定した結果はほぼ同じ値に なるはずである。 ところが、実際はクロック信号はジッタの影響により、時間軸方向に処理がずれることがある。 サンプリングレートが低い場合には、ジッタによるずれの影響により、サンプリングレートが 50M samples/sec の場合、最大 20 nsec ずれてしまうことになる。動作時の電圧の変動が緩やかである ならば、このずれは問題にならないが、変動が激しい場合には、時間軸のずれのために、同じ平文 と鍵を使って同じ演算を行っても、得られるデータは大きく異なってしまうのである。 一方、サンプリングレートが高いと、ジッタにより測定ポイントがずれたとしても、その差はわ ずかなものとなる。500M samples/sec 以上のサンプリングレートで取得した 図 C.4、図 C.5 は、 二つの波形が重なっているように見えるが、時間方向の解像度を上げてみると、若干横軸方向にず れがあることがわかる (実際、500M samples/sec で取得したデータにおいて、DPA に成功したこ とから、この程度のずれは攻撃には問題がないことがわかった)。 DPA では波形トレース間での同期が前提となるが、測定した結果から、500M samples/sec 以 上のサンプリングレートならば、測定した波形がほぼ重なることから、今回の評価基板では 500M samples/sec 以上のサンプリングレートが必要と推測した。 サンプリングレートを高くするほど、高い精度の情報を得ることができるが、その場合には攻撃 に用いるデータ数が多くなり、データ処理に時間がかかってしまうという問題も生じる。 4 章のサイドチャネル攻撃の追試験におけるサンプリングレートは、以上のような考察により定 められた値である。 平成 15 年度 経済産業省委託 (基準認証研究開発事業) 耐タンパー性に関する標準化調査研究開発 実 証 実 験 報 告 書 第 二 部 平成 16 年 3 月 発行 印刷 財団法人 日 本 規 格 協 会 〒107-8440 東京都港区赤坂 4-1-24 電話(03)3592- 1408 スタンダード・メンテナンス 株式会社 〒107-8440 東京都港区赤坂 4-1-24 日本規格協会ビル内 電話(03)3585- 4558 -禁無断転載―