暗号技術入門

| Comments

結城先生の暗号技術入門書。雑なメモ書きを残しておきます。

新版暗号技術入門 秘密の国のアリス

暗号技術入門

概要

暗号化の目的

  • 機密性の確保
  • 改竄の防止 正真性
  • 本人の操作の証明 署名

暗号技術で用いられる技術一覧

  • 対象暗号
  • 公開鍵暗号
  • 一方向ハッシュ
  • 乱数生成
  • デジタル署名
  • メッセージ認証

過去の暗号

ソフトウェア以前のもの。いずれも共通鍵を必要とする。

シーザー暗号

総当たりに弱い

単一換字

総当たりに強い。アルファベットだけでも26!通り

頻度分析に弱い

エニグマ

戦時中に活躍。

事前に共有した鍵でローターを設置して、通信の始めの文字でワンタイムの鍵を暗号化して送信。その後暗号を復号化する。

問題

ワンタイムの鍵を考えるのが人である。 複数の暗号化されたワンタイム鍵から、その日の共通鍵を導出できた。

対象暗号

使い捨てパッド

その平文の長さに合わせたランダムな01のマスクをかける。 01の全てのパターンになりうるため、鍵を知らないと復号化は不可能。

ただし鍵を安全に送れるならパスワードも送れることになる。

事前に一定長のマスクを送っておくことは可能か?

! 使い回すと解読が可能になってしまうが、そうでないなら有効か。

本文より長いマスクを事前に送っておけば、二度当てる心配もない。 長すぎて平文がどこまでかわからない、という問題は心配しなくてもわかるだろう。

DES

パリティチェックの仕組み。

トリプルDESは鍵が増えたというだけ?

共通鍵暗号のモード

使い捨てパッドでない限り鍵は本文より短くなる。 そのため、その暗号鍵を使いまわすパターンがいくつか存在する。

ECB

平文をブロックに切って繰り返し暗号化する。 それぞれのブロックで処理が独立しているため、 並列に復号化できるが、パターンが分かれば、復号化しなくてもすり替えられる。

固定長の使い捨てパッドを繰り返すのと同じ?

CBC

一つ前のブロックの暗号化したものとのxorを取ってから暗号化する。 始めのブロックには別途ランダムな値が必要。 隣のブロックの復号化に影響するため、単体の値の操作は困難。ただし初期化ベクトルは例外。

CFB

使い捨てパッドと同等らしい?

xorと暗号化の違い。 暗号化はアルゴリズムが任意。DESではラウンド関数と言うように。また、サブ鍵の長さに制限がない。

途中で差し替える再生攻撃ができてしまうため非推奨。

OFB

暗号文を繰り返し暗号化し、平文とのxorを取っていく。

暗号文のビットを反転させると対象の平文も反転する。

CTR

カウンターをかける。OFBよりも並列で処理できる。

公開鍵暗号

現在の一般的なアルゴリズムはRSA。

離散対数を求めることは難しいこと、大きな素数からなる数の素因数分解は難しいことを利用している。

作り方

大きな素数を2つ求める。 その素数をかけてnを作る。 素数引く1の最小公倍数をlとする。 lと互いに素である小さい数字をe とする。 dを求める。

公開鍵ではnのmodをとるので、nより大きなデータは暗号化できない。

なぜ解読が難しいか

暗号文を平文にするロジックは離散対数をもとめる計算になる。

総当たり攻撃は、dが1024ビット相当になり数が多すぎる。

nはpqからできてることを利用してdを解読する。 大きな素数からなる数の素因数分解は難しい。

その他の攻撃手法は確立されていないが、例えば乱数精製機のムラをつく、別の方法でdを求める、などです。

MITM攻撃

中間者攻撃。

公開鍵暗号を使っても、用いる公開鍵が意図しない相手のものだった場合には意味がなくなる。

これを防ぐには、公開鍵が通信相手本人から送ったものだと証明できる必要がある。

各種疑問

全部公開鍵でいいのでは? 基本遅くなるので、共通鍵の暗号化に使うなどを行う。

素数ベアの枯渇、衝突 512ビットの素数は全宇宙に存在する原子より多い。

一方向ハッシュ

データの正真性を調べるのに用いる。 データ全てを比べる、というか二つの実データを持つことは困難なため。

出力はフィンガープリントとも呼ばれる。指紋ですね。

大容量のデータを扱う際など、ミラーサイトやプロキシを経由することがある。そのときに変な操作をされてないかを確認できる。もちろんハッシュ値は公式から取得する。

メッセージ認証コード

そのメッセージが本当に相手から送られてきたか?途中で改竄されてないかを判定する。

改竄については一方向ハッシュでもできる。 正しい相手からかを測るのに使う。

自分と相手だけが知っている情報を用いるため、第三者への証明(否認の防止)には使えない。

デジタル署名

第三者にも、そのメッセージが自分が作ったものだと証明できる。

rsaなど公開鍵暗号のアルゴリズムを使う。 対象鍵との比較みたいなもの。

ただ、メッセージ自体と別(意味がわからなくても同じだとみなせればいい)なのでハッシュ値の検証だけでよい。

署名はコピーされても構わない。普通は書類に通し番号とかついているので、同じものが複数あっても同一のメッセージとみなされるので問題ない。(再生攻撃の防止)

公開鍵暗号の暗号鍵と一緒のものを使うのはリスクがある。また、認証をかけるのはハッシュ値だけにするべき。

認証するための公開鍵自体を認証しなければいけない。

認証局

公開鍵自体の認証をどうするか、第三者にしてもらおう、ということで生まれた。

ある手続きで本人確認をして自分の鍵を登録できる。

受け取るときは、認証局の認証をつけた公開鍵(証明書)を受け取る。

攻撃

管理が移管されたなど、対象のドメインのキーが期限切れの場合がある。 そういった用途のため、認証局はCRLを持っている。

どこの情報を信用するかというのは根源的に難しい。

SSL/TLS

暗号技術の詰め合わせ。暗号スイート いろんなプロトコルで使える。

4つのサププロトコルを持つ。

ハントシェイク

認証と、共有鍵の取り決め。

使える暗号スイートを伝え合って決める。

暗号仕様変更プロトコル

暗号スイートの切り替え。

警告プロトコル

暗号化失敗の通知

アプリケーションデータプロトコル

中身を相手に伝える。

Comments