暗号技術入門 秘密の国のアリス 総集編

151
秘密の国のアリス 総集編 KMCID:taisei

Upload: -

Post on 05-Apr-2017

714 views

Category:

Technology


0 download

TRANSCRIPT

秘密の国のアリス総集編KMCID:taisei

自己紹介 ID : taisei 京都大学工学部情報学科2回生計算機科学コース

第39代副会長

競プロ2016Normal, CTF練習会2016の

プロジェクトリーダーやってました

この講座の内容

CTF練習会2016で「暗号技術入門 第3版 秘密の国のアリス 著:結城 浩」

を読んでいました プロジェクトでは半分くらい読破しました

この本に沿って暗号技術に入門します

Contents

暗号 共通鍵暗号 公開鍵暗号

認証 一方向ハッシュ メッセージ認証コード デジタル署名

応用技術 乱数 SSL/TLS

登場人物

Alice … 一般人

Bob … 一般人

Eve … 盗聴者

Mallory … 能動的攻撃者

はじめに

独自の暗号アルゴリズムを開発して、それを秘密にしてセキュリティを保つ行為(Security by Obscurity)

は、危険

はじめに

暗号アルゴリズムを隠しても、歴史的にはすべて暴かれている

DVD NXPの非接触型ICカードMIFARE Classic RSA社のRC4

はじめに

一般に、暗号の強さを測るのは難しい 暗号のプロが解読できないという事実が暗号の強さを

裏付けている

公開されていて、暗号のプロによって強さが裏付けされた暗号アルゴリズムを使うのが安全

はじめに

良い暗号アルゴリズムとは 理解できない程複雑なアルゴリズム 解析が難しいアルゴリズム

ではない

むしろシンプルで解析のし易い方がよい 暗号の強度が見積りやすい

暗号

暗号アルゴリズムは繰り返し使いたいが、平文に暗号アルゴリズムだけでは解読される可能性が高い

アルゴリズムに変更可能な部分を用意し、入力ごとに変える 変更の仕方を鍵という

平文 暗号文暗号アルゴリズム

シーザー暗号

平文のアルファベットをずらして暗号化する ずらす文字数が鍵となる

この場合は3文字ずらしている (画像:www.infonet.co.jp/ueyama/ip)

シーザー暗号

暗号化するときは平文のアルファベットをn文字だけ先にずらし、暗号文とする

nを鍵として渡す

復号化するときは暗号文のアルファベットをn文字だけ後にずらし、平文とする

シーザー暗号

CaptureTheFlag FdswxuiWkhIodj

この暗号に対しては、鍵は0~25の26通りしか存在しないので、全探索で容易に解読される

ブルート・フォース・アタックと呼ばれる

鍵:3

平文 暗号文

単一換字暗号

平文のアルファベットを一対一で置換 換字表が鍵となる

(画像:www.infonet.co.jp/ueyama/ip)

単一換字暗号

鍵空間(鍵の取りうるパターン)が26! > 4x1026

全通り列挙するのに120億年以上かかる ブルート・フォース・アタックは困難

頻度分析と呼ばれる解読法で解読できるかもしれない

二次大戦中のドイツで使われた暗号機械

プラグボードは自由に繋ぎ変えられる ローターは自由に回転させられる

打鍵ごとにローターは回転する

