2

RMI を使用して暗号化システムのプロトタイプを作成しています。

問題があります。2 つのクライアントを起動すると、OneTimePad クラスのサーバー内の 1 つのオブジェクトから応答が返ってきたからです。

したがって、クライアント A は、クライアント b 用に予約されたキーを受け取りますが、特定のアルゴリズムにより、この状況は発生しませんでした。

サーバーはクライアントに E および N 変数 (RSA のように) のみを送信するため、OneTimePad オブジェクトをシリアル化してネットワーク経由で送信することはできません (すべてのキーが含まれるため)。

クライアントごとにOneTimePadクラスのオブジェクトを1つ作成するにはどうすればよいですか?

4

1 に答える 1

3

2001 年の著書では、これをリモート セッション パターンと呼んでいました。login()レジストリ内のリモート オブジェクトは、メソッドのみをエクスポートする一種のログイン サーバーです。このlogin()メソッドが成功すると、呼び出しごとに新しいリモート オブジェクトが返されます。これは、基本的にクライアントごとのリモート セッション オブジェクトです。このセッション オブジェクトは、それ自体をアンエクスポートするメソッドをエクスポートできます。また、メソッド自体もアンエクスポートするようにlogout()実装することもできます (または、とにかく同じことを行う DGC に依存することもできます。使用するとログに記録する機会が得られます)。このリモート セッション オブジェクトは、ログインしているクライアントがアクセスできるすべてのリモート メソッドをエクスポートします。これはクライアントごとであるため、クライアントの状態を保持できるため、セッションです。Unreferenced,unreferenced()Unreferenced

public interface RemoteLogin extends Remote
{
    RemoteSession login() throws RemoteException;
}

public interface RemoteSession extends Remote
{
    void logout() throws RemoteException;
    void myMethod(...) throws RemoteException; // whatever you need
}

public class RemoteLoginImpl extends UnicastRemoteObject implements RemoteLogin
{
  // ...
  public RemoteSession login()
  {
    // ...
    return new RemoteSessionImpl(); // whatever arguments you need
  }
}

public class RemoteSessionImpl extends UnicastRemoteObject implements RemoteSession, Unreferenced
{
  // ...
}
于 2013-04-09T21:55:23.710 に答える