このアーカイブは同期化されません。 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) を送るとすぐに切断する。