
No.3ベストアンサー
- 回答日時:
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では強制切断するというのが答えのように見えます。
この回答へのお礼
お礼日時:2013/10/05 10:37
#読みにくいインデントの仕方のコードですね、、、
ありがとうございます。
私のほうでも読んでみました。
シャットダウンしてますね。
通常のパケットエラーであればTCPレベルで復帰させますし、
SSLの段階でエラーが見つかるってことは
よほどのこと、つまり重大な改ざんと考えての実装なんですかねー
No.4
- 回答日時:
> 通常のパケットエラーであれば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.
この回答への補足
>改竄は誰かが故意に中身を書き換えたわけですから、その時にエラー訂正符号も正しいとして認識されるように変更しますよね。
これは実態はそうでも改ざんの定義ではないのではありませんか?
No.2
- 回答日時:
「改竄」じゃなく、単に「エラー検知」するだけの話だと思いますが・・・
エラーをアプリケーションに渡したら、その後どうするかはアプリケーション
で再送要求するか、エラーのまま処理するか・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでエラー(#N/Aなど)値を...
-
SUM関数の範囲に#N/Aが...
-
送信エラー時、レポートメール...
-
ExcelでVBAを使用した際に、『...
-
VLOOKUPで求めた数値をさらにVL...
-
エラーが表示される
-
ACCESS VBA でのエラー解決の根...
-
もしセルが"#N/A"なら~をする...
-
トークンが不正です。というエ...
-
DoEvents
-
「-2147012889」というエラーで...
-
エクセルの出塁率計算式入力
-
【Excel2003】全く同じ関数なの...
-
VBAで「致命的なエラー」が出ま...
-
エクセル 「#DIV/0!」で困って...
-
gimailってgmailと関係があるの...
-
システムコールに失敗しました
-
システムエラーです:&H80004005...
-
Eエクセルの計算方法で空欄を0...
-
ナショナル 炊飯器 エラーH02
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUM関数の範囲に#N/Aが...
-
Excelでエラー(#N/Aなど)値を...
-
エラーが表示される
-
ExcelでVBAを使用した際に、『...
-
送信エラー時、レポートメール...
-
ACCESS VBA でのエラー解決の根...
-
VLOOKUPで求めた数値をさらにVL...
-
VLOOKUP関数についての質問です...
-
もしセルが"#N/A"なら~をする...
-
VBAで「致命的なエラー」が出ま...
-
Eエクセルの計算方法で空欄を0...
-
エクセルのエラー文について
-
駅の改札でエラーとなって立ち...
-
MDプレーヤーで"UTOC ERROR"...
-
「-2147012889」というエラーで...
-
エラーコードがわかりません
-
ヤフー知恵袋についてです。自...
-
教えてgoo、dポイントとアカウ...
-
システムエラーです:&H80004005...
-
自動改札のエラーって…
おすすめ情報