執筆の目的
情報セキュリティとか暗号技術特論とかの授業で暗号化の方式とか特徴とか勉強したけど、結局この方式どんなんだっけとか最終的にどれが主流なんだとか、単位はとったけどそこらへんうやむやなのでまとめとこうという感じ。
なので大学の授業で取り扱う暗号化技術について、大学の授業の流れに沿って要点重視で復習していきます。
執筆の際には以下の本をもとにしました。
暗号技術入門 第3版 秘密の国のアリス (著: 結城 浩)
(いずれ実装してみた系記事も書けたらな)
あと、とりあえずここでは暗号アルゴリズムに限定して書く。署名とかは別記事で。
良い暗号とは
どの暗号分野の本でもきっと冒頭に書かれるであろう要点
-
良い暗号とは、より機密に作られ誰もが解けないもの、ではない。
-
そのアルゴリズムが世に公開されてもなお強い解読困難性をもち、さらにあらゆる実装環境において使用することができるもの(個人的解釈)
本に書かれてた暗号とセキュリティの常識
- 機密な暗号アルゴリズムは使わないべし
- 「独自に考案した完璧な暗号アルゴリズム」は必ず解読されるから、大人しく一般的なのを使おう。隠すことによるセキュリティ(Security by obscurity)は危険かつ愚かな行為。
- どんな強力な暗号でも必ず暴かれる
- 今までに絶対に暴かれなかった暗号は存在しない
- そして暴かれたときには大きな損失を伴う
- どんな暗号もいつかは必ず解かれるが、それに要する時間と、それによって入手されてしまう情報の価値のトレードオフを考えることが大事
- 強い暗号アルゴリズムを生み出すことは非常に困難
- 非常に困難なのでみんなで協力して作り上げよう。
- 暗号の強さとは、世の中に存在するあらゆる暗号スペシャリストたちが解読に挑み、それでも解読できなかった、という実績である。
- 弱い暗号は暗号化したほうが危険
- 利用者の「暗号してるから安全」という意識が生まれる一方、解読者からしたらいい鴨になってしまう。暗号を過信してはいけない。
- 暗号はセキュリティのほんの一部
- 暗号化したからといってその秘密が完全に守られてるわけではなく、例えばその前後に盗聴されてたり、サポートセンターを装い利用者に一時的に暗号化を停止させたりなど、情報を盗み取る手段は無数にある。
- 結局これらの暗号を利用する「人間」次第
基本的な暗号化の構成
- 暗号アルゴリズムは公開されているもの
- 鍵は秘匿情報
暗号技術の大まかなジャンル分け(WIP)
やっぱり全体像は把握しておいたほうがいい。ここで取り扱ったものを生やしていくような形にする。
- 対称暗号(共通鍵暗号)
- ストリーム暗号
- シーザー暗号
- 単一換字暗号
- ブロック暗号
- ストリーム暗号
- 非対称暗号(公開鍵暗号)
攻撃法について
暗号技術を考える際、それに対して攻撃法についても知っておく必要があるのでここで簡単にまとめとく
- ブルートフォースアタック(全文探索)
候補となりうる全ての鍵で解読を試みる方法 - 頻度分析
その言語で使用される文字および単語の出現頻度から、変換表を推測していく方法
対称暗号(共通鍵暗号)
暗号化鍵と復号鍵が同一。そのため鍵配送問題が生じる。
- ストリーム暗号
データの流れ(ストリーム)を順次処理していく - ブロック暗号
64bit ごと、とか一定長の文字列ごとに暗号化する
シーザー暗号
アルゴリズム
ここ最近はやっている謎解きにもよくみられる、それぞれの文字を50音表で何文字ずらしてってやつ。例えばアルファベットでやると
answer
という平文に対して、それぞれの文字を2つずらすことで暗号化するとしたら
abcdefghijklmnopqrstuvwxyz
↓
CDEFGHIJKLMNOPQRSTUVWXYZAB
という対応関係になるから
CPUYGT
という暗号文が完成する。CPUYGT って文字列を見ても一見なんのことかわからない。この時の暗号アルゴリズムと鍵は
暗号アルゴリズム → 文字を規則に従ってずらす
鍵 → ずらす文字数(上記の例では2)
攻撃法
鍵の種類がたかが知れてる(ex.アルファベットの場合26種類)→ブルートフォースアタックが有効
単一換字暗号
アルゴリズム
文字変換表に従って平分の文字を置き換えていく。(これも謎解きでよく見られる。例えばPCのキーボードを変換表に見立てて「アルファベット→ひらがな」みたいな。実際に利用するなら対応表は独自で作成すると思いますが)
この時の暗号アルゴリズムと鍵は
暗号アルゴリズム→対応表をもとに文字を変換
鍵→対応表
攻撃法
鍵空間(鍵の候補の集合)の大きさを計算すると、使用可能な文字の種類をn種とするとn!もの鍵の候補が存在するので、シーザー暗号に比べかなり多くなり、ブルートフォースアタックでの攻撃は困難
それぞれの文字の変換先が常に固定であるため、頻度分析が有効(平分が何かしらの文章じゃなくて頻度分布に偏りがない文字列なら大丈夫?例えば「使い捨てパッド→単一換字」とか、でも結局鍵管理の問題とか鍵配送問題とかはあるけど)
エニグマ
単一換字暗号の鍵の部分を日毎に変えたり、特殊な機械を使って複雑化したりしたやつ。結城さんの本では詳しく説明されてるのでそちらを参考に。
要点としては、鍵の中にさらに暗号アルゴリズムを導入したもの