6

ウィキペディアによると、TripleDESは56、112、および168ビットのキー長をサポートしますが、System.Cryptography.TripleDESCryptoServiceProvider.LegalKeySizesは、128ビットと192ビットのキー長のみを受け入れると述べています。

私が開発しているシステムは相互運用可能である必要があり(私のコードで暗号化されたデータはPHP、Java、Objective-Cで復号化可能である必要があります)、この場合は誰が正しいのかわかりません。

だから私は誰を信じるべきですか?また、暗号化されたデータが移植可能であることをどのように確認できますか?

4

4 に答える 4

13

ウィキペディアは、TripleDESが56ビットキーをサポートするとは言っていません。「キーイングオプション」は「トリプルレングス」キーと「ダブルレングス」キーについて説明し、後者は「キーサイズを112ビットに縮小」します。元のDESの有効なキーサイズは56ビットです。ただし、このようなキーは64ビット入力で構成されており、8ビットは未使用のままです。したがって、「トリプルレングス」キーオプションは、64ビット(= 192ビット)の3倍から構成される56ビット(= 168)の3倍で機能し、「ダブルレングス」オプションは、56ビットキーの2倍(= 112)で機能します。 64ビット(= 128)の2倍から構成されます。

TripleDESCryptoServiceProviderは、最初に64ビットベースの入力から実際のキーを導出する必要があるため、入力として128ビット(倍長)または192ビット(三重長)のいずれかのみを取り、次に内部で168ビットまたは112ビットの実際を導出します。その入力からのキー。

これはTripleDESの標準的な手順であるため、プラットフォーム間の移植性に問題はありません。

于 2011-07-20T18:08:21.797 に答える
0

Triple DESは、128/192ビットキーの112/168ビットのみを使用します。.NETは、整列の目的でより多くのビットを要求します(各56ビットサブキーは64ビット境界で整列されます)。

56ビットDESは壊れており、使いにくくなっていると思います。

于 2011-07-20T18:07:38.363 に答える
0

DESのいくつかの(すべて?)実装は、キーの文字ごとに7ビットしか使用しないと思います(ASCIIエンコーディング)。DESの定義でキーに8ビット文字が許可されているのか、それとも実際に各バイトの上位ビットを無視しているのかはわかりません。後者だと思います。

ただし、.NETのキーサイズは、基になるアルゴリズムがその最上位ビットを無視する場合でも、バイト数に1バイトあたり8ビットを掛けたものに基づいています。それがおそらく主な不一致です。

TripleDESは、潜在的に3つの異なる56ビットDESキーを使用してDESを3回実行します。一部の実装では、中間実行が逆になり(encrypting-decrypting-encryptingまたは「EDE」)、3つすべてに同じ56ビットDESキーを使用すると、単純なDESの暗号化が複製されます。これは、両方がハードウェアベースの暗号化を使用している古いシステムとの互換性のために行われました。TripleDESCryptoServiceProviderがこの「EDE」アプローチを使用するのか「EEE」アプローチを使用するのか(または選択肢を提供するのか)はわかりません。さらに、同じ56ビットDESキーを1回目と3回目の実行に使用でき、168ビットキーの代わりに112ビットキーを使用することもできます。

認定されたTripleDESCryptoServiceProviderは、実際には3DESセキュリティではないため56ビット(64ビット)キーを受け入れません(代わりにDESCryptoServiceProviderを使用できますか?)。かつて、168ビットのEEE(またはEDE?)3DESは、112ビット(128ビット)のキーを使用するよりも優れたセキュリティを提供しないと判断されていました。ただし、短いキーが理論的に脆弱である極端な(通常は利用できない)攻撃が存在する可能性があります。これは、EDEとEEEの質問にも当てはまる可能性があります。

互換性と他の言語の質問については、.NETの* CryptoServiceProviderクラスは、基盤となるWindowsCRYPTOライブラリの単なるラッパーAPIです。他の言語もWindowsCRYPTOライブラリを使用している場合は、互換性があるはずです。それ以外の場合は、EDEとEEEのどちらを使用しているかを確認し、すべてが同じものを使用していることを確認し(柔軟性がある場合とない場合があります)、明らかに同じキー長を使用する必要があります。それらはすべて同じバイト順序を使用している可能性がありますが、それでも一致しないことがわかった場合は、別の方法で確認する必要があります。ほとんどの場合、WindowsではすべてCRYPTOを使用しており、すべてのオプションを同じ方法で設定できる限り、おそらく一致します。

于 2011-07-20T18:08:32.017 に答える
0

Desは64ビットキーの倍数を使用しますが、8ビットを破棄し、64ビットの有用なキー長を残します。
Triple desは、2倍または3倍のキー長を使用できます。
ただし、同じキーでdesを繰り返すと、desを実行しているメッセージが偶数回復号化されるため、キーがパターンを共有している場合は、部分的に復号化できます。

このため、desは常に奇数回実行されます。

これは、64ビット部分が繰り返されるキーを決して選択してはならない理由でもあります。

したがって、トリプルDES 192ビットを使用すると、有効なキーの長さは112ビットになります。

于 2011-07-20T18:35:57.213 に答える