3

コンテキスト:マルチテナント アプリケーション

機能:機密データの暗号化

ストーリー: テナントの管理者として、自分のパスワードまたはパス フレーズを使用して機密データを暗号化し、自分だけが使用されるキーを完全に制御できるようにしたいと考えています。

合否基準:

  1. 各テナントの管理者は、暗号化に使用するパスワードまたはパス フレーズを定義できる必要があります。
  2. 元のパスワードまたはパス フレーズを提供したテナント管理者のみがキーを知っている必要があります。
  3. テナント管理者からパスワードまたはパス フレーズが提供されたら、安全に保管する必要があります。

私の質問

  1. これまで、アプリケーションにハードコーディングされたアプリケーション全体のキーを使用した対称キー暗号化を使用してきました。各テナントが独自のキーを使用したい場合、これは機能しなくなります。各ユーザーに独自のキーを定義させるにはどうすればよいでしょうか?
  2. 鍵の保管方法と保管場所
  3. パスワード/パスフレーズを証明書に保存することは有効なオプションですか? もしそうなら、キーストアを保護する方法は?
4

2 に答える 2

3

キーを知らずに暗号化/復号化することはできません。それ以外の場合は、キー導出関数 (PBKDF2) を使用する PBE の明確なケースのようです。非対称暗号化を使用することもできますが、ユース ケースでの暗号化中に秘密キーのみを保護します。

于 2012-05-01T09:16:39.083 に答える
2

アプリケーションでパスワードベースの暗号化 (PBE) を使用する方法を示すコードのスニペットを次に示します。これはチュートリアルから取得したものです。

PBEKeySpec pbeKeySpec;
PBEParameterSpec pbeParamSpec;
SecretKeyFactory keyFac;

// Salt
byte[] salt = {
    (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
    (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
};

// Iteration count
int count = 20;

// Create PBE parameter set
pbeParamSpec = new PBEParameterSpec(salt, count);

// Prompt user for encryption password.
// Collect user password as char array (using the
// "readPasswd" method from above), and convert
// it into a SecretKey object, using a PBE key
// factory.
System.out.print("Enter encryption password:  ");
System.out.flush();
pbeKeySpec = new PBEKeySpec(readPasswd(System.in));
keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);

// Create PBE Cipher
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");

// Initialize PBE Cipher with key and parameters
pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);

// Our cleartext
byte[] cleartext = "This is another example".getBytes();

// Encrypt the cleartext
byte[] ciphertext = pbeCipher.doFinal(cleartext);
于 2012-05-01T13:06:25.487 に答える