1

Java Cryptography APIとAESを使用して、ユーザー識別Cookieで使用する短いテキスト文字列を暗号化しています。

キーのサイズと比較した場合、少量のテキストで使用すると、一部の暗号化アルゴリズムは安全ではないことを理解しています。データを安全でないままにしないようにするために、何を知っておく必要がありますか?暗号化する文字列がキーよりも長いことを確認する必要がありますか?他に地雷はありますか?

キーを生成するために、私はとで次のことを行っていencryptionType = "AES"ますkeySize = 128

public SecretKey createKey() throws NoSuchAlgorithmException {
    KeyGenerator keyGen = KeyGenerator.getInstance(encryptionType);
    keyGen.init(keySize); // 192 and 256 bits may not be available
    return keyGen.generateKey();
}

public String encrypt(Key key, String str) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException {
    Cipher ecipher = Cipher.getInstance(encryptionType);
    ecipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] utf8 = str.getBytes("UTF8");
    byte[] enc = ecipher.doFinal(utf8);
    return new BASE64Encoder().encode(enc);
}

public String decrypt(Key key, String str) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException, IllegalBlockSizeException, BadPaddingException {
    Cipher dcipher = Cipher.getInstance(encryptionType);
    dcipher.init(Cipher.DECRYPT_MODE, key);
    byte[] dec = new BASE64Decoder().decodeBuffer(str);
    byte[] utf8 = dcipher.doFinal(dec);
    return new String(utf8, "UTF8");
}
4

3 に答える 3

0

特定の暗号化アルゴリズムを選択するだけでなく、安全なシステムを設計するための原則をよく理解する必要があります。

原則として、AES はパケットを最小サイズ (16 バイト) で安全に暗号化するように設計されています。ただし、全体的なセキュリティ スキームでの使用法に注意を払う必要があります。全体的なプロトコル設計に注意してください。

たとえば、すべてのデータを暗号化するオンライン ゲームについて聞いたことがあります (参考文献が見つかりません)。問題は、「シード」が含まれていなかったことです。したがって、プレイヤーに追加のライフを与えるなど、特定のことを行うコマンドは、毎回同じ (暗号化された) バイトのシーケンスでした。そのため、プレーヤーはそのパケットを複製し、サーバーに何度も再送信することができ、パケットに含まれる暗号化されていないデータを知る必要はありません。

于 2009-06-17T22:22:16.353 に答える
0

短いメッセージにはパディングが必要ですが、使用するパディングについて質問は何も述べていません。パディングの選択は、一部の暗号のセキュリティに影響を与える可能性があります。

また、質問では暗号モードが指定されていません。要するに、ランダムに選択されたユーザー識別子などのランダムな「メッセージ」の場合、ECB モードは安全であり、暗号化に初期化ベクトルが必要ないという利点があります。ただし、16 バイトを超えるメッセージの場合、ECB モードを使用すると、平文のパターンが明らかになり、リプレイ攻撃に対して脆弱になります。

他のモード (CBC が一般的) を使用すると、メッセージごとに異なる初期化ベクトルが必要になります。明らかに、復号化には IV が必要であり、通常は IV が暗号文とともに渡されます。

于 2009-06-17T22:33:24.443 に答える
-1

このトップ 25 の最も危険なソフトウェア エラーのリストから始めることができます。これは特にセキュリティ エラーに言及しています。

于 2009-06-17T22:24:46.690 に答える