有名な『数学ガール』の著者でもある、結城浩さんの『暗号技術入門』を読み、内容をまとめました。
この本はIPAの試験である情報処理安全確保支援士試験(SC)対策の本としても評判が高く、暗号の基本が分かりやすくまとめられています。
AmazonのKindle版だと2970円、単行本だと3300円です。(2020/7/26現在)
『暗号技術入門 不思議の国のアリス』をオススメする人
内容としては暗号技術の処理の内容などの細かいところまで説明されていますが、専門用語ではなく簡単な言葉で説明いる、例え話で処理の内容を説明してくれている、などの理由からかなり読みやすいです。
ただし、研究などで専門的なことを知りたい方や実装をしたい方には物足りないと思いますので、暗号技術を学びたい人が、暗号技術の全体を見るために1冊目に手に取る本、という位置づけで読むと良いと思います。レベルとしては応用情報技術者試験(AP)の問題がほとんど理解できるか、合格した後くらいがオススメです。
また、情報処理安全確保支援士(SC)を受験予定の方にもおすすめです。
解説付き一問一答形式で問題演習を行うことができ、私もかなりお世話になっている情報処理安全確保支援士ドットコムにも副読本として紹介されている他、いくつかのブログでもオススメ書籍として紹介されています。
私もこのような試験対策目的で購入しました。
ただし、試験対策としてはもちろん参考書を読んで過去問を解くことの方が優先順位は高いです。
関連したことが出て見たことあるぞ!テンションは上がるかもしれませんが、問題傾向が分からなくて細かい部分を答えられない、ということもあり得るため、試験対策というよりも、試験までまだ時間が残されてるうちに関連した書籍として読むのが良いです。
難易度:★★★☆☆【星3つ】
前述の通り、応用情報技術者試験(AP)合格~情報処理安全確保支援士試験(SC)の勉強中くらいのレベルです。
オススメ度:★★★★☆ 【星4つ】
『暗号技術入門 不思議の国のアリス』の構成と内容
『暗号技術入門 不思議の国のアリス』の目次
目次は以下のようになります。
暗号技術とセキュリティについて歴史を踏まえて広く解説されています。
『暗号技術入門 不思議の国のアリス』の目次
第I部 暗号
- 第1章 暗号の世界ひとめぐり
- 第2章 歴史上の暗号
- 第3章 対称暗号(共通鍵暗号)
- 第4章 ブロック暗号のモード
- 第5章 公開鍵暗号
- 第6章 ハイブリッド暗号システム
第II部 認証
- 第7章 一方向ハッシュ関数
- 第8章 メッセージ認証コード
- 第9章 デジタル署名
- 第10章 証明書
第III章 鍵・乱数・応用技術
- 第11章 鍵
- 第12章 乱数
- 第13章 PGP
- 第14章 SSL/TLS
- 第15章 暗号技術と現実社会
付録 楕円曲線暗号・暗号技術確認クイズ
第1章 暗号の世界
暗号技術として、以下の6つが特に重要な役割を果たす。
これらが盗聴、改ざん、なりすまし、否認というセキュリティに関する脅威から防衛を行い、機密性・正真性・認証・否認不可能性という特性を守る。
- 対称暗号
- 公開鍵暗号
- 一方向ハッシュ関数
- メッセージ認証コード
- デジタル署名
- 疑似乱数生成器
これらの6つについて各章で詳しく解説されているので、これらを中心に解説を行います。
また、暗号の常識として下記のような項目がある。「独自に開発した暗号なら安心」「とりあえず暗号を使っておけば大丈夫」などと思いがちだが、それは大きな間違い。
- 秘密の暗号アルゴリズムを使うな
- 弱い暗号は暗号化しないよりも危険
- どんな暗号もいつかは解読される
- 暗号はセキュリティのほんの一部である
第3章 対称暗号(共通鍵暗号)
対称暗号の代表例として、DESとAESがある。
DES
64ビットの平文(ビット列)を1ブロックとし、ブロック単位で処理を行うブロック暗号の一種である。
DESの基本構造はファイステルネットワーク、ファイステル構造と呼ばれる。
ファイステルネットワークでは、ラウンドと呼ばれる暗号化の1ステップを何度も繰り返すようになっている。

