ONC+ 開発ガイド

AUTH_DES 認証のベリファイア

AUTH_SYS 認証とは違って、AUTH_DES 認証にはベリファイアがあり、サーバはクライアントの認証証明が正しいかどうかを確認できます(また、その反対方向の認証確認もできます)。ベリファイアの主な内容は暗号化されたタイムスタンプです。サーバは暗号化されたタイムスタンプを解読し、もしそれが実際の時刻に近ければ、クライアントが正しく暗号化したものと考えられます。クライアントが正しくタイムスタンプを暗号化するには、RPC セッションの会話キーを知っていなければなりません。会話キーを知っているクライアントならば、本当のクライアントのはずです。

会話キーは、クライアントが生成して最初の RPC 呼び出しでサーバに通知する DES [5] キーです。会話キーは、最初のトランザクションで公開キー方式で暗号化されます。AUTH_DES 認証で使用する公開キー方式は、192 ビットキーを使用する Diffie-Hellman [3] 暗号化手法です。この暗号化方式については後に詳しく説明します。

この認証方法が正しく機能するためには、クライアントとサーバで時刻が一致していなければなりません。ネットワークの時刻同期が保証できないときは、会話を始める前にクライアントの方でサーバと時刻を合わせることができます。rpcbind の提供する手続き RPCBPROC_GETTIME を使用すれば、現在時刻を取り出すことができます。

サーバはクライアントのタイムスタンプが正当なものかどうか判定します。2 番目以降のすべてのトランザクションに対して、サーバは次の 2 つの項目をチェックします。

最初のトランザクションでは、サーバはタイムスタンプが失効していないことを確認します。さらに、クライアントは最初のトランザクションで、ウィンドウベリファイアと呼ばれるウィンドウの値より 1 少ない値を暗号化して送信します。そうしないと、認証証明がサーバに棄却されてしまいます。

クライアントはサーバから返されたベリファイアが正当なものかどうか調べなければなりません。サーバは、クライアントから受信したタイムスタンプから 1 秒少ない値を暗号化してクライアントに送り返します。クライアントはそれ以外の値を受け取った場合は、それを拒絶します。