電子書籍の厳選無料作品が豊富!

SSLには通信内容の改ざん検知機能がついていますが、
実際に改ざんが検知された場合、次にどのように振舞うのでしょうか?

SSLを強制切断するのですか?
再送するのでしょうか?

よろしくお願いします。

A 回答 (4件)

SSLの実装によって違うでしょうけれど、相手に致命的なエラーを示すアラートが送られると思います。



GnuTLSやNSSなど他の実装は見ていませんが、とりあえずOpenSSLだと致命的なエラー扱いとなり、アラートが送られるように見えます。
実際に改ざんを検出するコードは static int ssl3_get_record(SSL *s) だと思います。
www.openssl.orgの方でソースコードを見ても行番号がでないのでFreeBSDのリポジトリで説明します。
http://svnweb.freebsd.org/base/head/crypto/opens …

この関数では、ヘッダーが正しいか確認をした後に、ボディの確認をします。
適切な長さであるかなどサニティチェックもしますが、一応、改ざん検出というとMessage Authentication Code (MAC)で行うところがメインだと思うのでそこに注目します。

コメントを見て類推するに、
402 enc_err = s->method->ssl3_enc->enc(s,0);
でレコードのボディを復号し、
469 i=s->method->ssl3_enc->mac(s,md,0 /* not send */);
でMACが正しいか確認していると思います。

469のところでMACが不正、つまり、改ざんがあったと確認されると、
483 al=SSL_AD_BAD_RECORD_MAC;
484 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
485 goto f_err;
が実行され、
534 ssl3_send_alert(s,SSL3_AL_FATAL,al);
で相手に致命的だと示すアラートが送られるはずです。


なお、致命的なエラーを示すアラートを受け取ると、基本的には通信をシャットダウンするみたいです。
1259 s->shutdown|=SSL_RECEIVED_SHUTDOWN;
1260 SSL_CTX_remove_session(s->ctx,s->session);


というわけで、少なくともOpenSSLでは強制切断するというのが答えのように見えます。
    • good
    • 0
この回答へのお礼

#読みにくいインデントの仕方のコードですね、、、

ありがとうございます。
私のほうでも読んでみました。
シャットダウンしてますね。

通常のパケットエラーであればTCPレベルで復帰させますし、
SSLの段階でエラーが見つかるってことは
よほどのこと、つまり重大な改ざんと考えての実装なんですかねー

お礼日時:2013/10/05 10:37

> 通常のパケットエラーであればTCPレベルで復帰させますし、


> SSLの段階でエラーが見つかるってことは
> よほどのこと、つまり重大な改ざんと考えての実装なんですかねー

確認ですが、パケットエラーと改竄は違いますよね?
パケットエラーだと通信機器などの理由でビットなどが変わってしまったわけで、多くの場合はそれぞれのレイヤーのエラー訂正の仕組みによって検出・訂正がなされますよね。
改竄は誰かが故意に中身を書き換えたわけですから、その時にエラー訂正符号も正しいとして認識されるように変更しますよね。
普通に考えて、改竄が検出されるということは通信路に攻撃者がいて、改ざんしたとしか思えないので、再送を許すとそれだけで攻撃者に試す機会を与えることになりますよね。それに、パケットエラーではないので、再送して何かが改善するとも思えません。


ちなみに、調べてみた感じだと、OpenSSLの実装はRFC通りに作っただけでしょうね。
というわけで、"SSLの実装によって違うでしょうけれど"は撤回します。RFC通りに作ってあれば、fatal アラートを投げるということが決まっていて、fatalアラートを受け取った相手は通信を終了するはずです。

RFC 2246 The TLS Protocol Version 1.0 (http://www.ietf.org/rfc/rfc2246.txt)
7.2.2. Error alerts
| party. Upon transmission or receipt of an fatal alert message, both
| parties immediately close the connection. Servers and clients are
(snip)
| bad_record_mac
| This alert is returned if a record is received with an incorrect
| MAC. This message is always fatal.

この回答への補足

>改竄は誰かが故意に中身を書き換えたわけですから、その時にエラー訂正符号も正しいとして認識されるように変更しますよね。

これは実態はそうでも改ざんの定義ではないのではありませんか?

補足日時:2013/10/07 13:06
    • good
    • 0

「改竄」じゃなく、単に「エラー検知」するだけの話だと思いますが・・・


エラーをアプリケーションに渡したら、その後どうするかはアプリケーション
で再送要求するか、エラーのまま処理するか・・
    • good
    • 0

それ、どこの文献からの引用ですか? 出生をはっきりさせてください。

この回答への補足

当然rfc

補足日時:2013/10/05 10:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!