読者です 読者をやめる 読者になる 読者になる

There's an echo in my head

日々のメモ。

結城浩「新版暗号技術入門 秘密の国のアリス」を読んでる

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

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

すごくわかりやすいし面白い。

  • 共通鍵暗号
    • 事前に共有しておいた秘密鍵を使って暗号化・復号化する方式
    • 今のところAES-256-CBCが安全
      • AES(やDES)は固定長のブロックを暗号化するための技術
        • ブロック暗号という
        • ストリーム暗号
      • CBCやCTRは自由長のバイト列をブロックに分割してブロック暗号に渡す方法。モード
        • CBCは前ブロックの結果(最初は初期化ベクトル)を対象のブロックにXORしてから暗号化する
          • 並列処理はできない
          • 最後のブロックはそれ以前の全てのブロックの影響を受けるので、最後のブロックだけ切り取ってMACに使うことができる
        • CTRはnonceをもとに作ったカウンタをブロックごとにインクリメントして暗号化し、ブロックとXORをとる
          • ブロックごとの並列処理ができる
          • ブロックごとの暗号化は独立しているのでCBCのようにMACには使えない
  • 公開鍵暗号の仕組み
    • 公開鍵暗号は公開鍵で暗号化したものはそれと対になるプライベート鍵でのみ復号化できるという方式
    • RSA公開鍵暗号アルゴリズムのひとつ
      • デジタル署名にRSAが使えるのは、それが上記と逆にプライベート鍵で暗号化したものを公開鍵で復号化できるから
      • 公開鍵暗号アルゴリズムであってもデジタル署名に使えるとは限らない
  • 共通鍵暗号公開鍵暗号の使い分け
    • 共通鍵暗号は速いけど事前に相手に秘密鍵を安全に共有しておく必要がある
    • 公開鍵暗号は遅いけど公開鍵だけを相手に渡しておけばよく、これは他者に漏れても構わない
      • プライベート鍵さえ漏れなければ良い
    • 長い秘密のメッセージを送りたい場合には、そのセッション用の秘密鍵を生成し、それでメッセージを暗号化する。そしてセッション秘密鍵を相手の公開鍵で暗号化してセットで送れば、相手はそれと対になるプライベート鍵でセッション秘密鍵を復号化し、さらにメッセージを復号化できる
  • 暗号化で守れないもの
    • 暗号化はあくまでデータを他人に見られないようにするための技術
    • 通信経路での改ざんは行われなかったのかという正真性の検証にはハッシュを使う(MD5SHA-1、SHA-2(SHA-256など)、最近はSHA-3をコンペするとか)
    • そもそも本当に本人が送ってきたものなのか、また第三者がみてどうやってそれを判断するかという認証にはメッセージ認証コード(MAC)やデジタル署名を使う

などなど。デジタル署名あたりまで読み終えたけど、SSL/TLSはまだまだこれから。

素数をもとにしたRSAが解けるかどうかは素因数分解を高速に解けるかどうかにかかっていて、P≠NP問題が暗号につながるのはこれかーとか。楕円曲線暗号ってなんだろうなーとか。AESはオープンなコンペ方式で専門家が穴をつつきまくった結果負けなかったアルゴリズムであるとか。

やあ、楽しいですね。

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。