(画像:https://ja.wikipedia.org/wiki/エニグマ_(暗号機))

プラグボードの配線とローターの初期の角度が鍵に相当

国防軍鍵表による日替わり鍵と、通信鍵によって鍵を設定する

大戦中Enigma自体は鹵獲されて、敵軍は暗号アルゴリズムを知っていたが、解読は困難だった

1940年、アラン・チューリングが暗号解読機「Bombe」を開発、解読に成功

共通鍵暗号

共通鍵暗号

対称暗号とも呼ばれる 暗号化と復号化の鍵が同じ

DES (もう使えない) トリプルDES (DES-EDE3) AES

DES (Data Encryption Standard)

IBMが開発し、1977年に連邦情報処理標準規格に採用された対称暗号

現在は計算機の進歩に敗北

DES (Data Encryption Standard)

鍵長が実質56bitなので、鍵空間が256しかない 任意の平文から暗号文を得られるとき、選択平文攻撃

が有効となる 差分読解法により247程度の探索で解読できる 線形解読法により243程度の探索で解読できる

ファイステルネットワークを採用

選択平文攻撃 (ChosenPlaintextAttack)

差分読解法 平文の変化と暗号文の変化の偏りを調べる

線形読解法 平文と暗号文のxorが0になる確率の偏りを調べる

ファイステルネットワーク

入力を右と左に分割する

右とサブ鍵をラウンド関数に入力する

ラウンド関数の出力と左のxorを暗号化された左とする

左 右

ラウンド関数

サブ鍵

暗号化された左 右

ファイステルネットワーク

この操作をラウンドと呼び、左右を入れ替えて複数回行う

復号化のときは、サブ鍵を逆順に使うとよい

左 右

ラウンド関数

サブ鍵1

暗号化された左 暗号化された右

ラウンド関数

サブ鍵2

ラウンド関数

サブ鍵3

ファイステルネットワーク

この操作をラウンドと呼び、左右を入れ替えて複数回行う

復号化のときは、サブ鍵を逆順に使うとよい

左 右

ラウンド関数

サブ鍵3

暗号化された左 暗号化された右

ラウンド関数

サブ鍵2

ラウンド関数

サブ鍵1

ファイステルネットワーク

ラウンドはいくらでも増やせる

暗号化の本質をラウンド関数に集約できる ラウンド関数は逆関数がなくても良い

暗号化と復号化を同じ構造でできる

DES (Data Encryption Standard)

DESでは... ブロック長は64bitなので、右と左は32bit ラウンド関数は16段 鍵は64bitだがうち8bitはパリティビット 鍵をローテートしてサブ鍵を生成する ラウンド関数は、Sボックス(ルックアップテーブル)

トリプルDES (DES-EDE3)

DESの鍵を3つ用意し、暗号化→復号化→暗号化の順に行う(Encrypt-Decrypt-Encrypt)

DESと互換がある 3つの鍵に同じ鍵を使うとただのDES

鍵長は56x3 = 168ビット

トリプルDES (DES-EDE3)

現在でも銀行などで使われている

処理速度はあまり早くない

IPAは使用は2030年までにするよう勧告 中間一致攻撃により2112程度の探索で突破できるかもしれない

(補足) 中間一致攻撃

ダブルDESが使われない理由

平文を全通りの鍵で暗号化したものと、暗号文を全通りの鍵で復号化したものを列挙する

一致するものがあればそれが鍵

ダブルDESなら257の探索で済む

平文 暗号文

AES (Advanced Encryption Standard)

NIST(アメリカ国立標準技術研究所)が公募で選定 コンペ方式による標準化

Rijndael(ラインダール)が最終的に選定され、AESとなった

AES (Advanced Encryption Standard)

ブロック長は128bit、鍵長は128/192/256bitから選べる

アルゴリズムが単純で、軽量

SPN構造 (Substitution Permutation Network Structure)

Sボックスの結果をPボックスが並び替える

AES (Advanced Encryption Standard) 128bitのブロックを1byteずつに分割、4x4の行列

として並べて処理する

ラウンドは次の4つの処理から構成される SubBytes … Sボックスで変換 ShiftRows … 行をシフト MixColumns … 列にビット演算 AddRoundKey … ラウンド鍵とのxor

AES (Advanced Encryption Standard) SubBytes

a0,0a0,1a0,2a0,3

a1,0a1,1a1,2a1,3

a2,0a2,1a2,2a2,3

a3,0a3,1a3,2a3,0

Sボックス b0,0b0,1b0,2b0,3

b1,0b1,1b1,2b1,3

b2,0b2,1b2,2b2,3

b3,0b3,1b3,2b3,0

AES (Advanced Encryption Standard) ShiftRows

a0,0a0,1a0,2a0,3

a1,0a1,1a1,2a1,3

a2,0a2,1a2,2a2,3

a3,0a3,1a3,2a3,0

a0,0a0,1a0,2a0,3

a1,1a1,2a1,3a1,0

a2,2a2,3a2,0a2,1

a3,3a3,0a3,1a3,2

b0,0b0,1b0,2b0,3

b1,0b1,1b1,2b1,3

b2,0b2,1b2,2b2,3

b3,0b3,1b3,2b3,0

AES (Advanced Encryption Standard) MixColumns

a0,0a0,1a0,2a0,3

a1,0a1,1a1,2a1,3

a2,0a2,1a2,2a2,3

a3,0a3,1a3,2a3,0

行列計算

b0,0b0,1b0,2b0,3

b1,0b1,1b1,2b1,3

b2,0b2,1b2,2b2,3

b3,0b3,1b3,2b3,0

AES (Advanced Encryption Standard)

AddRoundKeya0,0a0,1a0,2a0,3

a1,0a1,1a1,2a1,3

a2,0a2,1a2,2a2,3

a3,0a3,1a3,2a3,0

k0,0

k0,1

k0,2

k0,3

k1,0

k1,1

k1,2

k1,3

k2,0

k2,1

k2,2

k2,3

k3,0

k3,1

k3,2

k3,0

AES (Advanced Encryption Standard)

ラウンドは鍵長に応じて10~14回繰り返す 少ないラウンド数でも十分ビットが撹拌される

ファイステル構造とは違い、復号化には各ステップ毎に逆変換が必要

今のところ有効な攻撃方法は見つかっていない

ブロック暗号のモード DESやAESは平文を固定長のブロックに分けて暗号化

する

しかし、固定長に区切った平文を暗号化したものをそのまま暗号文とするのは推奨されない

平文と暗号文が一対一になる 暗号文で一致する区画があると攻撃の対象

ブロック暗号のモード 主に次のモードがある

ECBモード (電子符号表モード) CBCモード (暗号ブロック連鎖モード) CFBモード (暗号フィードバックモード) OFBモード (出力フィードバックモード) CTRモード (カウンタモード)

ECBモード (Electronic CodeBook)

平文ブロックを暗号化したものがそのまま暗号ブロックになる

暗号ブロックの順番を入れ替えて も平文は復元される

暗号文を解読できなくても平文を操作できる

平文ブロック

暗号文ブロック

暗号化

CBCモード (Cipher Block Chaining) 一つ前の暗号ブロックとxorをとる

平文ブロック

暗号文ブロック

暗号化

初期化ベクトル

平文ブロック

暗号文ブロック

暗号化

平文ブロック

暗号文ブロック

暗号化

CBCモード (Cipher Block Chaining) 最初の平文には1つ前の暗号文ブロックが存在しない

ので、初期化ベクトルが必要 ランダムなビット列を用いる(BEAST Attack等)

暗号文が破損すると2ブロック影響する

途中の平文ブロックだけ暗号化はできない

(補足) BEAST Attack

平文ブロック

暗号文ブロック

暗号化

前の暗号文ブロック

初期化ベクトル

初期化ベクトル ⊕トライする平文 ⊕前の暗号ブロック

暗号文ブロック

暗号化

平文ブロック

暗号化

観測できた通信

一致すればトライは成功

CBCモード (Cipher Block Chaining) 平文がブロックサイズの整数倍でないとき、最後のブロックにはパディングが行われる

パディングは攻撃の対象になりうる パディングオラクル攻撃 POODLE攻撃

平文 パディング

ブロック

(補足) パディングオラクル攻撃

平文ブロック

暗号文ブロック

暗号化

前の暗号文ブロック

前の暗号文ブロック

トライする平文⊕

パディング暗号文

ブロック

複合化

パディングチェック

※一番最後のブロックに挿入

平文ブロック

暗号化

観測できた通信

CFBモード (Cipher FeedBack) 一つ前の暗号ブロックを暗号化していく

平文ブロック

暗号文ブロック

暗号化

初期化ベクトル

平文ブロック

暗号文ブロック

平文ブロック

暗号文ブロック

暗号化 暗号化

CFBモード (Cipher FeedBack) 復号化するときも暗号化を行う

平文ブロック

暗号文ブロック

暗号化

初期化ベクトル

平文ブロック

暗号文ブロック

平文ブロック

暗号文ブロック

暗号化 暗号化

CFBモード (Cipher FeedBack)

平文を直接暗号化はしない

パディングを行う必要がない

復号化の際も、暗号文ブロックの暗号化を行う

再生攻撃が可能

OFBモード (Output FeedBack) OFBモードも復号化では暗号化を行う

暗号文ブロック

暗号化初期化

ベクトル平文

ブロック

暗号文ブロック

暗号化

平文ブロック

暗号化

CTRモード (CounTeR) カウンタは、ランダムな値ノンスとブロック番号の結合

暗号文ブロック1

暗号化

平文ブロック1

カウンタ1

暗号文ブロック2

暗号化

平文ブロック2

カウンタ2

暗号文ブロック3

暗号化

平文ブロック3

カウンタ3

ブロック暗号のモード ECBモードは使うべきではない

他のモードは一長一短

CRYPTREC (電子政府推奨暗号リスト)ではCBC, CFB, OFB, CTRが推奨されている

公開鍵暗号

公開鍵暗号

非対称暗号とも呼ばれる 暗号化と復号化の鍵が別 暗号化の鍵を公開鍵、復号化の鍵をプライベート鍵という

RSA Rivest, Shamir, Adlemanが開発

RSA

Alice Bob公開鍵 プライベート鍵平文 公開鍵

暗号文 暗号文

平文

AliceからBobへ平文を送ることが可能

公開鍵では暗号化だけができる

RSA N, L, E, Dを求める

Nは素数p,qを用いてN = p x q フェルマーテスト、ミラーラビンテストなどを使う

LはL = lcm(p-1, q-1) Eは1 < E < Lで、Lと互いに素な数

乱数を使って探索 Dは1 < D < Lで、E x D mod L = 1な数

拡張ユークリッドの互除法を使う

RSA N, L, E, Dを求める

N, Eが公開鍵、 N, Dは秘密鍵となる

暗号文は、 平文 E mod N で求まる

平文は、 暗号文 D mod N で求まる

RSA aED ≡ a mod N の軽い証明

(与式) a⇔ ED ≡ a mod p a∧ ED ≡ a mod q であるaED ≡ a mod p を考えるaがpの倍数のときは自明定義より、ED=m(p-1)+1とおけるよって、 aED ≡ am(p-1) x a ≡ 1m x a mod p

(∵フェルマーの小定理)

RSA

RSAはNのビット数は1024 ~ 4096で選べる

RSAチャレンジで、2009年にはRSA-768が解読された

RSA-1024は新規には使えない

NISTは2048ビットのRSAは2030年までにする方針

他の公開鍵暗号

ElGamal方式 mod Nの離散対数を求めることの難しさを利用

Rabin方式 mod Nの平方根を求めることの難しさを利用

楕円曲線暗号(ECC)

中間者攻撃 (MITM攻撃)Alice Mallory Bob

Bobの公開鍵

Malloryの公開鍵

Malloryの鍵の暗号文

Bobの鍵の暗号文

解読改竄

ハイブリッド暗号

RSAなど、公開鍵暗号は共通鍵暗号に比べてとても遅い

共通鍵暗号の鍵はそのまま送ることはできない

両者のいいとこ取りをする

ハイブリッド暗号 平文を共通鍵暗号で暗号化する

共通鍵暗号で使った鍵を公開鍵暗号で暗号化 共通鍵暗号の鍵をセッション鍵という セッション鍵は乱数で与える セッション鍵は公開鍵暗号にとっては平文

公開鍵は予め知っておく必要がある

ハイブリッド暗号

暗号文共通鍵暗号化

平文

セッション鍵 公開鍵暗号化

暗号化されたセッション鍵

公開鍵

一方向ハッシュ関数

一方向ハッシュ関数

任意の入力を固定長のハッシュ値に変換する関数

メッセージの正真性を検証するのに使われる ハッシュ値が衝突するような異なるメッセージの組を

見つけるのが非常に困難である必要がある(衝突が存在しないハッシュ関数は存在しない)

一方向ハッシュ関数

メッセージA メッセージB

一方向ハッシュ関数

一方向ハッシュ関数

ハッシュ値A ハッシュ値B比較

一方向ハッシュ関数

弱衝突耐性 そのハッシュ値を持つ別のメッセージを見つけ出す

のが困難

強衝突耐性 ハッシュ値が一致するような異なる2つのメッセージを

見つけ出すのが困難

一方向ハッシュ関数

一方向ハッシュ関数は強衝突耐性をもつ必要がある 強衝突耐性がないと、ハッシュ値が一致するように

メッセージを改竄できるかもしれない

一方向ハッシュ関数

用途 ソフトウェアの改竄検出 パスワードを元にした暗号化(PBE) デジタル署名 擬似乱数生成器

一方向ハッシュ関数 md4

強衝突耐性が破られている

md5 強衝突耐性が破られている

SHA-1 強衝突耐性が破られている 最近Googleが衝突攻撃を成功させた

一方向ハッシュ関数 SHA-2

SHA-256, SHA-384, SHA-512はすべてSHA-2 まだ強衝突耐性は破られていない NISTが開発

SHA-3 コンペによる標準化で選定 SHA3-224, SHA3-256, SHA3-384, SHA3-512がある

SHA-3 コンペによる標準化で選ばれたKECCAKという

アルゴリズムである

解析しやすい、クリーンな構成をしている 複数のラウンドを回すことやマトリョーシカ構造より、弱いKECCAKを

容易に実装でき、それを攻撃することで強度が見積もれる

SHA-2と全く異なる構造をしている

SHA-3 (スポンジ構造)

入力 パディング

入力ブロック

0

0f f f f

内部状態

f f f

出力ブロック

出力

吸収フェーズ 搾出フェーズ

SHA-3

KECCAKの内部状態は5x5xzの直方体 SHA-3ではz = 64で、状態は1600bit

θ, ρ, π, χ, ιの5つのステップで1ラウンドである

SHA-3では24ラウンド繰り返す(画像:http://keccak.noekeon.org/)

SHA-3

θステップ● 2つの行の各ビットのxorを足す

(画像:http://keccak.noekeon.org/)

SHA-3ρステップ z方向へビットシフトする

(画像:http://keccak.noekeon.org/)

SHA-3

πステップ レーンを移動させる

(画像:http://keccak.noekeon.org/)

SHA-3

χステップ 列に対し右図のようなビット演算を行う

ιステップ ラウンド定数と状態の

xorをとる(画像:http://keccak.noekeon.org/)

一方向ハッシュ関数 原像攻撃

あるハッシュ値をもつメッセージを探索する

第二原像攻撃 あるメッセージと同じハッシュ値を持つ別のメッセージ

を探索する

どちらも弱衝突耐性を破ろうとする攻撃

一方向ハッシュ関数 誕生日攻撃 (衝突攻撃)

同じハッシュ値を持つ2つのメッセージを探索する 強衝突耐性を破ろうとする攻撃 誕生日のパラドックスに由来 誕生日攻撃の試行回数はブルート・フォース・アタック

よりずっと少なくて済む

誕生日のパラドックス 誕生日が同一の2人が50%以上の確率で存在するには、何人集めればよいでしょうか?

誕生日のパラドックス 誕生日が同一の2人が50%以上の確率で存在するには、何人集めればよいでしょうか?

23人いればよい H個の値の集合からn個を無造作に選んだとき、同じ値

が2度以上選ばれる確率が50%以上になるには、Hが大きいときおよそn √H≒

メッセージ認証コード

メッセージ認証コード (MAC) Message Authentication Code 略してMAC

なりすましや改竄を検出できる

メッセージと共通鍵から計算されるMAC値を比較して認証する 一方向ハッシュ関数、ブロック暗号を使って実現される

メッセージ認証コード (MAC)Alice Bob

メッセージ

MAC値

メッセージ認証コード共通鍵

メッセージ

MAC値

メッセージ認証コード共通鍵

MAC値

比較

メッセージ認証コード (MAC) 共通鍵暗号で暗号化した文章を送るのと違うのか?

メッセージ認証コード (MAC) 共通鍵暗号で暗号化した文章を送るのと違うのか?

共通鍵暗号だけでは ランダムなビット列を正しい鍵で暗号化したもの 適当なビット列を誤った鍵で暗号化したもの

の区別ができない

メッセージ認証コード (MAC) 利用例

SWIFT (国際銀行間通信協会)

IPsec IPにセキュリティの機能を加えたもの

SSL/TLS

メッセージ認証コード (MAC) GMAC

認証付き暗号(AEAD)のGCMで使われる 暗号化と認証を同時に行う仕組み

HMAC MACとしてSHA-1やSHA-2を選べる

HMAC HMACは

hash(opadkey + hash(ipadkey + message))但し、

ipadkey = key ipad⊕ (ipadは00110110の繰返し) opadkey = key opad⊕ (opadは01011100の繰返し) keyは鍵に、hashのブロック長まで0でパディング

したもの

メッセージ認証コード (MAC)

再生攻撃 盗聴したメッセージとMAC値を送りつける

次のような対策がある シーケンス番号を振る タイムスタンプを埋め込む 使い捨てのランダムな値ノンスを用いる

メッセージ認証コード (MAC) メッセージの否認防止ができない

つまり第三者に対する証明ができない

MAC値を計算可能なのは、アリスとボブの2人存在する

アリスが作成したメッセージではなく、ボブ自身が作成したメッセージかもしれない

デジタル署名

デジタル署名 改竄、なりすましの検出、否認の防止ができる

MACでは鍵が共通だったので否認防止が出来なかった

非対称の鍵を使えば否認防止が出来るのでは?

公開鍵暗号

Alice Bob公開鍵 プライベート鍵平文 公開鍵

暗号文 暗号文

平文

デジタル署名

Alice Bob公開鍵 プライベート鍵平文 公開鍵

暗号文 暗号文

平文

平文を暗号化できるのはBobだけ

デジタル署名 Bobだけが平文の暗号化をできる

暗号文を署名として扱う

公開鍵を使えばBobが署名したことを誰でも検証できる

実際にはメッセージのハッシュに署名を行う

デジタル署名

Alice Bob

メッセージメッセージ

ハッシュ値

署名

公開鍵プライベート鍵

ハッシュ値

署名

Aliceが署名した

ハッシュ値

比較

デジタル署名 利用例

セキュリティ情報のアナウンス メッセージが暗号化されないクリア署名がなされる

ソフトウェアのダウンロード 署名付きアプレット

証明書 SSL/TLS

デジタル署名 RSA

ElGamal方式

DSA (Digital Signature Algorithm) ElGamal方式の変種

楕円曲線DSA (Elliptic Curve Digital Signature Algorithm)

Rabin方式

デジタル署名 潜在的偽造

あるビット列Sを公開鍵で暗号化し、Mとする

SはMのデジタル署名である

RSA-PSSはこれに耐性がある

デジタル署名 中間者攻撃

デジタル署名では予め公開鍵を入手する

この公開鍵は本物なのか?→ 別の信頼できる人に公開鍵を署名してもらう

デジタル署名された公開鍵を証明書という この署名にも公開鍵が必要...

証明書 公開鍵証明書 (PKC) を 認証局 (CA) が署名

認証局には誰でもなることができる

公開鍵を運用するために多くの規格や仕様がある 総称して公開鍵基盤 (PKI) という

公開鍵基盤 (Public-Key Infrastructure)

Alice BobBobの公開鍵

信頼できる第三者Trent

認証局リポジトリ 署名

Bobの公開鍵

Trentの署名

証明書

ダウンロード 登録

証明書 利用者のプライベート鍵が盗まれたりした場合

公開鍵を破棄する必要がある

認証局は証明書破棄リスト (CRL) を作成する 破棄された証明書の一覧に署名したもの

CRLは最新のものなのか、しっかり確認する必要がある

証明書 認証局の署名にも公開鍵が使われる

認証局の公開鍵の証明書を別の認証局が作成する

認証局の署名は階層になる 階層の最上位をルートCAという ルートCAはセルフ署名をする

証明書 似た人間を登録する攻撃

BobはCAに名前をBobで登録 MalloryはCAに名前をBOBで登録 AliceはBOBをBobと誤認してしまうかもしれない

CAの運用規定を確認する必要がある

証明書 攻撃者自身がCAになる攻撃

いわゆるオレオレ認証局 正しい証明書でも、CAが信用できなければ意味がない

証明書 CRLの隙を突く攻撃

BobがAliceにメールを送ってから、CAに公開鍵を破棄してもらう通知をする

AliceはメールをBobのものだと思う BobはAliceに届いたメールを否認する

これを完全に防ぐのは無理

擬似乱数生成器

乱数 鍵の生成、初期化ベクトルなど、予測不可能な値が必要な場合がしばしばある

乱数には次の性質がある 無作為性… 統計的な偏りがない 予測不可能性 … 過去の数列から次の値が予測できない 再現不可能性 … 同じ数列を再現できない

乱数 ソフトウェアだけでは、再現不可能性を満たすことは

できない コンピューターの内部状態は有限 同じ内部状態のコンピューターからは同じ値が生成される そのうち数列は繰り返しになる

乱数 乱数を生成するソフトウェアを擬似乱数生成器 (PRNG)

とよぶ 擬似乱数生成器には種(seed)が必要

ハードウェアからの情報を使えば再現不可能性を満たすことができるかもしれない

そのようなハードウェアを乱数生成器とよぶ

乱数 線形合同法

R0 = (seed) とする

Rn+1

= (A x Rn + C) mod M で乱数を生成する

うまくA, C, Mを選べば無作為性は満たされる 過去の数列があればA, C, Mは逆算できる

予測不可能性を持たないので暗号技術には使えない

乱数 一方向ハッシュを使う方法

counter = (seed) で初期化する R

n = hash(counter) で乱数を得て、counterに1を足す

乱数を予測するにはhashの一方向性を破る必要がある

乱数 暗号を使う方法

seedはカウンタ初期化用と鍵用の2つに分ける counter = (seed1) で初期化する R

n = encrypt(counter, seed2) で乱数を得て、

counterに1を足す

乱数を予測するには暗号を解読する必要がある

乱数 擬似乱数生成器の種は予測されてはいけない

種には、種を必要としない乱数が必要 ランダムプールに蓄えている

Unix系OSは/dev/randomで得られる

暗号技術の活用

SSL/TLS (Secure Socket Layer/Transport Layer security)

世界で最も利用されている暗号通信の方法(プロトコル) httpsで用いられている httpsでは、SSL/TLSの上にhttpが乗っている http以外にもプロトコルを乗せられる

例えばメールのプロトコルSMTP, POP3

SSL/TLS (Secure Socket Layer/Transport Layer security)

SSLはNetScape社(現Mozilla)の作ったプロトコル

TLSはSSL3.0を元にIETFによって作られたプロトコル TLS1.0はSSL3.1に相当する

SSL3.0まではPOODLE攻撃より使用を推奨されない

SSL/TLS (Secure Socket Layer/Transport Layer security)

TLSは暗号通信の枠組みを提供する 使用する暗号技術を選択できる 実際には暗号スイートから選ばれることが多い

SSL/TLS (Secure Socket Layer/Transport Layer security)

TLSプロトコルは TLSハンドシェイクプロトコル TLSレコードプロトコル

からなる

SSL/TLS (Secure Socket Layer/Transport Layer security)

TLSハンドシェイクプロトコル 以下のサブプロトコルがある

ハンドシェイクプロトコル 暗号仕様変更プロトコル 警告プロトコル アプリケーションデータ

プロトコル TLSレコード

プロトコル

TLSプロトコル

ハンドシェイク

プロトコル

暗号仕様変更

プロトコル

警告

プロトコル

アプリケーション

データプロトコル

TLSハンドシェイクプロトコル

SSL/TLS (Secure Socket Layer/Transport Layer security)

TLSレコードプロトコル TLSハンドシェイクプロトコルのデータを分割、圧縮し、

MACをつけて共通鍵暗号で暗号化する

初期化ベクトル、共通鍵暗号とMACの鍵はマスターシークレットから生成する

暗号文にヘッダをつけて送信データとする

SSL/TLS (Secure Socket Layer/Transport Layer security)

ハンドシェイクプロトコル 使用する暗号を合意する 証明書を交換する マスターシークレットを得る 最初のハンドシェイクでは「暗号化なし」という

暗号化スイートを使っている

SSL/TLS (Secure Socket Layer/Transport Layer security)

暗号仕様変更プロトコル 暗号を切り替える合図をする

警告プロトコル エラーを伝える

アプリケーションデータプロトコル httpなどのデータが乗る

SSL/TLS (Secure Socket Layer/Transport Layer security)

既知の主な脆弱性 OpenSSLのHeartBleed脆弱性 POODLE攻撃 FREAK攻撃

おわりに

おわりに 暗号技術はセキュリティの一部でしかない

SSL/TLSは通信経路で第三者から読まれることはないが、通信前と通信後は分からない

サービス拒否攻撃をすると暗号技術は無意味

人間はパスワードを漏らすかもしれない 人間はマルウェアを動かすかもしれない

(Option) 暗号通貨

暗号通貨 中本哲史という謎の人物の論文が元

“Bitcoin: A Peer-to-Peer Electronic Cash System” ビットコインは通貨というよりは、P2Pネットワーク上

で動作する決済システム

ビットコインの最小単位0.00000001 BTCは筆者の名前にちなんで1 satoshi と名付けられた

暗号通貨 出来ること

通貨の送金 通貨の採掘

暗号通貨の送金 通貨はビットコイン・アドレス間で取引される

ビットコイン・アドレスは公開鍵をSHA-256とRIPEMD-160の2つのハッシュ関数を通したもの

暗号アルゴリズムは楕円曲線暗号 使われている楕円曲線はx2 = y3 + 7

暗号通貨の送金 送金する人が、「どのアドレスからどのアドレスに

いくら送金するか」を決める この取引をトランザクションと呼ぶ

送金する人はトランザクションにデジタル署名をして公開鍵とともにP2Pネットワークに送信する

暗号通貨の送金 P2Pネットワークにはトランザクションが流れてくる

未検証のトランザクションはトランザクションプールに蓄えられる

採掘者がトランザクションプールのトランザクションを検証、承認する

暗号通貨の送金

採掘者

P2P Network

トランザクション

アドレスA

アドレスB

n BTCを送金+ 手数料

デジタル署名

ブロード

キャスト

プール

検証ブロック

Aの公開鍵

暗号通貨の送金 採掘者はトランザクションプールの中から好きな

トランザクションを検証し、ブロックを作成する

採掘者は作成したブロックが承認されると一定の報酬と手数料を得ることができる

手数料が多いほうが検証されやすい 少ないとトランザクションが成立するのに時間がかかる

暗号通貨の採掘 ビットコインの取引は全てブロックチェーンという

公開取引簿に記録されている ブロックチェーンを参照することで任意のアドレスの残高が求まる

ブロックチェーンはブロックが連鎖したものである

暗号通貨の採掘 ブロックチェーンに新たなブロックを繋ぐ競争

直前のブロックのハッシュ値 検証したトランザクション全体のハッシュ値 あるノンス

からなるヘッダでハッシュ値を計算すると、上位ビットに0が一定個数並ぶようなノンスを探索する

(

暗号通貨の採掘

ブロック

前のブロックのヘッダのハッシュ値

トランザクション集合

のハッシュ値

ノンス

ヘッダ

トランザクション

トランザクション

集合

トランザクション

トランザクション

暗号通貨の採掘

ブロック

ヘッダ

トランザクション集合

ブロック

ヘッダ

トランザクション集合

ブロック

ヘッダ

トランザクション集合

ブロックチェーン

暗号通貨の採掘 ビットコインではハッシュ関数にSHA-256を2重にし

て使用する

平均で10分に1つのブロックが追加されるように、0

の並ばないといけない数(difficulty)を調整する 2016ブロック毎に、平均10分を超えているかで判断

暗号通貨の採掘 このようなハッシュ値の計算は、ビットコインの偽造

を防ぐために行われる Proof of Work; PoWとよぶ 過去のトランザクションを改竄するには、その

ブロックから全てのハッシュ値を計算し直す必要があるが、追いつくのは厳しい

暗号通貨の採掘 ある採掘者がノンスを見つけてブロックを作成

追加されるブロックがP2Pネットワークにブロードキャストされる

他の採掘者はそのブロックが正しいか検証、承認する

暗号通貨の採掘 ノンスが同時に見つけられることもある

両方のブロックがブロードキャストされ、P2Pネットワーク上では両方保持される

最終的に、長く繋がったブロックチェーンが承認される

暗号通貨の採掘 ブロックを生成、承認しているのは採掘者

採掘者の過半数が善良な採掘者であることが前提

採掘者の過半数の計算資源を掌握できれば 少数派のブロックを拒否できる 不正なトランザクションを含んだブロックを承認させられる

などの攻撃が可能 (51%攻撃)

暗号通貨まとめ 暗号通貨は

デジタル署名による取引の正当性の証明 ハッシュ関数の一方向性を利用したPoWによる偽造、改竄の防止

といった、暗号技術に裏付けられたシステムである

おしまい