web-dev-qa-db-ja.com

どのPHP mcrypt暗号が最も安全ですか?

皆さん、利用できる暗号はたくさんありますが、最近使用するのに最も安全な暗号はどれですか?

リスト: http://www.php.net/manual/en/mcrypt.ciphers.php

27
Industrial

不明な場合は、128ビットキーでAES(「Rijndael」とも呼ばれます)を使用してください。キーのサイズについて何らかのフェチを開発した場合は、より大きなキーを選択することで、不合理な問題を解決できます。 192または256ビット。追加コストは高くありません(AES-128と比較してAES-256のワークロードは+ 40%であり、実際にその違いを観察するには非常に非常に高速なネットワークが必要です)。

選択したキーサイズに関係なく、AESの正しいmcrypt暗号は常にMCRYPT_RIJNDAEL_128であることに注意してください。これは、AES標準が128ビットのブロックサイズのRijndael暗号のフレーバーを参照しているためです。 AES-256が必要な場合は、MCRYPT_RIJNDAEL_128ではなく、256ビット(32バイト)のキーでMCRYPT_RIJNDAEL_256を使用する必要があります。

AESは1998年に発行され、2001年に連邦基準として米国政府によって採用されましたが、現在は弱さの兆候は見られません。いくつかの数学的特性は後で発見されましたが、実際のセキュリティには影響しません。ほとんどの場合、AESが安全である理由について比較的正確な知識があることを強調しています。 AESほど(何千人もの才能のある暗号学者によって)注目されている対称暗号化アルゴリズムは他にありません。

ほとんどのセキュリティ問題は、アルゴリズム自体ではなく、暗号化アルゴリズムの使用方法に起因します。適切なチェーンモードを使用し、MACを追加し、パディングを管理し、そして何よりもkeysを安全に処理します。このすべてを正しく理解した場合(これは見た目よりもはるかに難しい)、Rijndael、Twofishな​​どを選択することを心配する時期になります。

46
Thomas Pornin

Thomas Porninのすばらしい答えに加えて、「セキュリティ」(機密性/整合性/信頼性/可用性)の観点から達成しようとしていることも考慮する必要があります。

いずれの場合も、次のようないくつかの質問に対処する必要があります...これは誰に適用されますか?どこで、なぜ使用されているのですか(何を保護していますか)?それはどのくらい続くことを意味しますか?等.

たとえば、データが実際には20〜30分間しか持続しないことを意図している場合、256ビット操作の本格的な連続でセッションデータを実際に暗号化しても意味がない可能性があります。安全な128ビットアルゴリズムは、2倍近く高速であるか、少なくともクロックサイクルの少ない負荷を使用し、(それ以上ではないにしても)同じくらい安全です。

また、長持ちすることを意図したもの(機密文書やファイル、秘密鍵など)を、弱くて短い鍵方式で暗号化しても意味がありません。ある種の認証とパディングの適切な使用を備えた複数のアルゴリズムが必要になる場合があります。複数のアルゴリズム(主にtwofish、AES、RSA)を使用するクライアントの要求に応じて、コンテンツを定期的に暗号化して署名しました。

また、(Thomasが指摘したように)どちらかを忘れないでください。安全なメソッド(または複数のメソッド)を安全でない方法で実装できます。各式などのバリエーションが膨大なため、「安全」なものを実際に実装するのは難しい場合があります。

一般的に、鍵はロックを解除することと同じくらい安全です。車のロックを解除したまま車のキーを車内に置いたままにすると、キーが安全でなくなり、通り過ぎた人が持ち歩くことができます。十分に分散された32文字のキーを持つフグは、今日の他のものと同じくらい安全です。ただし、3文字のキーは瞬く間に壊れることがあります。

5
HigherHigh

「最強の暗号はAES-256です」

Bruce SchneierのWebサイトの詳細から、皮肉なことに、AES-256は3つのキーサイズ128、192、および256の中で最も安全性が低い可能性があります。256ビットバリアントのキー生成には問題があります。

3
martin

NISTの論文によると、RJINDAELは、MARS、twofish、またはserpentと比較してセキュリティマージンが低かった。本当に最強の暗号が必要な場合は、そのうちの1つを選択してください。

http://csrc.nist.gov/archive/aes/round2/r2report.pdf

引用:「MARSはセキュリティマージンが高いようです。MARSは2種類のラウンドを採用しているため、正確な特性評価は困難です。MARSはその複雑さに基づいて批判を受けており、セキュリティ分析を妨げている可能性があります。 AES開発プロセスの期間中。

Rijndaelには十分なセキュリティマージンがあるようです。ラウンド数はキーのサイズによって変化するため、セキュリティマージンの測定は少し難しいです。 Rijndaelは、セキュリティマージンがファイナリストの間で低い側にあることと、その数学的構造が攻撃につながる可能性があることの2つの理由でいくつかの批判を受けています。ただし、その構造はかなり単純であるため、AES開発プロセスの指定された時間枠でのセキュリティ分析が容易になった可能性があります。

蛇は高いセキュリティマージンを持っているようです。 Serpentの構造も単純であるため、AES開発プロセスの指定された時間枠でのセキュリティ分析が容易になった可能性があります。

Twofishはセキュリティマージンが高いようです。 Twofishはキーに依存するラウンド関数を使用するため、セキュリティマージンの概念は、他のファイナリストよりもこのアルゴリズムの意味が少ない場合があります。 TwofishSボックスがkビットキーの場合のエントロピーのk/2ビットのみに依存しているため、Twofishは分割統治攻撃に適している可能性があるとの推測がありますが、そのような攻撃は見つかっていません。 Twofishは、その複雑さについていくつかの批判を受けており、AES開発プロセスの期間中の分析を困難にしています。」

2
Rob Bird

一部のアルゴリズムは、さまざまな点で他のアルゴリズムよりも優れています。「最も安全」の基準が何であるかはわかりません。

確かに、最近はDESベースのアルゴリズムを使用しないでください(自由に選択できると仮定します)。AES(Rijndael)は、NISTおよびその他の機関の現在の標準です。

一般に、特定のアルゴリズムのビット数が多いほど安全性が高くなりますが、初期化ベクトルを使用し、ECBを使用しないようにしてください。

HTH

C。

2
symcbean

詳細を確認したい場合は、主に私によるブロック暗号に関する記事があります http://en.citizendium.org/wiki/Block_cipher

現在の米国規格に準拠するには、AES(以前のRijndael)を使用します。 AESコンペティションの他のファイナリスト(Serpent、MARS、Twofish、RC-6)も同様に問題ないはずです。ただし、RC6のライセンスが必要だと思います。

1
Sandy

AESはFIPS承認済みです。最強の暗号はAES-256(MCRYPT_RIJNDAEL_256)であるため、通常はAES-128を使用します。

mcryptはモジュラー設計であり、新しい暗号を簡単に追加できます。

0
ZZ Coder