Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,388 views

Published on

KMC春合宿2017で使ったスライドです
「暗号技術入門 第3版 秘密の国のアリス 著:結城 浩」 をまとめたものです

Published in: Technology
  • Be the first to comment

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

  1. 1. 秘密の国のアリス 総集編 KMCID:taisei
  2. 2. 自己紹介  ID : taisei  京都大学工学部情報学科2回生計算機科学コース  第39代副会長  競プロ2016Normal, CTF練習会2016の プロジェクトリーダーやってました
  3. 3. この講座の内容  CTF練習会2016で 「暗号技術入門 第3版 秘密の国のアリス 著:結城 浩」 を読んでいました  プロジェクトでは半分くらい読破しました  この本に沿って暗号技術に入門します
  4. 4. Contents  暗号  共通鍵暗号  公開鍵暗号  認証  一方向ハッシュ  メッセージ認証コード  デジタル署名  応用技術  乱数  SSL/TLS
  5. 5. 登場人物  Alice … 一般人  Bob … 一般人  Eve … 盗聴者  Mallory … 能動的攻撃者
  6. 6. はじめに  独自の暗号アルゴリズムを開発して、それを秘密に してセキュリティを保つ行為(Security by Obscurity) は、危険
  7. 7. はじめに  暗号アルゴリズムを隠しても、歴史的には すべて暴かれている  DVD  NXPの非接触型ICカードMIFARE Classic  RSA社のRC4
  8. 8. はじめに  一般に、暗号の強さを測るのは難しい  暗号のプロが解読できないという事実が暗号の強さを 裏付けている  公開されていて、暗号のプロによって強さが裏付け された暗号アルゴリズムを使うのが安全
  9. 9. はじめに  良い暗号アルゴリズムとは  理解できない程複雑なアルゴリズム  解析が難しいアルゴリズム ではない  むしろシンプルで解析のし易い方がよい  暗号の強度が見積りやすい
  10. 10. 暗号  暗号アルゴリズムは繰り返し使いたいが、平文に 暗号アルゴリズムだけでは解読される可能性が高い  アルゴリズムに変更可能な部分を用意し、 入力ごとに変える  変更の仕方を鍵という 平文 暗号文 暗号 アルゴリズム
  11. 11. シーザー暗号  平文のアルファベットをずらして暗号化する  ずらす文字数が鍵となる この場合は3文字ずらしている (画像:www.infonet.co.jp/ueyama/ip)
  12. 12. シーザー暗号  暗号化するときは平文のアルファベットを n文字だけ先にずらし、暗号文とする  nを鍵として渡す  復号化するときは暗号文のアルファベットを n文字だけ後にずらし、平文とする
  13. 13. シーザー暗号 CaptureTheFlag FdswxuiWkhIodj  この暗号に対しては、鍵は0~25の26通りしか存在 しないので、全探索で容易に解読される  ブルート・フォース・アタックと呼ばれる 鍵:3 平文 暗号文
  14. 14. 単一換字暗号  平文のアルファベットを一対一で置換  換字表が鍵となる (画像:www.infonet.co.jp/ueyama/ip)
  15. 15. 単一換字暗号  鍵空間(鍵の取りうるパターン)が26! > 4x1026  全通り列挙するのに120億年以上かかる  ブルート・フォース・アタックは困難  頻度分析と呼ばれる解読法で解読できるかもしれない
  16. 16.  二次大戦中のドイツで使われた暗号機械  プラグボードは自由に繋ぎ変えられる  ローターは自由に回転させられる  打鍵ごとにローターは回転する (画像:https://ja.wikipedia.org/wiki/エニグマ_(暗号機))
  17. 17.  プラグボードの配線とローターの初期の角度が鍵に相当  国防軍鍵表による日替わり鍵と、通信鍵によって 鍵を設定する
  18. 18.  大戦中Enigma自体は鹵獲されて、敵軍は 暗号アルゴリズムを知っていたが、解読は困難だった  1940年、アラン・チューリングが暗号解読機 「Bombe」を開発、解読に成功
  19. 19. 共通鍵暗号
  20. 20. 共通鍵暗号  対称暗号とも呼ばれる  暗号化と復号化の鍵が同じ  DES (もう使えない)  トリプルDES (DES-EDE3)  AES
  21. 21. DES (Data Encryption Standard)  IBMが開発し、1977年に連邦情報処理標準規格に 採用された対称暗号  現在は計算機の進歩に敗北
  22. 22. DES (Data Encryption Standard)  鍵長が実質56bitなので、鍵空間が256 しかない  任意の平文から暗号文を得られるとき、選択平文攻撃 が有効となる  差分読解法により247 程度の探索で解読できる  線形解読法により243 程度の探索で解読できる  ファイステルネットワークを採用
  23. 23. 選択平文攻撃 (ChosenPlaintextAttack)  差分読解法  平文の変化と暗号文の変化の偏りを調べる  線形読解法  平文と暗号文のxorが0になる確率の偏りを調べる
  24. 24. ファイステルネットワーク  入力を右と左に分割する  右とサブ鍵をラウンド関数に 入力する  ラウンド関数の出力と左の xorを暗号化された左とする 左 右 ラウンド関数 サブ鍵 暗号化された左 右
  25. 25. ファイステルネットワーク  この操作をラウンドと呼び、 左右を入れ替えて複数回行う  復号化のときは、サブ鍵を 逆順に使うとよい 左 右 ラウンド関数 サブ鍵1 暗号化された左 暗号化された右 ラウンド関数 サブ鍵2 ラウンド関数 サブ鍵3
  26. 26. ファイステルネットワーク  この操作をラウンドと呼び、 左右を入れ替えて複数回行う  復号化のときは、サブ鍵を 逆順に使うとよい 左 右 ラウンド関数 サブ鍵3 暗号化された左 暗号化された右 ラウンド関数 サブ鍵2 ラウンド関数 サブ鍵1
  27. 27. ファイステルネットワーク  ラウンドはいくらでも増やせる  暗号化の本質をラウンド関数に集約できる  ラウンド関数は逆関数がなくても良い  暗号化と復号化を同じ構造でできる
  28. 28. DES (Data Encryption Standard)  DESでは...  ブロック長は64bitなので、右と左は32bit  ラウンド関数は16段  鍵は64bitだがうち8bitはパリティビット  鍵をローテートしてサブ鍵を生成する  ラウンド関数は、Sボックス(ルックアップテーブル)
  29. 29. トリプルDES (DES-EDE3)  DESの鍵を3つ用意し、暗号化→復号化→暗号化の順 に行う(Encrypt-Decrypt-Encrypt)  DESと互換がある  3つの鍵に同じ鍵を使うとただのDES  鍵長は56x3 = 168ビット
  30. 30. トリプルDES (DES-EDE3)  現在でも銀行などで使われている  処理速度はあまり早くない  IPAは使用は2030年までにするよう勧告  中間一致攻撃により2112 程度の探索で 突破できるかもしれない
  31. 31. (補足) 中間一致攻撃  ダブルDESが使われない理由  平文を全通りの鍵で暗号化したもの と、暗号文を全通りの鍵で復号化したものを列挙する  一致するものがあればそれが鍵  ダブルDESなら257 の探索で済む 平文 暗号文
  32. 32. AES (Advanced Encryption Standard)  NIST(アメリカ国立標準技術研究所)が公募で選定  コンペ方式による標準化  Rijndael(ラインダール)が最終的に選定され、 AESとなった
  33. 33. AES (Advanced Encryption Standard)  ブロック長は128bit、鍵長は128/192/256bitから選べる  アルゴリズムが単純で、軽量  SPN構造 (Substitution Permutation Network Structure)  Sボックスの結果をPボックスが並び替える
  34. 34. AES (Advanced Encryption Standard)  128bitのブロックを1byteずつに分割、4x4の行列 として並べて処理する  ラウンドは次の4つの処理から構成される  SubBytes … Sボックスで変換  ShiftRows … 行をシフト  MixColumns … 列にビット演算  AddRoundKey … ラウンド鍵とのxor
  35. 35. AES (Advanced Encryption Standard)  SubBytes a0,0 a0,1 a0,2 a0,3 a1,0 a1,1 a1,2 a1,3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,0 Sボックス b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2,3 b3,0 b3,1 b3,2 b3,0
  36. 36. AES (Advanced Encryption Standard)  ShiftRows a0,0 a0,1 a0,2 a0,3 a1,0 a1,1 a1,2 a1,3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,0 a0,0 a0,1 a0,2 a0,3 a1,1 a1,2 a1,3 a1,0 a2,2 a2,3 a2,0 a2,1 a3,3 a3,0 a3,1 a3,2
  37. 37. b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2,3 b3,0 b3,1 b3,2 b3,0 AES (Advanced Encryption Standard)  MixColumns a0,0 a0,1 a0,2 a0,3 a1,0 a1,1 a1,2 a1,3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,0 行列計算
  38. 38. b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2,3 b3,0 b3,1 b3,2 b3,0 AES (Advanced Encryption Standard)  AddRoundKey a0,0 a0,1 a0,2 a0,3 a1,0 a1,1 a1,2 a1,3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,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
  39. 39. AES (Advanced Encryption Standard)  ラウンドは鍵長に応じて10~14回繰り返す  少ないラウンド数でも十分ビットが撹拌される  ファイステル構造とは違い、復号化には各ステップ毎に 逆変換が必要  今のところ有効な攻撃方法は見つかっていない
  40. 40. ブロック暗号のモード  DESやAESは平文を固定長のブロックに分けて暗号化 する  しかし、固定長に区切った平文を暗号化した ものをそのまま暗号文とするのは推奨されない  平文と暗号文が一対一になる  暗号文で一致する区画があると攻撃の対象
  41. 41. ブロック暗号のモード  主に次のモードがある  ECBモード (電子符号表モード)  CBCモード (暗号ブロック連鎖モード)  CFBモード (暗号フィードバックモード)  OFBモード (出力フィードバックモード)  CTRモード (カウンタモード)
  42. 42. ECBモード (Electronic CodeBook)  平文ブロックを暗号化したものが そのまま暗号ブロックになる  暗号ブロックの順番を入れ替えて も 平文は復元される  暗号文を解読できなくても平文を操作 できる 平文 ブロック 暗号文 ブロック 暗号化
  43. 43. CBCモード (Cipher Block Chaining)  一つ前の暗号ブロックとxorをとる 平文 ブロック 暗号文 ブロック 暗号化 初期化 ベクトル 平文 ブロック 暗号文 ブロック 暗号化 平文 ブロック 暗号文 ブロック 暗号化
  44. 44. CBCモード (Cipher Block Chaining)  最初の平文には1つ前の暗号文ブロックが存在しない ので、初期化ベクトルが必要  ランダムなビット列を用いる(BEAST Attack等)  暗号文が破損すると2ブロック影響する  途中の平文ブロックだけ暗号化はできない
  45. 45. (補足) BEAST Attack 平文 ブロック 暗号文 ブロック 暗号化 前の暗号文 ブロック 初期化 ベクトル 初期化ベクトル ⊕ トライする平文 ⊕ 前の暗号ブロック 暗号文 ブロック 暗号化 平文 ブロック 暗号化  観測できた通信 一致すれば トライは成功
  46. 46. CBCモード (Cipher Block Chaining)  平文がブロックサイズの整数倍でないとき、 最後のブロックにはパディングが行われる  パディングは攻撃の対象になりうる  パディングオラクル攻撃  POODLE攻撃 平文 パディング ブロック
  47. 47. (補足) パディングオラクル攻撃 平文 ブロック 暗号文 ブロック 暗号化 前の暗号文 ブロック 前の暗号文 ブロック ⊕ トライする 平文 ⊕ パディング 暗号文 ブロック 複合化 パディング チェック ※一番最後のブロックに挿入 平文 ブロック 暗号化  観測できた通信
  48. 48. CFBモード (Cipher FeedBack)  一つ前の暗号ブロックを暗号化していく 平文 ブロック 暗号文 ブロック 暗号化 初期化 ベクトル 平文 ブロック 暗号文 ブロック 平文 ブロック 暗号文 ブロック 暗号化 暗号化
  49. 49. CFBモード (Cipher FeedBack)  復号化するときも暗号化を行う 平文 ブロック 暗号文 ブロック 暗号化 初期化 ベクトル 平文 ブロック 暗号文 ブロック 平文 ブロック 暗号文 ブロック 暗号化 暗号化
  50. 50. CFBモード (Cipher FeedBack)  平文を直接暗号化はしない  パディングを行う必要がない  復号化の際も、暗号文ブロックの暗号化を行う  再生攻撃が可能
  51. 51. OFBモード (Output FeedBack)  OFBモードも復号化では暗号化を行う 暗号文 ブロック 暗号化 初期化 ベクトル 平文 ブロック 暗号文 ブロック 暗号化 平文 ブロック 暗号化
  52. 52. CTRモード (CounTeR)  カウンタは、ランダムな値ノンスとブロック番号の結合 暗号文 ブロック1 暗号化 平文 ブロック1 カウンタ1 暗号文 ブロック2 暗号化 平文 ブロック2 カウンタ2 暗号文 ブロック3 暗号化 平文 ブロック3 カウンタ3
  53. 53. ブロック暗号のモード  ECBモードは使うべきではない  他のモードは一長一短  CRYPTREC (電子政府推奨暗号リスト)では CBC, CFB, OFB, CTRが推奨されている
  54. 54. 公開鍵暗号
  55. 55. 公開鍵暗号  非対称暗号とも呼ばれる  暗号化と復号化の鍵が別  暗号化の鍵を公開鍵、復号化の鍵をプライベート鍵という  RSA  Rivest, Shamir, Adlemanが開発
  56. 56. RSA Alice Bob 公開鍵 プライベート鍵平文 公開鍵 暗号文 暗号文 平文 AliceからBobへ平文を送ることが可能 公開鍵では暗号化 だけができる
  57. 57. 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な数  拡張ユークリッドの互除法を使う
  58. 58. RSA  N, L, E, Dを求める  N, Eが公開鍵、 N, Dは秘密鍵となる  暗号文は、 平文 E mod N で求まる  平文は、 暗号文 D mod N で求まる
  59. 59. 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 (∵フェルマーの小定理)
  60. 60. RSA  RSAはNのビット数は1024 ~ 4096で選べる  RSAチャレンジで、2009年にはRSA-768が解読された  RSA-1024は新規には使えない  NISTは2048ビットのRSAは2030年までにする方針
  61. 61. 他の公開鍵暗号  ElGamal方式  mod Nの離散対数を求めることの難しさを利用  Rabin方式  mod Nの平方根を求めることの難しさを利用  楕円曲線暗号(ECC)
  62. 62. 中間者攻撃 (MITM攻撃) Alice Mallory Bob Bobの 公開鍵 Malloryの 公開鍵 Malloryの鍵の 暗号文 Bobの鍵の 暗号文 解読 改竄
  63. 63. ハイブリッド暗号  RSAなど、公開鍵暗号は共通鍵暗号に比べて とても遅い  共通鍵暗号の鍵はそのまま送ることはできない  両者のいいとこ取りをする
  64. 64. ハイブリッド暗号  平文を共通鍵暗号で暗号化する  共通鍵暗号で使った鍵を公開鍵暗号で暗号化  共通鍵暗号の鍵をセッション鍵という  セッション鍵は乱数で与える  セッション鍵は公開鍵暗号にとっては平文  公開鍵は予め知っておく必要がある
  65. 65. ハイブリッド暗号 暗号文共通鍵 暗号化 平文 セッション鍵 公開鍵 暗号化 暗号化された セッション鍵 公開鍵
  66. 66. 一方向ハッシュ関数
  67. 67. 一方向ハッシュ関数  任意の入力を固定長のハッシュ値に変換する関数  メッセージの正真性を検証するのに使われる  ハッシュ値が衝突するような異なるメッセージの組を 見つけるのが非常に困難である必要がある (衝突が存在しないハッシュ関数は存在しない)
  68. 68. 一方向ハッシュ関数 メッセージA メッセージB 一方向 ハッシュ関数 一方向 ハッシュ関数 ハッシュ値A ハッシュ値B比較
  69. 69. 一方向ハッシュ関数  弱衝突耐性  そのハッシュ値を持つ別のメッセージを見つけ出す のが困難  強衝突耐性  ハッシュ値が一致するような異なる2つのメッセージを 見つけ出すのが困難
  70. 70. 一方向ハッシュ関数  一方向ハッシュ関数は強衝突耐性をもつ必要 がある  強衝突耐性がないと、ハッシュ値が一致するように メッセージを改竄できるかもしれない
  71. 71. 一方向ハッシュ関数  用途  ソフトウェアの改竄検出  パスワードを元にした暗号化(PBE)  デジタル署名  擬似乱数生成器
  72. 72. 一方向ハッシュ関数  md4  強衝突耐性が破られている  md5  強衝突耐性が破られている  SHA-1  強衝突耐性が破られている  最近Googleが衝突攻撃を成功させた
  73. 73. 一方向ハッシュ関数  SHA-2  SHA-256, SHA-384, SHA-512はすべてSHA-2  まだ強衝突耐性は破られていない  NISTが開発  SHA-3  コンペによる標準化で選定  SHA3-224, SHA3-256, SHA3-384, SHA3-512がある
  74. 74. SHA-3  コンペによる標準化で選ばれたKECCAKという アルゴリズムである  解析しやすい、クリーンな構成をしている  複数のラウンドを回すことやマトリョーシカ構造より、弱いKECCAKを 容易に実装でき、それを攻撃することで強度が見積もれる  SHA-2と全く異なる構造をしている
  75. 75. SHA-3 (スポンジ構造) 入力 パディング 入力ブロック 0 0 f f f f 内 部 状 態 f f f 出力ブロック 出力 吸収フェーズ 搾出フェーズ
  76. 76. SHA-3  KECCAKの内部状態は5x5xzの直方体  SHA-3ではz = 64で、状態は1600bit  θ, ρ, π, χ, ιの5つのステップで1ラウンドである  SHA-3では24ラウンド繰り返す (画像:http://keccak.noekeon.org/)
  77. 77. SHA-3 θステップ ● 2つの行の各ビットのxorを足す (画像:http://keccak.noekeon.org/)
  78. 78. SHA-3 ρステップ  z方向へビットシフトする (画像:http://keccak.noekeon.org/)
  79. 79. SHA-3 πステップ  レーンを移動させる (画像:http://keccak.noekeon.org/)
  80. 80. SHA-3 χステップ  列に対し右図のような ビット演算を行う ιステップ  ラウンド定数と状態の xorをとる (画像:http://keccak.noekeon.org/)
  81. 81. 一方向ハッシュ関数  原像攻撃  あるハッシュ値をもつメッセージを探索する  第二原像攻撃  あるメッセージと同じハッシュ値を持つ別のメッセージ を探索する  どちらも弱衝突耐性を破ろうとする攻撃
  82. 82. 一方向ハッシュ関数  誕生日攻撃 (衝突攻撃)  同じハッシュ値を持つ2つのメッセージを探索する  強衝突耐性を破ろうとする攻撃  誕生日のパラドックスに由来  誕生日攻撃の試行回数はブルート・フォース・アタック よりずっと少なくて済む
  83. 83. 誕生日のパラドックス  誕生日が同一の2人が50%以上の確率で存在するには、 何人集めればよいでしょうか?
  84. 84. 誕生日のパラドックス  誕生日が同一の2人が50%以上の確率で存在するには、 何人集めればよいでしょうか?  23人いればよい  H個の値の集合からn個を無造作に選んだとき、同じ値 が2度以上選ばれる確率が50%以上になるには、 Hが大きいときおよそn √H≒
  85. 85. メッセージ認証コード
  86. 86. メッセージ認証コード (MAC)  Message Authentication Code 略してMAC  なりすましや改竄を検出できる  メッセージと共通鍵から計算されるMAC値を比較して 認証する  一方向ハッシュ関数、ブロック暗号を使って実現される
  87. 87. メッセージ認証コード (MAC) Alice Bob メッセージ MAC値 メッセージ 認証コード 共通鍵 メッセージ MAC値 メッセージ 認証コード 共通鍵 MAC値 比較
  88. 88. メッセージ認証コード (MAC)  共通鍵暗号で暗号化した文章を送るのと違うのか?
  89. 89. メッセージ認証コード (MAC)  共通鍵暗号で暗号化した文章を送るのと違うのか?  共通鍵暗号だけでは  ランダムなビット列を正しい鍵で暗号化したもの  適当なビット列を誤った鍵で暗号化したもの の区別ができない
  90. 90. メッセージ認証コード (MAC)  利用例  SWIFT (国際銀行間通信協会)  IPsec  IPにセキュリティの機能を加えたもの  SSL/TLS
  91. 91. メッセージ認証コード (MAC)  GMAC  認証付き暗号(AEAD)のGCMで使われる  暗号化と認証を同時に行う仕組み  HMAC  MACとしてSHA-1やSHA-2を選べる
  92. 92. HMAC  HMACは hash(opadkey + hash(ipadkey + message)) 但し、  ipadkey = key ipad⊕ (ipadは00110110の繰返し)  opadkey = key opad⊕ (opadは01011100の繰返し)  keyは鍵に、hashのブロック長まで0でパディング したもの
  93. 93. メッセージ認証コード (MAC)  再生攻撃  盗聴したメッセージとMAC値を送りつける  次のような対策がある  シーケンス番号を振る  タイムスタンプを埋め込む  使い捨てのランダムな値ノンスを用いる
  94. 94. メッセージ認証コード (MAC)  メッセージの否認防止ができない  つまり第三者に対する証明ができない  MAC値を計算可能なのは、アリスとボブの2人存在する  アリスが作成したメッセージではなく、ボブ自身が作成 したメッセージかもしれない
  95. 95. デジタル署名
  96. 96. デジタル署名  改竄、なりすましの検出、否認の防止ができる  MACでは鍵が共通だったので否認防止が出来なかった  非対称の鍵を使えば否認防止が出来るのでは?
  97. 97. 公開鍵暗号 Alice Bob 公開鍵 プライベート鍵平文 公開鍵 暗号文 暗号文 平文
  98. 98. デジタル署名 Alice Bob 公開鍵 プライベート鍵平文 公開鍵 暗号文 暗号文 平文 平文を暗号化できるのはBobだけ
  99. 99. デジタル署名  Bobだけが平文の暗号化をできる  暗号文を署名として扱う  公開鍵を使えばBobが署名したことを誰でも検証できる  実際にはメッセージのハッシュに署名を行う
  100. 100. デジタル署名 Alice Bob メッセージメッセージ ハッシュ値 署名 公開鍵 プライベート鍵 ハッシュ値 署名 Aliceが署名した ハッシュ値 比較
  101. 101. デジタル署名  利用例  セキュリティ情報のアナウンス  メッセージが暗号化されないクリア署名がなされる  ソフトウェアのダウンロード  署名付きアプレット  証明書  SSL/TLS
  102. 102. デジタル署名  RSA  ElGamal方式  DSA (Digital Signature Algorithm)  ElGamal方式の変種  楕円曲線DSA (Elliptic Curve Digital Signature Algorithm)  Rabin方式
  103. 103. デジタル署名  潜在的偽造  あるビット列Sを公開鍵で暗号化し、Mとする  SはMのデジタル署名である  RSA-PSSはこれに耐性がある
  104. 104. デジタル署名  中間者攻撃  デジタル署名では予め公開鍵を入手する  この公開鍵は本物なのか? → 別の信頼できる人に公開鍵を署名してもらう  デジタル署名された公開鍵を証明書という  この署名にも公開鍵が必要...
  105. 105. 証明書  公開鍵証明書 (PKC) を 認証局 (CA) が署名  認証局には誰でもなることができる  公開鍵を運用するために多くの規格や仕様がある  総称して公開鍵基盤 (PKI) という
  106. 106. 公開鍵基盤 (Public-Key Infrastructure) Alice Bob Bobの 公開鍵 信頼できる第三者Trent 認証局リポジトリ 署名 Bobの 公開鍵 Trentの 署名 証明書 ダウンロード 登録
  107. 107. 証明書  利用者のプライベート鍵が盗まれたりした場合 公開鍵を破棄する必要がある  認証局は証明書破棄リスト (CRL) を作成する  破棄された証明書の一覧に署名したもの  CRLは最新のものなのか、しっかり確認する必要がある
  108. 108. 証明書  認証局の署名にも公開鍵が使われる  認証局の公開鍵の証明書を別の認証局が作成する  認証局の署名は階層になる  階層の最上位をルートCAという  ルートCAはセルフ署名をする
  109. 109. 証明書  似た人間を登録する攻撃  BobはCAに名前をBobで登録  MalloryはCAに名前をBOBで登録  AliceはBOBをBobと誤認してしまうかもしれない  CAの運用規定を確認する必要がある
  110. 110. 証明書  攻撃者自身がCAになる攻撃  いわゆるオレオレ認証局  正しい証明書でも、CAが信用できなければ意味がない
  111. 111. 証明書  CRLの隙を突く攻撃  BobがAliceにメールを送ってから、CAに公開鍵を 破棄してもらう通知をする  AliceはメールをBobのものだと思う  BobはAliceに届いたメールを否認する  これを完全に防ぐのは無理
  112. 112. 擬似乱数生成器
  113. 113. 乱数  鍵の生成、初期化ベクトルなど、予測不可能な値が 必要な場合がしばしばある  乱数には次の性質がある  無作為性… 統計的な偏りがない  予測不可能性 … 過去の数列から次の値が予測できない  再現不可能性 … 同じ数列を再現できない
  114. 114. 乱数  ソフトウェアだけでは、再現不可能性を満たすことは できない  コンピューターの内部状態は有限  同じ内部状態のコンピューターからは同じ値が生成される  そのうち数列は繰り返しになる
  115. 115. 乱数  乱数を生成するソフトウェアを擬似乱数生成器 (PRNG) とよぶ  擬似乱数生成器には種(seed)が必要  ハードウェアからの情報を使えば再現不可能性を 満たすことができるかもしれない  そのようなハードウェアを乱数生成器とよぶ
  116. 116. 乱数  線形合同法  R0 = (seed) とする  Rn+1 = (A x Rn + C) mod M で乱数を生成する  うまくA, C, Mを選べば無作為性は満たされる  過去の数列があればA, C, Mは逆算できる  予測不可能性を持たないので暗号技術には使えない
  117. 117. 乱数  一方向ハッシュを使う方法  counter = (seed) で初期化する  Rn = hash(counter) で乱数を得て、counterに1を足す  乱数を予測するにはhashの一方向性を破る必要がある
  118. 118. 乱数  暗号を使う方法  seedはカウンタ初期化用と鍵用の2つに分ける  counter = (seed1) で初期化する  Rn = encrypt(counter, seed2) で乱数を得て、 counterに1を足す  乱数を予測するには暗号を解読する必要がある
  119. 119. 乱数  擬似乱数生成器の種は予測されてはいけない  種には、種を必要としない乱数が必要  ランダムプールに蓄えている  Unix系OSは/dev/randomで得られる
  120. 120. 暗号技術の活用
  121. 121. SSL/TLS (Secure Socket Layer/Transport Layer security)  世界で最も利用されている暗号通信の方法(プロトコル)  httpsで用いられている  httpsでは、SSL/TLSの上にhttpが乗っている  http以外にもプロトコルを乗せられる  例えばメールのプロトコルSMTP, POP3
  122. 122. SSL/TLS (Secure Socket Layer/Transport Layer security)  SSLはNetScape社(現Mozilla)の作ったプロトコル  TLSはSSL3.0を元にIETFによって作られたプロトコル  TLS1.0はSSL3.1に相当する  SSL3.0まではPOODLE攻撃より使用を推奨されない
  123. 123. SSL/TLS (Secure Socket Layer/Transport Layer security)  TLSは暗号通信の枠組みを提供する  使用する暗号技術を選択できる  実際には暗号スイートから選ばれることが多い
  124. 124. SSL/TLS (Secure Socket Layer/Transport Layer security)  TLSプロトコルは  TLSハンドシェイクプロトコル  TLSレコードプロトコル からなる
  125. 125. SSL/TLS (Secure Socket Layer/Transport Layer security)  TLSハンドシェイクプロトコル  以下のサブプロトコルがある  ハンドシェイクプロトコル  暗号仕様変更プロトコル  警告プロトコル  アプリケーションデータ プロトコル TLSレコード プロトコル TLSプロトコル ハ ン ド シ ェ イ ク プ ロ ト コ ル 暗 号 仕 様 変 更 プ ロ ト コ ル 警 告 プ ロ ト コ ル ア プ リ ケ ー シ ョ ン デ ー タ プ ロ ト コ ル TLSハンドシェイクプロトコル
  126. 126. SSL/TLS (Secure Socket Layer/Transport Layer security)  TLSレコードプロトコル  TLSハンドシェイクプロトコルのデータを分割、圧縮し、 MACをつけて共通鍵暗号で暗号化する  初期化ベクトル、共通鍵暗号とMACの鍵は マスターシークレットから生成する  暗号文にヘッダをつけて送信データとする
  127. 127. SSL/TLS (Secure Socket Layer/Transport Layer security)  ハンドシェイクプロトコル  使用する暗号を合意する  証明書を交換する  マスターシークレットを得る  最初のハンドシェイクでは「暗号化なし」という 暗号化スイートを使っている
  128. 128. SSL/TLS (Secure Socket Layer/Transport Layer security)  暗号仕様変更プロトコル  暗号を切り替える合図をする  警告プロトコル  エラーを伝える  アプリケーションデータプロトコル  httpなどのデータが乗る
  129. 129. SSL/TLS (Secure Socket Layer/Transport Layer security)  既知の主な脆弱性  OpenSSLのHeartBleed脆弱性  POODLE攻撃  FREAK攻撃
  130. 130. おわりに
  131. 131. おわりに  暗号技術はセキュリティの一部でしかない  SSL/TLSは通信経路で第三者から読まれることはない が、通信前と通信後は分からない  サービス拒否攻撃をすると暗号技術は無意味  人間はパスワードを漏らすかもしれない  人間はマルウェアを動かすかもしれない
  132. 132. (Option) 暗号通貨
  133. 133. 暗号通貨  中本哲史という謎の人物の論文が元  “Bitcoin: A Peer-to-Peer Electronic Cash System”  ビットコインは通貨というよりは、P2Pネットワーク上 で動作する決済システム  ビットコインの最小単位0.00000001 BTCは筆者の名前 にちなんで1 satoshi と名付けられた
  134. 134. 暗号通貨  出来ること  通貨の送金  通貨の採掘
  135. 135. 暗号通貨の送金  通貨はビットコイン・アドレス間で取引される  ビットコイン・アドレスは公開鍵をSHA-256と RIPEMD-160の2つのハッシュ関数を通したもの  暗号アルゴリズムは楕円曲線暗号  使われている楕円曲線はx2 = y3 + 7
  136. 136. 暗号通貨の送金  送金する人が、「どのアドレスからどのアドレスに いくら送金するか」を決める  この取引をトランザクションと呼ぶ  送金する人はトランザクションにデジタル署名をして 公開鍵とともにP2Pネットワークに送信する
  137. 137. 暗号通貨の送金  P2Pネットワークにはトランザクションが流れてくる  未検証のトランザクションはトランザクションプールに 蓄えられる  採掘者がトランザクションプールのトランザクションを 検証、承認する
  138. 138. 暗号通貨の送金 採掘者 P2P Network トランザクション アドレスA アドレスB n BTCを送金 + 手数料 デジタル署名 ブロード キャスト プール 検証 ブロック Aの公開鍵
  139. 139. 暗号通貨の送金  採掘者はトランザクションプールの中から好きな トランザクションを検証し、ブロックを作成する  採掘者は作成したブロックが承認されると 一定の報酬と手数料を得ることができる  手数料が多いほうが検証されやすい  少ないとトランザクションが成立するのに時間がかかる
  140. 140. 暗号通貨の採掘  ビットコインの取引は全てブロックチェーンという 公開取引簿に記録されている  ブロックチェーンを参照することで任意のアドレスの 残高が求まる  ブロックチェーンはブロックが連鎖したものである
  141. 141. 暗号通貨の採掘  ブロックチェーンに新たなブロックを繋ぐ競争  直前のブロックのハッシュ値  検証したトランザクション全体のハッシュ値  あるノンス からなるヘッダでハッシュ値を計算すると、上位 ビットに0が一定個数並ぶようなノンスを探索する (
  142. 142. 暗号通貨の採掘 ブロック 前のブロックの ヘッダのハッシュ値 トランザクション集合 のハッシュ値 ノンス ヘッダ トランザクション トランザクション 集合 トランザクション トランザクション ︙
  143. 143. 暗号通貨の採掘 ブロック ヘッダ トランザクション 集合 ブロック ヘッダ トランザクション 集合 ブロック ヘッダ トランザクション 集合 ブロックチェーン
  144. 144. 暗号通貨の採掘  ビットコインではハッシュ関数にSHA-256を2重にし て使用する  平均で10分に1つのブロックが追加されるように、0 の並ばないといけない数(difficulty)を調整する  2016ブロック毎に、平均10分を超えているかで判断
  145. 145. 暗号通貨の採掘  このようなハッシュ値の計算は、ビットコインの偽造 を防ぐために行われる  Proof of Work; PoWとよぶ  過去のトランザクションを改竄するには、その ブロックから全てのハッシュ値を計算し直す必要が あるが、追いつくのは厳しい
  146. 146. 暗号通貨の採掘  ある採掘者がノンスを見つけてブロックを作成  追加されるブロックがP2Pネットワークに ブロードキャストされる  他の採掘者はそのブロックが正しいか検証、承認する
  147. 147. 暗号通貨の採掘  ノンスが同時に見つけられることもある  両方のブロックがブロードキャストされ、P2Pネット ワーク上では両方保持される  最終的に、長く繋がったブロックチェーンが 承認される
  148. 148. 暗号通貨の採掘  ブロックを生成、承認しているのは採掘者  採掘者の過半数が善良な採掘者であることが前提  採掘者の過半数の計算資源を掌握できれば  少数派のブロックを拒否できる  不正なトランザクションを含んだブロックを 承認させられる などの攻撃が可能 (51%攻撃)
  149. 149. 暗号通貨まとめ  暗号通貨は  デジタル署名による取引の正当性の証明  ハッシュ関数の一方向性を利用したPoWによる 偽造、改竄の防止 といった、暗号技術に裏付けられたシステムである
  150. 150. おしまい

×