2011-02-11 15 views
0

私たちはすべて、固定長の128ビットまたは192ビットまたは256ビットであることに同意します。コンテキストが50文字(バイト)%16 = 2バイトの場合したがって、コンテキストを3回暗号化しますが、残りの2バイトはStateブロックにどのように格納されますか。私はそれらを埋めるべきです、標準はそのような条件を処理する方法を指定していません。AESの制限とMixColumn

MixColumnsステージはAESで最も複雑な側面ですが、私は数学的表現を理解できませんでした。私は行列の乗算について理解していますが、私は数学的な結果に驚いています。値を2倍し、リトルエンディアン1の位置に左シフトし、ビッグエンディアンにシフトします。最上位ビットが1(0x80)に設定されていた場合は、シフトした結果を0x1BとXORする必要があります。私は3を乗算することによって価値2の位置をシフトさせることを意味すると考えました。

私はC実装を提供するチュートリアルでさえ、Wikipediaのさまざまなソースをチェックしました。しかし私は自分の実装を完了することにもっと興味があります!入力をありがとうございます。あなたの質問に応えて

+0

2ビットシフトするには、4で乗算または除算する必要があります。 –

+2

AESはブロック暗号だけです。実際のデータを暗号化する場合は、CBC(暗号ブロック連鎖)やCTR(カウンタモード)のような適切な_mode_を選択する必要があります。 CBCはブロックモードなので、適切なパディング方法を考え出す必要があります(それはあなた次第です)。 CTRはストリームモードなので、任意のバイト数を暗号化できます。 –

答えて

1

ミックスカラムステージでは、指数が乗算されています。

take this example 
AA*3 
10101010*00000011 
is 
x^7+x^5+x^3+x^1*x^1+x^0 
x^1+x^0 is 3 represented in polynomial form 
x^7+x^5+x^3+x^1 is AA represented in polynomial form 
first take x^1 and dot multiply it by the polynomial for AA. 
that results in... 
x^8+x^6+x^4+x^2 ... adding one to each exponent 
then reduce this to 8 bits by XoRing by 11B 
11B is x^8+x^4+x^3+x^1+x^0 in polynomial form. 
so... 
x^8+x6+x^4+ x^2 
x^8+ x^4+x^3+ x^1+x^0 
leaves 
x^6+x^3+x^2+x^1+x^0 which is AA*2 
now take AA and dot multiply by x^0 (basically AA*1) 
that gives you 
x^7+x^5+x^3+x^1 ... a duplicate of the original value. 
then exclusive or AA*2 with AA*1 
x^7+ x^5+x^3+ x^1 
    x^6+ x^3+x^2+x^1+x^0 
which leaves 
x^7+x^6+x^5+x^2+x^0 or 11100101 or E5 
I hope that helps. 
here also is a document detailing the specifics of how mix columns works. 

mix_columns.pdf

EDIT:通常の行列の乗算は、通常の行列を忘れる..soこれには適用されません。

+0

ありがとう、2週間以上問題を解決しました。私自身の多項式乗数(関数)を作成しました – Nocturnal

1

  1. あなたはAESを使用してバイトのストリームを暗号化する場合は、はないだけで、個々のブロックにそれを破ると、それらを個別に暗号化します。これは暗号的に安全ではなく、巧妙な攻撃者はオリジナルの平文から多くの情報を回復することができます。これはelectronic code bookと呼ばれ、リンクをたどり、Tux Linux Penguinを暗号化する際に何が起こったのかを見ると、あなたはその不安を視覚的に見ることができます。代わりに、cipher-block chaining (CBC)またはcounter mode (CTR)のような既知の安全な技術を使用することを検討してください。これらは実装するにはもう少し複雑ですが、賢明な攻撃者が間接的に暗号化を破ることができないように努力する価値があります。

  2. MixColumnsステージがどのように機能するかについては、実際に多くの操作を理解していません。これは、多項式のフィールドを含む構造に基づいています。それがどのように機能するかについての良い説明を見つけることができれば、私はあなたに知らせるでしょう。

  3. あなたの理解を深めるためにAESを実装したいのであれば、それは完全にうまくいきます。しかし、そうすることをお勧めします。(アルゴリズムがどこから来ているかについての数学的直感を読む方が良いでしょう。しかし、ではなく、は実際の暗号化の目的で独自の実装を使用してください。細心の注意を払わなければ、セキュリティを脅かす可能性のあるside-channel attackに実装が脆弱になります。これの最も有名な例はRSA暗号化です。鍵のビットを回復するために暗号化を実行するので、注意深く計画しなくても実際にコンピュータの電源を見ることができます。暗号化にAESを使用する場合は、既知の、テスト済みのオープンソースのアルゴリズム実装を使用することを検討してください。

希望します。

+0

調査した情報の入力を高く評価しましたが(頭のおかげでありがとう)、既に成熟している他のライブラリのために私自身の実装が失敗するケースがありました。私の焦点は、他の既存のコードと機能(使いやすさ)との実装の程度に完全に依存しています。私はSSLライブラリをプログラミングしており、SSLの一部にはAESを実装するために必要なブロックとストリームの暗号が必要です。私はCSの卒業生ですが、英語は私の最初の言語ではないので、トピックがほとんど覆われていないと、数学的な表記を理解することが難しいことがあります。 (すべてではありません) – Nocturnal

+0

私にはセキュリティ専門家がいて、私のライブラリを悩ましている可能性のある脆弱性をテストするのにも役立ちます。 – Nocturnal

0

独自の実装(計算中の任意の内部状態)の結果をテストしたい場合は、このページをチェックすることができます。

http://www.keymolen.com/aes.jsp

それは、任意の平文、キーとIVのためのすべての内部状態を表示しますまた、mixcolumnsステージのために。

+0

Brunoありがとうございますが、私は既にAESを実装しています。私自身もDESの独自のバージョンを実装しました。私は現在、異常のためにデバッグしています。 – Nocturnal