NBDに認証(案)

サーバーを認証

クライアントは信用できるCAにネットワークで接続できないところがポイント。ネットワークの起動をサーバーに依存しているため。

  • サーバーは、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認証で双方向に認証しあっても一緒では?