0

1024 文字の文字列と単純な xor アルゴリズムがある場合でも、簡単にクラックできますか?

const unsigned char Key[1024] = {0x.........};

void EncodeBuffer(unsigned char Buffer[],unsigned int Size) {
    unsigned int i = 0,c = 0;
    while (i < Size) {
         while(c < 1024)
              Buffer[i] ^= Key[c++];
         i++;
         c = 0;
    }
}
4

1 に答える 1

4

まず第一に、あなたのアルゴリズムはおそらくあなたが思っているようなことをしません。のすべてのバイトを のBufferすべてのバイトでxor することになります。これは、 のすべてのバイトを同じバイトKeyで xor することを意味します。Bufferあなたがおそらく意味していたのは、次のようなものでした:

const unsigned char Key[1024] = {0x.........};

void EncodeBuffer(unsigned char Buffer[],unsigned int Size) {
    unsigned int i = 0;
    while (i < Size) {
        //Each byte of the buffer is xor'd with a byte of the key
        //Each byte of the key may be used for more than one byte in the buffer (insecure)
        Buffer[i] ^= Key[i % 1024];
        i++;
    }
}

現在、これはもう少し安全ですが、現実の世界では十分に安全ではありません. これで暗号化すればするほど、攻撃者はキーを推測しやすくなります。さらに、攻撃者がソース コード (またはコンパイルされたバイナリ) を見ることができれば、キーを取得できます。

おそらく探しているのは、少なくとも入力の長さのキーを必要とするワンタイムパッドです。

ところで、これを実際の状況で使用するために作成しようとしている場合は、既存の暗号化ライブラリを使用せずにそのまま使用することをお勧めします。これを正しく行うのは難しく、これに取り組んでいる人が十分にいるため、バグのある暗号化に対処するという頭痛の種を自分自身 (顧客は言うまでもありません) から救う方がよいでしょう。

于 2013-09-11T11:50:43.097 に答える