2006 年 12 月 24 日 21 時 56 分

セキュリティ処理


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


プロトコルバージョンの確定、
セキュリティの種類の確定と進んだ後は、
その種類に応じた処理を行うことになる。

セキュリティの種類はいくつもあるが、
RFB 仕様書で定義しているセキュリティ処理は、
None (1) と、VNC Authentication (2) の 2 つである。

None は、認証が必要ない事を示すため、
セキュリティ処理はかなりシンプルである。

RFB 3.3 や 3.7 では、メッセージの交換すら行われない。
3.8 では、サーバが SecurityResult メッセージを返却する。

    U8 result; // セキュリティ処理の成否
    // (以下、RFB 3.8 でかつ result = 1 の場合のみ)
    String reason; // エラーの原因を表す文字列

result は OK (0) が 成功、failed (1) が 失敗を表す。
もし result が 1 の場合は、
さらにエラーの原因を表す文字列が続き、サーバは切断する。

RFB 3.8 では、3.7 以前の場合と違い、
サーバがエラーを返すことが可能である。
といっても、セキュリティの種類が None の場合は
失敗することがないので恐らく使う必要はない。

次に、VNC Authentication だが、
これは、DES 暗号化をベースにしたパスワード認証である。

まず、サーバは 16 バイトのランダムな値を送信する。

    U8 challenge[16]; // ランダムな 16 バイト値

challenge を受取ったクライアントは、
パスワードをキーとして DES で暗号化し、
その結果をサーバに送り返す。

    U8 response[16]; // challenge を DES 暗号化した値

サーバはこの値を検証し、認証の成否を、
SecurityResult メッセージとして送り返す。

RFB 3.8 での SecurityResult の定義は前述の通りである。
なお、RFB 3.3 や 3.7 では、エラーの説明はなく、
認証に失敗した場合 failed (1) を送るとすぐに切断する。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.