暗号技術入門　第三版

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3976844/49df4f1e-faa8-7b20-56a8-f9784fca42f8.png">

読書記録。

## 読者プロフィール
組込み系エンジニア。
暗号、セキュリティは素人。（応用情報は昔取った）
開発する製品によっては純正品かどうか認証するので暗号技術には関わることがある。が、認証の中身はブラックボックスで正直よくわかっていない。

## 雑感
暗号技術について確かな理解が得られる非常に良い本だった。入門書であるため個別の項目については概要までであるが、概要と詳細の線引きが絶妙。数学が必要最小限しか登場せず、シンプルながらポイントを押さえた図解のおかげでスムーズに読み進めることができる。また、暗号の歴史と各技術の関連性が示されており、それぞれの技術の必要性に納得感がある点が良い。各暗号技術の説明とセットで攻撃手段が提示されているのだが、毎度攻撃者の発想に驚かされる。総じて満足度が高く、おすすめできる一冊。

# あらすじ
本書は暗号技術が必要な背景と、その技術の説明、攻撃方法と対策を丁寧に説明してくれている。また、章ごとに理解度チェックの簡単な問題が用意されており理解度を確認しながら読み進めることができる。

# 歴史上の暗号
文字を事前に決めた数字分ずらすという単純なシーザー暗号から始まり、ある文字を別の文字に変換する単一換字変換、映画の題材にもなり知名度の高いエニグマという歴史上の暗号について触れている。しかしながらこれらは暗号としては大きな弱点があり、すでに過去のものとなっている。
例えば単一換字変換は鍵空間（鍵の候補の個数。大きいほど強い暗号）こそ広大だが、頻出文字に着目した頻度分布による解析により解読されてしまうという弱点がある。エニグマの理論はとても複雑だが、暗号化の仕組み上の弱点のほかに、通信鍵の一部は人間の考えた文字列を含めいる点や、日替わり解読表という分厚い冊子を安全に運搬するといった弱点があった。

# 共通鍵暗号
歴史上の暗号では「アルファベット」や「ひらがな」といった文字が暗号化の対象であったが、コンピュータが一般化した現代の暗号はビット列が暗号化の対象となる。そして共通鍵暗号の肝はあるビット列に対して２回XOR（排他的論理和）するともとのビット列に戻るという特徴である。この特徴によって、１度目のXORが暗号化として働き、２度目のXORが複合化として機能することになり、共通鍵暗号が実現されている。つまり共通鍵暗号を簡単にいうと適当な長さのビット列を鍵とし、送信者は鍵と平文のXORをとり暗号化し送信し、受信者は暗号文と鍵をXORし復号し平文を得ることである。広く普及した暗号化方式ではあるが、エニグマ等の古典暗号と同じく鍵をどのように運搬するのか？という問題は解決できていない。

共通鍵暗号としてDESという鍵長が64bit(実質56bit)の暗号について述べられているが、これはビット長が短く全探索（ブルートフォースアタック）によって突破されてしまうため現在は使用されていない。しかしDESで用いられているファイステルネットワークという構造は暗号化と複合化が全く同じ手順で実現できるという特徴を備えており、多くの暗号アルゴリズムで採用されている。

DESに代わる対象暗号としてAESがあり、これの選定プロセスについて述べられている。選定プロセスを公開しコンペ方式で競うことが暗号の強さを保証することになる。またAESのアルゴリズムについても述べられている。

## ブロック暗号のモード
共通鍵暗号は鍵のサイズ（DESであれば64bit、AESであれば128bit）で暗号化されるため、長い原文（平文）に対しては順次暗号化していくことになり、順次処理の方法（ブロック暗号のモード）について詳しく述べられている。最も脆弱なECBモードでは平文を順次暗号化するため、平文の順序がわかれば暗号を解読せずとも攻撃が可能となる。（銀行振り込みで宛先と金額がわかれば金額だけを入れ替えるような攻撃が可能となる）。
前段の暗号化済ブロックを次段の入力にするCBCというモードが考案されたが、最初の暗号化のためのブロック（初期ベクトル）が必要で、この初期ベクトルが攻撃対象になってしまうという課題があった。また前段の出力を次段の入力とするためシリアルに暗号化が必要で処理時間がかかる点も課題であったが、それらを解消したパラレルに暗号化が可能なCTRモードについて説明されている。