1ラウンドの処理内容は、
- ラウンドへの入力を左右に分ける
- 右を、そのまま右に送る
- 右を、ラウンド関数fに送る
- ラウンド関数は、右とサブ鍵を使って、ランダムに見えるビット列を計算する
- 得られたビット列と、左とのXORを計算した結果を暗号化された左とする
異なるサブ鍵を用いて何ラウンドも処理を繰り返し、各ラウンドごとに左右を交換することで全体を暗号化する。
ファイステルネットワークには、以下のような特徴がある。
- どんなにラウンド数を増やしても、複合化が保証される。
- ラウンド関数fにどんな関数を使っても、複合化が可能である
- XORの性質より、復号化と暗号化は全く同じ構造で実現できる。
(サブ鍵を使う順番をラウンドごとに逆にするだけで復号化できる)
AES
Rijndaelという対称暗号アルゴリズムがAESとして選定された。
DESと同じく複数のラウンドから構成され、SPN構造という構造が使われている。
入力ブロックは128bit(=16Byte)であり、以下の順序で行われるラウンドを10~14回繰り返す。
- SubBytes : 換字表(単一換字暗号の256字バージョン)から、1バイトの値(0~255の値)を1バイトの値へ置換する。
- ShiftRows : 4バイト単位にまとまった行を左にシフトして混ぜこぜにする。
シフトするバイト数は行によって異なる。 - MixColumns : 4バイトの値をビット演算を用いて別の4バイトの値に変換
- AddRoundKey : 3の出力とラウンド鍵とのXORをとる
復号化は、この逆の処理を行えばよい。
ファイステルネットワークに比べ、ラウンド数を少なくできる、SubBytesはバイトごとに、ShiftRowsは行ごとに、MixColumnsは列ごとに並列処理ができるというメリットがある。
第4章 ブロック暗号のモード
ブロック暗号を繰り返す方法のことを、ブロック暗号の「モード」という。
主に以下の5種類が存在する。
- ECBモード(電子符号表モード)
- CBCモード(暗号ブロック連鎖モード)
- CFBモード(暗号フィードバックモード)
- OFBモード(出力フィードバックモード)
- CTRモード(カウンタモード)
第5章 公開鍵暗号
暗号化と復号化に異なる鍵を使うことで、鍵配送問題を解決できる。
通信の流れは以下。
- 受信者が公開鍵・プライベート鍵の鍵ペアを作る
- 受信者が自分の公開鍵を送信者に送る
- 送信者は、受信者の公開鍵を使ってメッセージを暗号化する
- 送信者は、暗号文を送る
- 受信者は、自分のプライベート鍵を使って、暗号文を復号化する
現在最も使われている公開鍵暗号アルゴリズムとして、RSAがある。
RSAの暗号化と復号化は以下の式で表すことができる。
暗号文 = 平文^E mod N (RSAによる暗号化)
平文 = 暗号文^D mod N (RSAによる復号化)
公開鍵は(E,N)、プライベート鍵は(D,N)となる。
RSAへの攻撃としては、以下のようなものがある。
- ブルート・フォース・アタックでDを見つける
→極めて困難。 - man-in-the-middle攻撃
→RSAを解読するわけではないが、機密性に対して非常に有効な攻撃 - 選択暗号文攻撃
→攻撃対象の暗号文について、平文の情報がわずかにもれる
第6章 ハイブリッド暗号システム
公開鍵暗号は、対称暗号に比べて処理速度がずっと遅いという問題に対する解決策
以下の仕組みで成り立つ
- メッセージは対称暗号で暗号化
- 対称暗号の暗号化で使うセッション鍵は、疑似乱数生成器で生成する
- セッション鍵は、公開鍵暗号で暗号化
- 公開鍵暗号の暗号化で使う鍵は、ハイブリッド暗号システムの外部から与える
第7章 一方向ハッシュ関数
一方向ハッシュ関数は、入力と出力がそれぞれ1つずつあり、ハッシュ値で正真性、完全性のチェックを行う。
ある時点からファイルの正真性が保たれているかを確認したい時は、その時点でとったハッシュ値と、現在のハッシュ値を比較すればよい。
一方向ハッシュ関数の具体例としては、MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3が存在する。
中でもSHA-3は一方向ハッシュ関数の新しい基準となっており、アルゴリズムとしてKECCAKを用いる。
一方向ハッシュ関数は「改ざん」は検出できるが、「なりすまし」を検出することはできない。「なりすまし」については正真性の証明だけではなく認証が必要となる。
第8章 メッセージ認証コード
正真性を確認し、メッセージの認証を行う技術であり、頭文字を取ってMACと呼ばれる。
メッセージ認証コードは、任意長のメッセージと、送信者と受信者が共有する鍵という2つの入力を基にして、固定ビット長の出力であるMAC値を計算する関数。
受信したMAC値と、予め共有しておいた鍵とメッセージから計算したMAC値が等しかったら送信者のなりすましが無いと判断する。
一方向ハッシュ関数を使って、メッセージ認証コードを実現することができ、その方法の1つとしてHMACがある。
メッセージ認証コードに対する攻撃としては、再生攻撃、鍵の推測による攻撃(ブルート・フォース・アタック、誕生日攻撃)が存在する。
メッセージ認証コードでは、「第三者に対する証明」と「否認防止」は解決できない。
第9章 デジタル署名
改ざんやなりすましを防止し、否認を防止することが出来る技術
メッセージ認証コードは送信者と受信者は鍵を共有する必要があったが、デジタル署名時には別の鍵を使う。
デジタル署名という技術には、「メッセージの著名を作成する」という行為と、
「メッセージの著名を検証する」という行為の2つが存在し、
それらに対応してそれぞれ別の鍵を用いる。
「著名用の鍵」は著名をする人だけが持ち、「検証用の鍵」は著名を検証する人なら誰でも持つことが出来る。
デジタル署名でも同じように公開鍵とプライベート鍵の鍵ペアを用いる。
メッセージをプライベート鍵で暗号化することが著名の作成に相当し、その暗号文を公開鍵で復号化することが著名の検証に相当する。
デジタル署名の方法としては、以下の2つの方法が存在する。
- メッセージに直接署名する方法
- メッセージのハッシュ値に署名する方法
デジタル署名に対する攻撃として、man-in-the-middle攻撃、一方向ハッシュ関数に関する攻撃、デジタル署名を使った公開鍵暗号への攻撃、潜在的偽装が存在する。
第10章 証明書
デジタル署名は、「署名の検証を行う時に用いる公開鍵が、本物の送信者の公開鍵であること」を前提とした技術であり、正しい公開鍵を入手するために考えられたのが証明書である。
公開鍵証明書は、認証局によるデジタル署名が行われたもの。単に証明書と呼ぶこともある。
証明書を使うシナリオの例は以下のようになる。
- 受信者が鍵ペアを作成する
- 受信者は、認証局に自分の公開鍵を登録
- 認証局は、受信者の公開鍵に自局のプライベート鍵でデジタル署名をして証明書を作成
- 送信者は、認証局のデジタル署名がついた受信者の公開鍵(証明書)を入手
- 送信者は、認証局の公開鍵を使ってデジタル署名を検証し、受信者の公開鍵が正しいことを確認
- 送信者は、受信者の公開鍵でメッセージを暗号化し、受信者へ送信
- 受信者は、暗号文を自信のプライベート鍵で復号化し、アリスのメッセージを読む
公開鍵基盤(PKI)は、公開鍵を効果的に運用するために定められた多くの規格や仕様の総称であり、利用者・認証局・リポジトリの3つの構成要素からなる。
認証局(CA)は、証明書の管理を行う人のことで、以下のようなことを行う。
- 鍵ペアを作成する(利用者が作成する場合もある)
- 公開鍵の登録の前に、本人を認証する
- 証明書を作成し発行する
- 証明書を破棄する
証明書に対する攻撃としては、公開鍵の登録前への攻撃、似た人間を登録する攻撃、認証局のプライベート鍵を盗み出す攻撃、攻撃者自身が認証局になる攻撃、公開鍵が無効になってから証明書破棄リスト(CRL)が標的に届くまでの時間差を利用した攻撃が存在する。
第11章 鍵
鍵配送問題を解決する方法の1つとして、離散対数問題が困難であることを利用したDiffie-Hellman鍵交換が存在する。このアルゴリズムは、他人に知られても構わない情報を2人が交換するだけで、共通の秘密の数を作り出すという方法。鍵を交換するわけではなく、共有する鍵を計算によって作り出している。
第12章 乱数
乱数は暗号技術の中で極めて重要な役割を担っており、攻撃者に見破られないために乱数を使う。
乱数の性質は無作為性、予測不可能性、再現不可能性という3つに分類され、後のものほど厳しい条件のものとなる。
乱数を生成するソフトウェアを疑似乱数生成器と呼ぶ。
まとめ
キーワードを中心に拾い出したためいかつい記事となってしまいましたが、本文ではこれらの技術について易しい言葉で解説されているので、気になる方は手に取ってみてください。
コメント