暗号技術入門 秘密の国のアリスを読んだメモ

まとまった休みなんで積ん読してた本を消化するday。

結城先生の名著、「新版暗号技術入門 秘密の国のアリス」を読んだ。

を暗号学者の道具箱と表現していて、これらの要素を暗号・認証・鍵/乱数の3部構成に分けて書いてある。

擬似乱数生成器とか一方向ハッシュとかは普段から実装レベルで利用することとかあるし、部分的に理解してはいたけどこういうふうに体系的にまとめてある本を読むと頭の中でそれぞれの要素が有機的につながりあって整理されるのが気持ち良い。

ブロックチェーンの技術要素としても深くかかわってくる領域だし、今後量子コンピュータが実用化レベルに達した少し遠い未来でこれらの暗号技術がどのように更新されていくのか興味深いところ。

「暗号技術のアルゴリズムは公開されているものを使うべき」というのはいまや常識的な話だと思うけど、この本の中で何度も繰り返されているところをみるとやはり「弊社独自の暗号技術を利用しており..(キリッ」みたいな会社はまだまだ後を絶たないのかなぁなどと思ったりした。

次はdeeeetさんが「Go言語と暗号技術(AESからTLS)」でやっていたような各言語に実装されてる暗号技術系のライブラリなんかを読んでみようかなと思う。

あと300日くらい休暇ほしいです。

最後に、株式会社GIFMAGAZINEでは暗号技術が好きなエンジニアを募集しています。

  • 興味ある人はこっちに連絡くれてもOKです → @razokulover

以下は読書メモです。メモに数式とか書きづらいから概要だけになっちゃうよね...。

対称暗号

  • 共通の鍵でメッセージを暗号&復号
  • DES -> やぶられる
  • AES -> こっち使え
  • メッセージをブロックごとに暗号化
  • 鍵を安全に配送する問題が発生する

公開鍵暗号

  • 公開鍵で暗号化
  • 秘密鍵で復号
  • RSA
    • 素数の組み合わせp,qから作っていく
    • 具体的に作ってみようの章わかりやすい
  • 鍵配送問題は解決
  • しかし、鍵が本当に対象の相手からのものかわからん問題が発生
    • man in the middle攻撃

一方向ハッシュ関数

  • 可変長のメッセージから同一メッセージならほぼ重複しない固定長ビットのハッシュ値を生成する
  • MD4,5
  • SHA-1,256,512
  • 生成されたハッシュ値を比べることでメッセージの中身を全走査しなくてもメッセージの改竄を防げる
  • 攻撃者が別の内容のメッセージで同一ハッシュ値になるものを見つけた場合のすりかえ攻撃を防げない = なりすましは防げない

メッセージ認証

  • 共通鍵でメッセージをハッシュ化する == MAC
    • HMAC
  • 共通鍵を持ってる2人の間ではなりすましは防げる?
    • 防げない。「誰からの」メッセージとMAC値なのかわからないのでなりすませる。
    • メッセージとMAC値を盗聴して再利用しつづけられる == 再生攻撃
  • 対象暗号と同様鍵配送問題に直面する

デジタル署名

  • 送信者は秘密鍵で署名を作成し、受信者は公開鍵で署名を復号することで署名者を確認する仕組み
  • 送信者: メッセージのハッシュ値秘密鍵で暗号化し署名としメッセージと署名をセットで送信
  • 受信者: 公開鍵で署名を復号し、メッセージをハッシュ化した値と署名の復号で得た値を比べることで本人の認証ができる
  • 公開鍵暗号ではメッセージの内容の機密性を守ることができた
  • デジタル署名では改ざん・なりすまし・否認を防げる

公開鍵証明書

  • 認証局がデジタル署名を行った公開鍵
  • 認証局は公開鍵の持ち主のメールアドレス確認や対面であって本人確認を行うなどの審査で認証を行う
  • 証明書はX.509という規格に基づいて造られる
  • 認証局が署名した公開鍵はリポジトリに登録され、利用者はそこからダウンロードできるようになる
  • 認証局の公開鍵を認証局が署名する必要がある
    • 認証局Cの公開鍵を認証局Bが署名し、認証局Bの公開鍵を認証局Aが署名し、認証局Aの公開鍵をルートCAである認証局Aが自身で署名していく流れになる
    • 最も上位の認証局をルートCAと呼ぶ
    • 認証局Cが署名したボブの公開鍵の署名を確認するためには、ルートCAの公開鍵を持っている必要がある
  • 認証局の信頼性がめっちゃ重要やな...
  • 何も信頼できない状態から信頼を作り出す技術はまだ生み出されていません

Diffie Hellman鍵交換

  • 説明しづらいけど、ボブ・アリス間の通信を傍受されても鍵を生成できないような鍵交換方式
  • 自分の知り得る情報からパスワード作るべき
    • Episopassってこれ出来てるやん

擬似乱数生成器

  • 予測不可能性 === 強い擬似乱数 == 暗号の種として利用できる
  • 内部状態を何らかの方法で変化させて生成する値 = 擬似乱数
  • 線形合同法
  • 一方向ハッシュを利用
    • 初期値の値をハッシュ化して擬似乱数として、内部状態をインクリメントして次へ
    • 予測不可能性がある
  • 暗号を利用
    • 内部状態の値を鍵暗号をかけて、擬似乱数を生成し、内部状態をインクリメントして次へ
    • 予測不可能性がある

まとめ

  • 鍵は、機密性のエッセンス
  • ハッシュ値は、正真性のエッセンス
  • 署名やMAC値、認証のエッセンス
  • 擬似乱数生成器の種は、予測不可能性のエッセンス