未確認動物学は魔法ではありません。アプリケーションを暗号化しても、攻撃に対するセキュリティは保証されません (特に認証シークレットを設定していない場合)。しかし、プログラムを保護する必要があるビジネス上のニーズがある場合、従来の常識では、独自のパスワードを考案しようとしないことをお勧めします。既存のパスワード ライブラリを使用する必要があります。
はい、上記の内容をすべて理解しました。それでは、どの PHP パスワード ライブラリを使用すればよいのでしょうか?
実際のニーズによって異なります。いくつかの良いオプションを見てみましょう。 (悪質な暗号ライブラリについては言及しません。)
ここでは、運用環境にデプロイできる高レベルのセキュリティを備えた PHP 暗号ライブラリのリストを示します。このリストは、次の 3 つの基準に基づいて優先順位が付けられています。
この暗号ライブラリをお勧めするのは、私たちが自分で作成したという理由だけでなく、シンプルで直観的なインターフェイスを通じて libsodium を使用するすべてのセキュリティ保護が得られるからです。これはフリー ソフトウェアであり、ソース コードは直接入手できます。
• メインライン
•完全なファイル暗号化 (参照: すべてのメインライン機能)
• 暗号化された Cookie
• パスワード ストレージ
• nonce が何であるかを知る必要はなく、認証された暗号化に特別な注意を払う必要もありません。 Halite があなたのためにすべてを行います。
私たちは、PHP 開発者がよりシンプルなインターフェイスを通じて libsodium 拡張機能のすべてのセキュリティ上の利点を享受できるようにするために Halite を作成しました。 Halite のドキュメントを参照して、その使いやすさを確認してください。 (API は修正されましたが、Halite ヘルプ ファイルはまだ不完全です。ただし、入門レベルのコンテンツをカバーするには十分です。)
唯一の欠点は、Halite を使用するには PHP の libsodium 拡張パッケージをインストールする必要があることです。したがって、多くのプロジェクトでは、Halite アプローチは機能しません。
もちろん、Halite に関して行った決定が気に入らない場合は、libsodium を直接使用することを検討してください。
• 対称鍵暗号化認証 (AEADと同じ)
• 対称鍵認証
• 非対称鍵認証暗号化
• 非対称鍵匿名暗号化
• 非対称暗号化 鍵デジタル署名
•暗号化ハッシュ関数
• パスワードストレージ
• Swiss Army Knife の暗号化プリミティブ (Curve25519 の Diffe-Hellman 鍵交換プロトコルに基づく楕円曲線など)
• PHP のメモリクリア (ゼロパディング) 機能
• 他にもたくさんあります
libsodium は常に世界で最も信頼性の高い、クロスプラットフォームの暗号化ライブラリであるため、Frank Denis と NaCl (libsodium のスピンオフ元) を作成したチームに敬意を表してください。
関連ドキュメントを参照してください。
PECL から PHP 拡張機能をインストールできない場合 (つまり、libsodium をインストールできない場合)、この暗号化ライブラリがバックアップの選択肢となります。一般に、当社のセキュリティ チームは PHP フレームワークが提供する対称キー暗号化機能の欠陥を発見することが多いため、フレームワークが提供するソリューションを優先する必要があります。
• 対称キー認証暗号化
• 対称キー認証暗号化
ほとんどの人が抱えている問題を解決します (そして見事に解決します)。この暗号化ライブラリの 2 番目のバージョン (近日公開予定!) もファイル全体の暗号化をカバーする予定ですが、まだリリースされていないため、まだプラスとは言えません。
対称キー暗号化をインストールする必要がある場合は、上記の Defuse 暗号化ライブラリを使用してください。 Defuse Security の暗号化ライブラリは認証された暗号化を提供しますが、phpseclib の AES 実装は暗号文を検証しません。したがって、これを使用すると、選択された暗号文攻撃に対して非常に脆弱になります。 (彼らのインタラクティブなドキュメントは、ECB モードでも深刻なバグがあります。これは、私たちが言及した最悪のブロック暗号モードです。)
ユニバーサル対称キー暗号化用に phpseclib によって提供される API レベルは低すぎますが、私たちはその不足に従うつもりはありません。学歴のある PHP 開発者はこの用途にこれを推奨していますが、exopenssl よりも優れた非対称キー暗号化方式を提供します。
非対称キー暗号化 (公開キー暗号化、電子署名) の使用を主張し、さまざまな理由で libsodium を使用できない場合は、phpseclib のインストールを検討し、Colin Percival の回答によって提案された正しい暗号化アルゴリズムに厳密に従う必要があります。
暗号化の専門家であれば、警告メッセージを無視して、phpseclib が提供する対称キー暗号化方式を使用できます。しかし、暗号化の専門家ではないほとんどのプログラマーにとって、私たちのヒントを無視しないことが最善です。
このブログの公開後、推奨事項に基づいてプラグイン インストール パッケージ EasyRSA を開発しました。 EasyRSA は、適切に指示された、デフォルトで安全な phpseclib の使用法です。
問題: RSA を使用して非常に大きな文字列を暗号化します。RSA 自体でも非常に大きな文字列データの暗号化をサポートしていません。
本来の解決策は、入力した文字列をチャンクに分割し、個別に暗号化することです。ただし、これは恐ろしい電子コードブック (ECB) モデルに非常に似ています。同じこと:処理も非常に遅いです。これは非常に悪い解決策です。
Defuse SecurityのPHP対称キー暗号化暗号ライブラリを使用してメッセージを暗号化します
既存のRSA公開キーを使用して一時キーを暗号化します(うまく機能するAメソッドのペア)パディングオラクルズ攻撃に対する防御)
EasyRSAのみを使用しますRSAES-OAEP + MGF1-SHA256 (e = 65537) による公開キー暗号化 この暗号化方式は、パディング オラクル攻撃に対する耐性が高いことが知られています。
EasyRSA 署名方法しかし真剣に、PHP プログラムの安全な暗号化方法を本当に見つけたい場合は、libsodium を使用する方法を見つけてみてください。私たちは libsodium を PHP 7.1 のコア拡張機能にすることを推進しているため、将来的には libsodium の使用が「PHP の新しいバージョンに更新する」のと同じくらい簡単になることを期待しています。
私たちが提供する PHP 暗号化ライブラリの提案について
PHP では、パスワードを暗号化するためにどのような方法を使用する必要がありますか?
ただし、Web アプリケーション用に別のサーバー上のデータベースにパスワードを保存する場合は、(パスワード自体を暗号化するのではなく) ハッシュを暗号化することで、パスワード漏洩のリスクを軽減できます。このアプローチを使用するには、Halite パスワード コースを確認してください。
重要なセキュリティ上のアドバイスの免責事項
したがって、たとえば、非対称暗号化アルゴリズムを使用する必要があり、Defuse Security の対称暗号化暗号ライブラリを使用することを主張する場合は、「Paragon Initiative Enterprises からこれを行うように頼まれた!」とは言わないでください
Defuse を使用したい場合は、セキュリティの対称暗号化暗号ライブラリ 当社からのセキュリティに関するアドバイスが必要なプロジェクトの場合は、セキュリティ コンサルティング サービスへの当社の採用をご検討ください。
または法的な用語: この記事の情報はいかなる保証も提供しません。ご自身の責任でご利用ください。
元のアドレス: Choosing the Right Cryptography Library for your PHP Project: A Guide