この質問 のコメントマルチレイヤー暗号化の追加されたセキュリティについての議論。何らかの意見の相違があるようで、適切な質問が役立つと思いました。
したがって、いくつかの一般的な背景を提供するために、次の2つのシナリオを検討してください。
次のように、特定のファイルに対称暗号化を適用します。
gpg --symmetric --cipher-algo AES256 my_file.txt
「mydogisamazing」というパスワードを追加します
次のように、特定のファイルに4層の暗号化を適用します。
gpg --symmetric --cipher-algo AES256 my_file.txt
gpg --symmetric --cipher-algo AES256 my_file.txt.gpg
gpg --symmetric --cipher-algo AES256 my_file.txt.gpg.gpg
gpg --symmetric --cipher-algo AES256 my_file.txt.gpg.gpg.gpg
ここで、それぞれに提供されるパスワードは次のとおりです。
オプション2はオプション1より安全ですか?暗号化セキュリティについてほとんど何も知らないようですが、侵入したい人はパスワードアルゴリズムを4回実行する必要があるため、オプション1ではアルゴリズムを1回だけ実行する必要があるためです。異なる場合はchiper-algo
同じではなく使用されましたか?
全体として、答えがパスワードの性質に依存していることも私には明らかなようです。たとえば、15層の暗号化があり、各層のパスワードが1文字にすぎない場合、コードを解読するのは簡単です。
[〜#〜] update [〜#〜]:コメントへの応答として、上の例は明らかな「同等の"ケース、つまり"短いパスワード+より多くのレイヤー "対"より長いパスワード+より少ないレイヤー "。同一の複雑さの層を追加するだけで暗号化のセキュリティが強化されることだけが(多分間違っているかもしれませんが)明らかなようです(パスワードをハッキングするのに時間がかかるだけの意味で)。したがって、パスワードの長さの変化に対する私のストレス。
オプション1の方が安全です。オプション2では、各単語を個別に推測できます。 「すばらしい」と推測すると、このWordが正しいことが確認され、2番目のWordに進むことができます。オプション1では、4つの単語すべてを同時に推測する必要があります。
1つのGPGがある程度のセキュリティを提供し、4つのGPGがその4倍のセキュリティを提供すると考えるかもしれませんが、そのようには機能しません。 GPGはほぼ完全なセキュリティを提供し、それをより多く適用してもセキュリティは向上しません。
暗号化を複数回適用する用途があります。たとえば、署名と暗号化の両方を行う場合や、複数の当事者のために暗号化する場合などです。ただし、一般的に数回暗号化しても、数倍の安全性は得られません。
これはセキュリティを強化するものではありませんが、一度に1ワードずつパスフレーズを推測することを容易にします(N⁴
対N+N+N+N
、ここでNはWordリストのシンボル数です)。 PGPを使用して複数の受信者へのファイルまたはメッセージを暗号化する場合でも、ペイロードは対称暗号化を使用して1回だけ暗号化され、その後、そのためのキーが受信者ごとに個別に暗号化されます。このようにして、すべての受信者はメッセージサイズを増加させることなく、ペイロードに平等にアクセスできます。
階層化された暗号化を使用するという提案は、いくつかのシナリオでは役立つかもしれませんが、すべてのパスフレーズはそれ自体が強力でなければなりません。
対称暗号化を使用して誰かにファイルを送信する必要がありますが、信頼できる鍵交換のためのチャネルがありません。電子メールを使用して1つのレイヤーのパスフレーズを送信し、SMSを使用して2番目のレイヤーに、およびメールを使用して3番目のレイヤーにパスフレーズを送信できます。これらのいずれかが盗まれる可能性がありますが、すべてを盗むのははるかに困難です。
あなたは会えない人々のグループのための情報を持っていますが、誰も他の人の前にそれを知るべきではありません。情報を含むすべての暗号化ファイルを送信しますが、それぞれに異なるパスワードを送信します。今、彼らは一緒になって内容を明らかにする必要があります。これは継承をビットコインの財布として残すための公正な方法です!
オニオンルーティングつまり、Torネットワークでは、メッセージは暗号化の複数の層の内側にラップされます。すべての中間ルーターには、玉ねぎをむくように、1つのレイヤーを復号化するためのキーがあります。パケットをルーティングするノードは、以前に何層あったか、何層残っているかを知りません。独自のレイヤーを復号化する前に、それをどこに転送するかも知りません。 Torネットワークはパスワードの代わりに非対称キーを使用し、ディレクトリノードは公開キーインフラストラクチャを提供します。
ファンシーなUIにすべての回転する数字が表示されているパスワードまたはセキュリティコードを解読しているハリウッド映画を想像してください。彼らには、コードの1桁を一度に解読するエリートハッカーがいます。彼らが最後の数字を解読する前に、ハッカーのコンピュータまたは何かを爆破します。もちろん、実際にはそうではありません。かなり安全なシステムの場合、基本的には正しいパスワードを持っているか、正しいパスワードを持っているかを知っています—かどうかを確認する方法はありません。パスワードは何らかの方法で「近い」ものです。
あなたが提案したのは、セキュリティシステムをハリウッドのものと同じように機能させることです。攻撃者はあなたの暗号化に対してささいな辞書攻撃を実行することができて、彼らがすぐに最初の層を成功裏に解読したことを知ることができます。次に、これを4回繰り返すだけでファイルを回復できます。ちなみに、ささいな辞書攻撃を実行しても「mydogisamazing」のパスワードは見つかりません。また、単語「my」が攻撃に登場しても、これが最終的なパスワードに「近い」ことを示す兆候はまったくありません。
他の人が言ったことに対する別の見方(単一の単語を4回推測することは、4つの単語の組み合わせを一度に推測するよりもはるかに安価です):
暗号化には、完全にオープンなアルゴリズムと完全にクローズされた秘密を持つという概念があります。秘密が(sic!)秘密のままである限り、攻撃者がアルゴリズムについて何か知っているかどうかは問題ではありません。これは「あいまいさによるセキュリティ」の反対であり、それはまあまあです。つまり、何も妥協することなく、アルゴリズムを全世界の精査(文字通り、AESのような一般的なスキーム)に耐えることができます。
アルゴリズムは「ちょうど」解読不可能である必要があります。あなたはそれを解読するためのアルゴリズム的または総当たりの方法がないことを自分自身に納得させる必要があります。あなたがその結論にたどり着くことができるなら、あなたは終わりました、そしてあなたの秘密だけを気にする必要があります。あなたと私はおそらくこの範囲でAESを分析することはできませんが、おそらく「優れた」暗号解読者の多くに公開されているオープン/パブリックアルゴリズムを使用することで、十分に安全であると判断できます。
そう。そのようなアルゴリズムがあると仮定します。 定義により、安全なパスワードを取得すると、100%で完全に安全になります(誰かがアルゴリズムのクラックを発見するか、十分な速さでコンピューターを作成するまで、どちらももちろん定期的に行われます)。例:MD5)。
すべて後でアルゴリズムを使用する場合は必要ですvery暗号学者の大規模なコミュニティによる徹底的な検査。提案された「AES 4回リピート」アルゴリズムは、まったく新しいものです。 (ここで行ったように)コミュニティに投げると、人々はすぐに弱点を見つけます。そのため、(素人として、または一部の会社では孤独なプログラマーとして)アルゴリズムをいじったり、あいまいなセキュリティを気にしたりしません。
この特定のケースでは、AESを4回適用するとセキュリティが向上する場合、AES すでに実行しているはずですです。これはsuchであり、フィールドの複雑さに比べて些細な変化です。
他の回答に対するマイナーなカウンターポイント:より多くのレイヤーは技術的により少なくifおよびonly if個々のレイヤーは、少なくとも、個々のレイヤーに使用されているパスワードを組み合わせて作成したレイヤーと同じくらい安全です。この例では、AES256の暗号アルゴリズムを使用しました。基本的に、これはパスワードがどんなに複雑になっても、セキュリティは最大256ビットであることを意味します(256ビットのセキュリティは、AESに大きな障害がなければ実質的に破られないことに注意してください。
したがって、256を超えるパスワードエントロピービットは無駄になります。パスワードが複雑すぎる場合、AESキーを直接総当たりして、パスワードベースのキーの導出を完全にスキップできます。したがって、その層がもたらす最大のセキュリティに達した場合、理論的には、パスワードの残りの部分から別の層を作成することは、 "more安全な」。
実際のこの問題:
確かに、パスワード_Pi}t)HawiFo_%-p)R)dxbcpsUA;pyaCQXOXc7?o?
_で一度暗号化してから、パスワード_>YPou2Lg1B8be!g#Lgfor;G;H*$xzbX74fuw_yw3
_でもう一度暗号化すると、理論的にはより安全です。各パスワードは、256ビットのエントロピー(Python with base64.b85encode(os.urandom(256 // 8))
)512ビットのエントロピーを持つ結合パスワード_Pi}t)HawiFo_%-p)R)dxbcpsUA;pyaCQXOXc7?o?>YPou2Lg1B8be!g#Lgfor;G;H*$xzbX74fuw_yw3
_で一度暗号化するのではなく、256ビットの保護しか生成しません(AES256キーは直接攻撃可能なままであるため)。しかし、そうすることの正味の利点は付加的でしかないため、あなたがしていることは、1つのレイヤーの256ビットの作業から2つのレイヤーの257ビットの作業(または4つの場合は258ビット)に攻撃作業を増やすことだけです。あなたfeelより安全ですが、実際には、実際には保護されていない追加レイヤーのリソースを浪費しているだけです。
これを検討する唯一の理由は、AES256またはGPGだけを信頼しないほどセキュリティを意識している/偏執狂である場合です。その場合、might2つの巨大なパスワードを使用して2つのレイヤーを作成することを検討してください。一方はAES256を使用し、もう一方は他の暗号アルゴリズムを使用します。別の暗号化ソフトウェア。いずれかの層で使用されている暗号化スキームに大きな弱点があることが判明した場合、追加の層は意味があります。しかし、AES256が壊れている場合、おそらく人々が復号化するための興味深いことがもっとたくさんあるので、私はあまり心配しません。
TL; DR:より複雑なパスワードを使用する1つのレイヤーは、ほとんどの場合、それほど複雑ではないパスワードを使用する複数のレイヤーよりも優れています。まれな例外には、実際にはほとんど発生しない理論上の利点があるため、より複雑なパスワードを単層
侵入したい人は、パスワードアルゴリズムを4回実行する必要がありますが、オプション1では、アルゴリズムを1回だけ実行する必要があります。
そして、あなたは最初のオプションがもっと長くかかるだろうと思うようですよね?どれどれ。
mydogisamazing
の長さは14文字です。 14個の小文字の組み合わせの総数は、26 ^ 14 = 64,509,974,703,297,150,976の組み合わせです。したがって、64,509,974,703,297,150,976 msですべてをテストします。my
、dog
、is
、amazing
の長さは、それぞれ2、3、2、7文字です。 2、3、および7つの小文字の組み合わせの総数は、26 ^ 2(676)、26 ^ 3(17,576)、および26 ^ 7(8,031,810,176)です。これらすべてを試すには、8,031,829,104 msです。したがって、すべての4つの短いパスワードをクラックすると、約93日間かかりますが、長いパスワードだけをクラックすると、20億年以上かかります。
私はそれをシンプルに保つことを試みました。小文字のみを使用しています。パスワードがzzzzzzzzzzzzzz
であるかのように最悪の場合を想定。辞書ベースおよびルールベースの攻撃、並列およびGPUベースの処理、分散ツールを無視します。短い組み合わせをテストしてから長い組み合わせをテストするまでにかかる時間を破棄します。RealLife™では、一般的な単語を使用しているため、1ワードのパスワードはほぼ瞬時に解読されます。
この方法がどのように失敗したかは、少なくとも2つの歴史的な例があります。第二次世界大戦では、ドイツ人は3輪ではなく4輪のエニグママシンのより安全なバージョンを開発しました。クラッキングの時間を1日(悪い)から約1か月(役に立たない)に変更するべきでした。
残念ながら、彼らは四輪機械の最初の三輪に通常の三輪機械と同じ設定を使用しました。そのため、3輪マシンがクラックされたとき、クラッカーは4輪目の26の可能な設定をチェックするだけで済みました。セキュリティに意味のある増加はありません。
そして、40ビットDVD暗号化スキームは、1つの25ビットキーと16ビットキーで構成されることが判明しました。当時、40ビットのキーは解読するのがほぼ不可能でしたが、25ビットと16ビットのキーはそれぞれ非常に妥当な時間で解読できました。