1.はじめに
普段「暗号化」や「SSL/TLS」という言葉を使ったり、耳にしたりします。
ですが、実際暗号化ってどんなことしているのかよくわかっていなかったので、調べてみました。
2.そもそも暗号化とは
◼️暗号化とは?
・通信文を第三者が見てもわからないように変換する手法
・SSL/TLSというプロトコルを使っている
◼️暗号化技術が実現する3つのこと
・機密性:秘密が守られること
・真正性:本人であることが検証できること
・完全性:データが改竄されることなく転送されること
◼️TLSとは?
・Transport Layer Securityの略称
・転送される情報を守るためのプロトコル
・プレゼンテーション層のプロトコル
・トランスポート層のためのセキュリティ
◼️SSLとは?
・Secure Socket Layerの略称
・TLSの前身
3.暗号化方式
3-1.共通鍵暗号化方式
仕組み:図3.1のようにAさんとBさんのみが知っている秘密鍵を使って暗号化、複合化を実施(AさんとBさんの使用している鍵は「共通」している「秘密鍵」)
良い点:第三者が暗号化されたデータを見ても、鍵がない限り元のデータを見れない
注意点:秘密鍵を第三者に盗まれると外部に情報が漏れてしまう
共通鍵暗号化方式は大きくストリーム暗号化方式とブロック暗号化方式に分かれる
3-1-1.ストリーム暗号化方式
・鍵ストリームという乱数列との排他的論理和に変換する手法
・同じ鍵ストリームを使用すると複合化が可能
・鍵ストリームの各バイトがどの位置にあたるか予測されてしまうと攻撃される
・同じ鍵を使い回さないことが重要
表3.1.1. 論理和真理値表
A | B | 論理和 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
図3.1.1.ストリーム方式暗号化方式
3-1-2.ブロック暗号化方式
・データの塊をまとめて暗号化する手法
・入力における小さな変化が出力の結果を大きく変える
・ブロック暗号化方式を利用する際には、暗号化利用モードといわれる暗号化スキームを利用する(AES256等)
※その他暗号化利用モードの詳細はこちらの記事がわかりやすかったので、ご参照ください
https://qiita.com/shoichi0599/items/6082b765c1257b71985b
3-2.ハッシュ関数
仕組み:任意の長さの入力を受け取り固定長の出力へ変換するアルゴリズム
特徴:ハッシュ関数が出力した値をハッシュ値と呼ぶ
一方向性
ハッシュ関数で使用されている「SHA1」というアルゴリズムが「SHA256」への移行を推奨されている
メリット:大きなデータを手軽に表現して比較しやすい
デメリット:不可逆変換のため、管理者が元の値を予測しづらい
3-3.MAC(メッセージ認証コード)
・ハッシュ関数を拡張して認証可能にした関数
・HMAC(Hash-based MAC)を利用すると、ハッシュ鍵を安全な方法でメッセージに織り交ぜることができる
3-4.公開鍵暗号化方式
・「公開鍵」と「秘密鍵」の2種類の鍵を使用する
・秘密鍵は第三者に漏洩しないようにし、公開鍵は別の人と共有する
・大人数でデータを安全にやりとりする際に利用される
(共通鍵暗号化方式は、複数の鍵を作る(管理工数がかかる)、もしくは一つの鍵を大人数に共有する(漏洩のリスクが増す)ため集団で利用するには不向き)
・以下2つの方式がある
- 図3.4のように公開鍵で暗号化したものを秘密鍵で複合化する方式(秘密鍵でなければ複合できないようにする)
- 秘密鍵で暗号化したものを公開鍵で複合化する方式(ディジタル署名に使用される)
3-5.ディジタル署名
・公開鍵暗号化方式を応用した手法
・電子的メッセージや文書に対する真正性を検証可能にする手法
・MACもディジタル署名の一種
4.まとめ
暗号化方式の基礎となる部分についてまとめました。
暗号化方式はここ数年で最新の技術やアルゴリズムが出てきているので、キャッチアップしていくのがとても大変だなと感じました。
ここまで書いてきた「鍵」というのは全て長文の文字列(乱数)です。そのため、単純な文字列を鍵としてしまったら、そもそもの暗号化の意味がなくなってしまうので、注意してください。
参考書籍
プロフェッショナルSSL/TLS(参考にしたものは2015年度版のため、URL書籍の古いものです)