![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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では強制切断するというのが答えのように見えます。
#読みにくいインデントの仕方のコードですね、、、
ありがとうございます。
私のほうでも読んでみました。
シャットダウンしてますね。
通常のパケットエラーであれば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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 恒久的リダイレクトについて 2 2023/07/13 15:58
- PostgreSQL PostgreSQL14.6のSSL対応について 1 2023/01/05 15:42
- その他(車) 夜中に車が振動を検知した場合に警戒するべきことは何かあるでしょうか? 夜中に車の振動検知アラームが作 2 2023/06/15 18:04
- WordPress(ワードプレス) ワードプレスにて初期ドメインから新しいドメインに変更する際、SSL証明書の発行は必要でしょうか? 旧 1 2022/06/07 22:07
- 事件・事故 国交省の検査機構をなぜ家宅捜査しないのでしょうか? 3 2022/05/04 19:53
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- 統計学 【統計】効果検証としてのT検定・F検定 5 2022/10/21 11:08
- 新幹線 新大阪駅新幹線改札口前につきまして 3 2022/12/09 11:52
- ビジネスマナー・ビジネス文書 企業からのよろしくお願いしますといったメールにありがとうございますと間違えて送ってしまった場合改めて 4 2022/11/14 11:50
- プロバイダー・ISP hpb22の接続方法の変更 1 2023/08/06 18:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelでVBAを使用した際に、『...
-
Excelでエラー(#N/Aなど)値を...
-
Chatgptから送られてきたリンク...
-
もしセルが"#N/A"なら~をする...
-
VLOOKUP関数についての質問です...
-
SUM関数の範囲に#N/Aが...
-
自動改札のエラーって…
-
Eエクセルの計算方法で空欄を0...
-
送信エラー時、レポートメール...
-
VLOOKUPで求めた数値をさらにVL...
-
システムエラーです:&H80004005...
-
EXCELマクロで☓400とでます
-
エクセルのエラー文について
-
VBAで「致命的なエラー」が出ま...
-
■□■読み方■□■ #N/A, #VALUE!, ...
-
ACCESS VBA でのエラー解決の根...
-
APEXをやっていたらこんなエラ...
-
システムコールに失敗しました
-
ナショナル 炊飯器 エラーH02
-
チケット何回もエラーは高額請求?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでエラー(#N/Aなど)値を...
-
SUM関数の範囲に#N/Aが...
-
ExcelでVBAを使用した際に、『...
-
チケット何回もエラーは高額請求?
-
もしセルが"#N/A"なら~をする...
-
Chatgptから送られてきたリンク...
-
自動改札のエラーって…
-
Eエクセルの計算方法で空欄を0...
-
VBAで「致命的なエラー」が出ま...
-
APEXをやっていたらこんなエラ...
-
送信エラー時、レポートメール...
-
VLOOKUPで求めた数値をさらにVL...
-
EXCELマクロで☓400とでます
-
ACCESS VBA でのエラー解決の根...
-
VLOOKUP関数についての質問です...
-
改札エラーについて
-
エクセルのエラー文について
-
システムエラーです:&H80004005...
-
新生活を始めるために電化製品...
-
■□■読み方■□■ #N/A, #VALUE!, ...
おすすめ情報