6

私はGCMとその素晴らしさについてよく読んでおり、 PHPを使用してAES-GCM認証暗号化を使用する方法を知りたいと思っています。でサポートされていますか? Codeigniter フレームワークのドキュメントでGCMへの参照をいくつか見つけたので、 Codeigniterで使用できると思いました。mcrypt()

また、 Zendに関するドキュメントで何かに出くわしました。フレームワークを使用しておらず、現在のプロジェクトで使用するつもりもないため、 Codeigniterドライバーを使用するつもりはありません。しかし、Codeigniterでそれができるのであれば、フレームワークなしでもできるはずです。

GCMは、パフォーマンスだけでなくセキュリティの面でも優れているようです (非常に印象的なパフォーマンスの数値を見ました)。これが必要だと感じていますが、例が見つかりません。誰かがこれを達成する方法を知っている必要があります。OpenSSLでサポートされていることは知っています。

どんな助けでも大歓迎です。

4

3 に答える 3

5

あなたはここでいくつかの質問をするので、私は上記のようにそれらに個別に対処するつもりです:

mcrypt() でサポートされていますか?

いいえ、mcrypt は AES 暗号化自体をサポートしていません。ただし、AES の基本アルゴリズムである Rijndael (「雨人形」と発音) はサポートしています。AES は Rijndael の特定のパラメーター セットとして定義されているため、適切なパラメーターを使用して AES に一致させることができますが、GCM モードは使用できません。

GCM は、パフォーマンスだけでなくセキュリティの面でも優れているようです (非常に印象的なパフォーマンスの数値を見ました)。これが必要だと感じていますが、例が見つかりません。

残念ながら、これはセキュリティ モデルまたは実装を選択するための間違った方法です。アルゴリズムや暗号モードが異なれば用途も異なり、間違ったモードを適用すると、たとえば、AES のような明らかに強力な暗号を使用している場合でも、アプリケーションが攻撃に対して脆弱なままになる可能性があります。GCM は、このモードが暗号化と認証を一度に提供するため、非常によく話されています。すべてのアプリケーションが両方を必要とするわけではなく、設計上の強度を弱めるような方法でそれらを使用する場合もあります。これがアプリケーションで使用する正しいモードであり、使用する現在の最小パラメーターが何であるかを確認するために、宿題を行う必要があります。

セキュリティの専門家でない限り、実績のあるフレームワークを使用する方がはるかに優れています。独自の暗号化やセキュリティ管理を実装することは、決して良い考えではありません。簡単な攻撃にさらされる可能性のある間違いを犯しやすいからです。最善の選択肢は、あなたが達成したいことを実行し、ニーズに合うように慎重に構成する、実証済みでテスト済みのオープンソースのフレームワークを見つけることです。その後、フレームワークにパッチを適用して最新の状態に保つことが重要です。

AES-GCMのパフォーマンス統計について言及しているので、必要な操作を高速化するために特別に設計されたハードウェアサポートを備えた最新のCPU(i7以降)で非常にうまく機能します. サーバーまたはクライアントにハードウェア アクセラレーションがない場合、AES-GCM は非常に遅くなります。実際のハードウェア サポートに加えて、使用するソフトウェア ライブラリが重要です。これは、高速化を利用するために必要なハードウェアを呼び出す必要があるためです。

OpenSSLでサポートされていることは知っています。

OpenSSL は、AES-GCM を実装するライブラリの 1 つであり、AES-NI (ハードウェア アクセラレーション テクノロジ) が利用可能な場合はそれを利用します。

悪いニュースは、現在 (2015 年 2 月上旬) に利用可能な PHP 拡張機能が、AES-GCM を実装する特定のライブラリをサポートしていないことです。GCM の使用が急がれるようになったのは、最近 SSL プロトコルで発見された脆弱性が原因であり、最終的にすべての人が TLS と認証付き暗号化モードに移行することを余儀なくされています。セキュリティの専門家は何年にもわたってそのような動きを推進してきましたが、サーバー メーカーとブラウザ メーカーの両方が、Authenticated Encryption への最初の一歩を踏み出すのをお互いに待ちながら足を引きずっていました。ようやく正しい方向への動きが見え始めています。

今年中にようやく PHP で AES-GCM が使えるようになると思いますが、今のところ自由に利用することはできません。

いくつかの情報源: http://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption EVP ライブラリを示します。AES-NI を利用する AES-GCM の高レベルの実装

http://phpaes.com PHP の AES 実装。それらが適切にテストされているかどうか、またはハードウェアアクセラレーションを使用しているかどうかはわかりません. 彼らは GCM を提供していませんが、良い学習ツールになるかもしれません。

于 2015-02-10T16:52:10.723 に答える
2

初期化関数のパラメーターとしてモードを設定できます。

$this->encryption->initialize(
        array('mode' => 'gcm')
);

このコードを使用するには、もちろん ci を使用する必要があり、それは暗号化クラスです

$this->load->library('encryption');

初期化メソッド内で暗号、ドライバー、およびキーを変更することもできます。詳細については、http: //www.storycon.us/ci3/libraries/encryption.html#id11 をご覧ください。

于 2014-07-01T21:33:45.123 に答える