# 公開鍵暗号
暗号の世界に一大変革を生み出したと述べられている。共通鍵暗号で問題となっていた鍵の運搬を不要にする暗号化方式であり、その代表格であるRSAについて詳細に記載されている。RSAは巨大な数を求めることはできるが、その数を高速に素因数分解する手段が見つかっていない、という点を拠り所にしている。本書ではRSAの具体的な演算や、小さいな数で公開鍵と秘密鍵の作成と、それを用いた暗号化と複合化を見せてくれている。

共通鍵暗号の鍵を公開鍵暗号により暗号化することで安全に鍵の配送をおこなうハイブリッド暗号システムについて図解されている。また、RSA以外の公開鍵暗号方式として楕円曲線暗号について付録にて概要が説明されている。

# 認証
公開鍵暗号、共通鍵暗号は盗聴を防ぐことはできるが改ざんやなりすましといった攻撃を防ぐことはできない。認証の説明では、その肝となる一方向ハッシュ関数についてハッシュ関数が備えるべき特性について述べている。また複数のハッシュアルゴリズムについて安全性やアルゴリズムについて、ハッシュ自体にへの攻撃について述べている。

## 改ざん、なりすましとメッセージ認証コード
いくら通信経路が暗号化されていたとしても、改ざんされては困るため、その対策としてメッセージ認証について述べている。メッセージ認証とは送信者と受信者がそれぞれ送信したメッセージのハッシュ値と受信したメッセージのハッシュ値が一致することを確認することである。

また攻撃者によるなりすましについて、メッセージ認証コードと共通鍵暗号と組み合わせることで鍵を知っている＝なりすましではないためなりすましを検知することができる。つまりメッセージ認証コードを用いることで改ざんやなりすましを検出できるようになる。

## 否認とデジタル署名
デジタル認証コードを用いたとして、送信者に「そんなメッセージは知らない」と否認されてしまった場合は太刀打ちできないらしい。なぜなら送信者だけでなく受信者の自作自演の可能性を否定できないから。その対策としてデジタル署名がある。

デジタル署名とは、署名する人が自分の秘密鍵を用い、メッセージのハッシュ値を暗号化することである。受信者は公開鍵を用いハッシュ値を復号することができ、これにより送信者＝秘密鍵を知っている＝本人という図式が成り立つ。

デジタル署名によって否認に対抗することができるようになったが、受信者の得た公開鍵が本物では無い可能性がある。つまり攻撃者によるデジタル署名であり、攻撃者の公開鍵になりすましされてしまったようなケースである。これは簡単に言えば公開鍵が本物かどうか？という点に尽きる。公開鍵が本物であることを示すものとして証明書というものがある。

## 証明書
証明書とは公開鍵が本物かどうかを示すものであり、本書では２つの方法が示されている。

### 認証局による公開鍵証明（証明書）
本人証明したい公開鍵の所有者（ボブ）は、信頼できる第三者（トレント）のデジタル署名を公開鍵に施すことで「この公開鍵はボブのものである」ということとトレントに証明してもらうことができる。ただし、信頼できる第三者のなりすましが考えられるため、最終的には認証局の信頼性が重要になる。

ルートCA（認証局）はルートCAを中心に下位の認証局に連なるような構成で、下位の認証局は上位の認証局のデジタル署名付きの証明書を持つ。署名の検証はルートCAの公開鍵を取得するところから始まり、次第に末端の認証局の公開鍵を得ることができる。これにより末端の認証局のデジタル署名されているボブの公開鍵はボブ本人のものであると証明することができる。

### 信頼の網による公開鍵の正当性検証
こちらの方法では認証局は登場しない。認証局を設置せず、個人同士で信頼を確立するという手法である。これは自分の信頼する人物のデジタル署名付きの証明書は本物であるとみなすというものである。信頼する人物や何人以上の署名が必要かなどは個人で設定できる。この手法は国家すら信用できないような状況でも利用できる形態を目指したものであるため、公的要素の強い認証局があることを前提としていないものになっている。


# 応用、発展
## SSL/TLS
いわゆるHTTPSである。これまで出てきた暗号技術の具体的な利用形態が述べられている。また暗号アルゴリズムを入れ替え可能な構成（フレームワーク）であるため、過去に実際に発生した攻撃に対して暗号技術の進化とSSLの変遷を知ることができる。

## ビットコイン
ビットコインの技術的な側面について説明している。ビットコインはP2Pネットワークで動作する決済システムで、資産の移動を暗号技術で担保していることが説明されている。またブロックチェーンには過去すべての取引の記録されており、暗号技術との関連が示されている。