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