NBDに認証(案)
サーバーを認証
クライアントは信用できるCAにネットワークで接続できないところがポイント。ネットワークの起動をサーバーに依存しているため。
- NBDサーバーは、ディストリビューションスペースにOpenSSLを要求することにする
- rootserver.pac(NBDサーバーを起動)は、RSA暗号ペアを生成
- サーバーは、rootserver.pac(NBDサーバーを起動)の適用時にRSA暗号鍵ペアを生成(乱数は/dev/randomでいいかな)
- クライアントは、FDやUSBメモリなどから正当なサーバーの公開鍵を入手する
- クライアントは、適当なデータ(/dev/randomから引っ張ってくる、で良い?)を手に入れた公開鍵で暗号化し、サーバーに送出する
- サーバーは、送られてきた暗号文を自分の持っている秘密鍵で復号化し、クライアントに送り返す
- クライアントは、暗号化前のデータと、送り返されてきたデータを照合し、一致すれば、認証完了
・・・これは違う。
複数のNBDサーバーに接続する可能性があるので、FDやUSBメモリには公開鍵ではなく、CAが入っているべき。・・・また今度にしょう。
クライアントを認証
Digest認証する。
- NBDサーバーにMD5でダイジェストされた認証パスワードを設定しておく
- クライアントは、ユーザーにパスワードを入力させてそれをMD5ダイジェストするか、既にMD5ダイジェストされたパスワードが記述されたファイルを入手する
- クライアントは、サーバーに適当な文字列を要求する
- サーバーは、適当な文字列(/dev/randomあたり?)を生成、記録しておき(HTTPではこれはクライアントから送り返されるらしいけど、記録しておく。これで良いのかどうかは不明)、クライアントに送出する
- クライアントは、パスワードのMD5ダイジェストとサーバーから受け取った適当な文字列を結合し、それ全体のMD5ダイジェストを生成する
- クライアントは、生成したMD5ダイジェストをサーバーに送出する
- サーバーは、設定されていたMD5ダイジェストのパスワードと、クライアントに送出した適当な文字列を結合し、MD5ダイジェストを生成する
- サーバーは、自分で生成したMD5ダイジェストと、クライアントから受け取ったMD5ダイジェストを照合し、一致すれば認証完了
サーバーの認証とクライアントに認証を一度に済ませられないか。
サーバーを認証したら、その公開鍵と秘密鍵でパスワード(共有鍵)を暗号化して送ったらダメなのかな?
公開鍵に使う暗号化ライブラリは重量級な予感がする。Digest認証で双方向に認証しあっても一緒では?