5/01/2013

SSLって、なぜ安全なの?

SSLって、安全な通信という漠然としたイメージがあるのですが、どの程度安全といえるのか気になりませんか。
いきなりですがSSL(初期バージョンはNetscapeCommunication社「なつかしい」1994年開発)は、すでに古い標準らしく、TLSTransport Layer Security : IETF1999年仕様策定)が今流なようです。
これからはSSLじゃなくてTLSと言わないといけないのかもしれません。

では本題、TLS(SSL)を使えばはどうして安全なのか。
TLS(SSL)通信ハンドシェーク時、次の事項などを取り決めて、それにしたがって通信を暗号化して行うから安全 ―「盗聴しても内容分らない」「データ改ざんを検出する」― とされています。
  1. TLS(SSL)のバージョン
  2. 公開キー交換アルゴリズム 
  3. データ通信用暗号アルゴリズム
  4. メッセージ認証時の一方向ハッシュ関数アルゴリズム
少し具体的には、
1.まずサポートするバージョンを通知する通常SSL3.0TLS1.1など。TLS1.2ならAPI便宜上、バージョンSSL3.3で通信するって感じらしい。
2.各種このセッションで使用する暗号たち、キー配布問題を減らすための公開キー暗号アルゴリズムも決める。公開キー交換では、RSAか、Diffie-Hellmanが一般的。**ここで一言、公開キー交換暗号の仕組みは離散対数・大きな素数の素因数分解を求める良い方法が未だに存在しないことを利用しているので、完全な安全性の証明は出来てないが、十分安全であることは証明されているようで、一安心。詳細は文末のリンクを参照ください。** ついでに証明書がどのアルゴリズムを使用しているかもやり取りする。RSAが多いが DSS(DSA)なども。
3.データの暗号化に使用するアルゴリズムを決める。RC4,3DES,AESなど。ブロック暗号(3DES,AES)であればモードはCBCで行うと思う。
4.メッセージ認証に使用する一方向ハッシュを決める。MD5SHA-1など。TLS1.2では、SHA-2 (SHA-256....)もサポートするようです。

ハンドシェーク後、3の方式でデータを暗号化し、4の方式でそのデータの正当性を検証しながら通信するので、盗聴されても心配ない、改竄のない安全な通信が実質行えることになる。
仕様的には、通信途中に暗号セットを変更することも可能なようです。

最後に、RSA公開キー・秘密キーは異なるキーと知っていましたが、どうして公開キーで暗号化したものが、公開キーでは簡単に複合できず、秘密キーが必要となるのかとくすぶっていた疑問がありましたが、やっと解消できました。詳しくはhttp://ja.wikipedia.org/wiki/公開暗号 を参照ください。

0 件のコメント:

コメントを投稿