1

データベースに long があります。暗号化するのが好きです。xor を使用できますが、パターンが表示され、xor 値が明らかになる可能性があるため、これはあまり安全ではありません。IIRC AES には、シードと見なすことができるキーと初期化ベクトル (IV) があります (乱数について話す場合)。IVはランダムに作るべきだと思います。これは、同じデータをキーで暗号化すると、異なるパターンが発生するためです。

64ビットを安全に暗号化するにはどうすればよいですか? ランダムなIV /シードを使用すると、本当に安全ではない可能性があると思います。でも預けたくない。現時点で私が考えることができる他のオプションは、暗号化された RNG を使用して、値が 10000 番目のインデックスである場合は 10000 回実行し、次に値を xor することです。しかし、パフォーマンスに関してはスケーリングしません。

64ビットごとに余分なビットを保存せずに、64ビットを適切かつ安全に暗号化するにはどうすればよいですか? おそらく暗号RNGに(シードxorインデックス)をフィードしてX回実行し、それを値でxorすることを考えています。しかし、誰かがより良いアイデアを持っていると感じていますか?

4

2 に答える 2

2

AESブロックサイズは128ビットであるため、これを使用すると、意味のあるデータと同じ量のパディングを暗号化することになります。

ブロックサイズが64ビットであるため、DES(またはできれば3DES )を使用できます。

初期化ベクトルは攻撃者が予測するのは難しいはずですが、キーのように実際には秘密ではないため、アルゴリズムで選択できます。たとえば、ディスク暗号化用のセクターごとのIVを生成するために使用されるESSIVアルゴリズムを参照してください。同じスキームを使用できます—「セクター番号」をレコードの一意のID番号のような類似のものに置き換えるだけです—実際にIVを保存する必要はなく、復号化時にアルゴリズムを使用して再生成するだけです。(ただし、レコードの一意のIDを変更した場合は、必ず新しいIVで復号化して再暗号化してください!)

ECBモードを使用して暗号化する場合は、IVの使用を完全に回避できますが、それは実際には良い考えではありません。特定のキーについて、同じプレーンテキストは常にECBモードで同じ暗号文に暗号化されるため、攻撃者は、実際の値を特定できない場合でも、2つのレコードであなたの秘密番号が同じであることがわかります。レコードごとに異なるキーを使用していないと仮定すると、レコードごとに異なるIVを使用する必要があります。

于 2012-07-13T03:31:56.167 に答える
1

何らかのインデックスがある場合は、インデックスを NONCE として CTR モード暗号化を使用できます。その場合、安全に AES を使用できます。重要な警告があることに注意してください。同じ NONCE を 2 回目に使用すると、プレーン テキストが漏洩します (キー ストリームを取得できるため)。攻撃者がシステムを時間内に見ることができる場合、これはデータベースへの新しい値の暗号化にも適用される可能性があります。

于 2012-07-15T01:03:25.873 に答える