ホームページ >バックエンド開発 >PHPチュートリアル >PHP プログラムに適切な暗号化ライブラリを選択してください

PHP プログラムに適切な暗号化ライブラリを選択してください

WBOY
WBOYオリジナル
2016-06-23 13:14:341075ブラウズ

未確認動物学は魔法ではありません。アプリケーションを暗号化しても、攻撃に対するセキュリティは保証されません (特に認証シークレットを設定していない場合)。しかし、プログラムを保護する必要があるビジネス上のニーズがある場合、従来の常識では、独自のパスワードを考案しようとしないことをお勧めします。既存のパスワード ライブラリを使用する必要があります。

はい、上記の内容をすべて理解しました。それでは、どの PHP パスワード ライブラリを使用すればよいのでしょうか?

実際のニーズによって異なります。いくつかの良いオプションを見てみましょう。 (悪質な暗号ライブラリについては言及しません。)

安全な PHP 暗号ライブラリの推奨事項

ここでは、運用環境にデプロイできる高レベルのセキュリティを備えた PHP 暗号ライブラリのリストを示します。このリストは、次の 3 つの基準に基づいて優先順位が付けられています。

  1. この暗号ライブラリは正しく使用された場合、どの程度安全ですか?
  2. 危険な行為はどれくらい難しいですか?
  3. 暗号技術者ではない人でも可能な限り簡単に使用できるようにするにはどうすればよいでしょうか?

Halite – Paragon Initiative Enterprises より

この暗号ライブラリをお勧めするのは、私たちが自分で作成したという理由だけでなく、シンプルで直観的なインターフェイスを通じて libsodium を使用するすべてのセキュリティ保護が得られるからです。これはフリー ソフトウェアであり、ソース コードは直接入手できます。

Halite を使用する利点

• メインライン

  • 対称鍵認証暗号化
  • 対称鍵認証 (例: API メッセージ)
  • 非対称鍵認証暗号化
  • 非対称鍵匿名暗号化
  • 非対称鍵デジタル署名

•完全なファイル暗号化 (参照: すべてのメインライン機能)

• 暗号化された Cookie

• パスワード ストレージ

• nonce が何であるかを知る必要はなく、認証された暗号化に特別な注意を払う必要もありません。 Halite があなたのためにすべてを行います。

私たちは、PHP 開発者がよりシンプルなインターフェイスを通じて libsodium 拡張機能のすべてのセキュリティ上の利点を享受できるようにするために Halite を作成しました。 Halite のドキュメントを参照して、その使いやすさを確認してください。 (API は修正されましたが、Halite ヘルプ ファイルはまだ不完全です。ただし、入門レベルのコンテンツをカバーするには十分です。)

唯一の欠点は、Halite を使用するには PHP の libsodium 拡張パッケージをインストールする必要があることです。したがって、多くのプロジェクトでは、Halite アプローチは機能しません。

インストール ガイド:

  1. PHP 用の libsodium 拡張パッケージをインストールします
  2. paragoniehalite`
  3. が必要です

もちろん、Halite に関して行った決定が気に入らない場合は、libsodium を直接使用することを検討してください。

libsodiumを使用する利点

• 対称鍵暗号化認証 (AEADと同じ)

• 対称鍵認証

• 非対称鍵認証暗号化

• 非対称鍵匿名暗号化

• 非対称暗号化 鍵デジタル署名

•暗号化ハッシュ関数

• パスワードストレージ

• Swiss Army Knife の暗号化プリミティブ (Curve25519 の Diffe-Hellman 鍵交換プロトコルに基づく楕円曲線など)

• PHP のメモリクリア (ゼロパディング) 機能

• 他にもたくさんあります

libsodium は常に世界で最も信頼性の高い、クロスプラットフォームの暗号化ライブラリであるため、Frank Denis と NaCl (libsodium のスピンオフ元) を作成したチームに敬意を表してください。

インストールガイド

関連ドキュメントを参照してください。

PHP 暗号化 – Defuse Security から

PECL から PHP 拡張機能をインストールできない場合 (つまり、libsodium をインストールできない場合)、この暗号化ライブラリがバックアップの選択肢となります。一般に、当社のセキュリティ チームは PHP フレームワークが提供する対称キー暗号化機能の欠陥を発見することが多いため、フレームワークが提供するソリューションを優先する必要があります。

Defuse Security の PHP パスワード ライブラリを使用する利点:

• 対称キー認証暗号化

• 対称キー認証暗号化

ほとんどの人が抱えている問題を解決します (そして見事に解決します)。この暗号化ライブラリの 2 番目のバージョン (近日公開予定!) もファイル全体の暗号化をカバーする予定ですが、まだリリースされていないため、まだプラスとは言えません。

Phpseclib - Jim Wigginton ら (RSA のみ)

対称キー暗号化をインストールする必要がある場合は、上記の Defuse 暗号化ライブラリを使用してください。 Defuse Security の暗号化ライブラリは認証された暗号化を提供しますが、phpseclib の AES 実装は暗号文を検証しません。したがって、これを使用すると、選択された暗号文攻撃に対して非常に脆弱になります。 (彼らのインタラクティブなドキュメントは、ECB モードでも深刻なバグがあります。これは、私たちが言及した最悪のブロック暗号モードです。)

ユニバーサル対称キー暗号化用に phpseclib によって提供される API レベルは低すぎますが、私たちはその不足に従うつもりはありません。学歴のある PHP 開発者はこの用途にこれを推奨していますが、exopenssl よりも優れた非対称キー暗号化方式を提供します。

非対称キー暗号化 (公開キー暗号化、電子署名) の使用を主張し、さまざまな理由で libsodium を使用できない場合は、phpseclib のインストールを検討し、Colin Percival の回答によって提案された正しい暗号化アルゴリズムに厳密に従う必要があります。

特別な注意

  • RSA 暗号化アルゴリズム: RSA-OAEP (最適な非対称暗号化パディング)、最初に $rsa-setMGFHash('sha256') を検討します
  • RSA 署名暗号化: RSA-PSS (確率的署名スキーム)、再度明示的に指定MGF1+SHA256 の使用

暗号化の専門家であれば、警告メッセージを無視して、phpseclib が提供する対称キー暗号化方式を使用できます。しかし、暗号化の専門家ではないほとんどのプログラマーにとって、私たちのヒントを無視しないことが最善です。

PHPSecLib を使用する利点:

  • 対称キー認証 (HMAC キー経由、PHP も提供)
  • 非対称キー匿名暗号化 (RSA)
  • 非対称キー電子署名方式 (RSA)

更新された内容 (2015-11) -19) Easy RSA

このブログの公開後、推奨事項に基づいてプラグイン インストール パッケージ EasyRSA を開発しました。 EasyRSA は、適切に指示された、デフォルトで安全な phpseclib の使用法です。

簡単な RSA 暗号化プロセス

問題: RSA を使用して非常に大きな文字列を暗号化します。RSA 自体でも非常に大きな文字列データの暗号化をサポートしていません。

本来の解決策は、入力した文字列をチャンクに分割し、個別に暗号化することです。ただし、これは恐ろしい電子コードブック (ECB) モデルに非常に似ています。同じこと:処理も非常に遅いです。これは非常に悪い解決策です。

私たちのソリューション

  • 一時キーを生成します
  • Defuse SecurityのPHP対称キー暗号化暗号ライブラリを使用してメッセージを暗号化します

  • 既存のRSA公開キーを使用して一時キーを暗号化します(うまく機能するAメソッドのペア)パディングオラクルズ攻撃に対する防御)

  • 64 ビットエンコーディングに基づいており、バージョンマークプレフィックスを使用して暗号文を連結します
  • 4 番目のステップ (傍受されたハッシュ SHA256 暗号化アルゴリズム) にチェックサムを追加して、送信ストレージエラー検出機能を強化します。

メッセージを復号化するには

  1. チェックサムとバージョンスタンプを確認します
  2. 正しいRSA秘密キーを使用して一時キーを復号化します
  3. 前の手順で取得した復号化キーを使用して平文を取得します

EasyRSAのみを使用しますRSAES-OAEP + MGF1-SHA256 (e = 65537) による公開キー暗号化 この暗号化方式は、パディング オラクル攻撃に対する耐性が高いことが知られています。

EasyRSA 署名方法

RSA 署名方法は比較的簡単です。RSASS-PSS + MGF1-SHA256 を e = 65537 で使用して RSA 署名を計算し、このタイプの署名のみを受け入れるように設定されていることを確認します。

しかし真剣に、PHP プログラムの安全な暗号化方法を本当に見つけたい場合は、libsodium を使用する方法を見つけてみてください。私たちは libsodium を PHP 7.1 のコア拡張機能にすることを推進しているため、将来的には libsodium の使用が「PHP の新しいバージョンに更新する」のと同じくらい簡単になることを期待しています。

私たちが提供する PHP 暗号化ライブラリの提案について

他の暗号ライブラリについてはどうですか?

上記以外の暗号ライブラリの失敗は、次の 3 つの考えられる理由によって説明できます:

    私たちはこの暗号ライブラリをレビューしましたが、正直に言って、推奨するには十分ではありません。 (暗号ライブラリの欠陥を作成者に通知して、改善できるようにした可能性があります。)
  1. 暗号ライブラリがあまりにも限定的に使用されているか (Crypt GPG など)、または安全ではあっても、より広範な用途には関連していません。暗号化の使用。
  2. 私たちは忙しすぎて、このパスワード ライブラリをまだ確認できません。 (私たちはこの暗号ライブラリの存在をまだ認識していない可能性があります。)
欠陥があると判断された暗号ライブラリに興味がある場合は、セキュリティ アドバイザリ ページで詳細をご覧ください。

PHP では、パスワードを暗号化するためにどのような方法を使用する必要がありますか?

パスワードを暗号化する必要はなく、適切なパスワード ハッシュ アルゴリズム (ハッシュ パスワード アルゴリズム) を使用してパスワードをハッシュするだけで済みます。現在利用可能な最高のパスワード ライブラリの 1 つは、PHP に組み込まれています、password hash() と passwdverify() です。このハッシュ アルゴリズムは、99% のプログラマーや企業にとって安定しており、効果的です。このアルゴリズムは本当に素晴らしいです。

ただし、Web アプリケーション用に別のサーバー上のデータベースにパスワードを保存する場合は、(パスワード自体を暗号化するのではなく) ハッシュを暗号化することで、パスワード漏洩のリスクを軽減できます。このアプローチを使用するには、Halite パスワード コースを確認してください。

重要なセキュリティ上のアドバイスの免責事項

当社は PHP 開発セキュリティの業界トップの専門家を雇用していますが (そして私たちは応用暗号化の専門家でもあります)、彼らはお客様の特定のプロジェクト要件とリスク モデルを理解せずに執筆しています。このガイドは、次のことをガイドするものではありません。ニーズに最適なソリューションを選択してください。

したがって、たとえば、非対称暗号化アルゴリズムを使用する必要があり、Defuse Security の対称暗号化暗号ライブラリを使用することを主張する場合は、「Paragon Initiative Enterprises からこれを行うように頼まれた!」とは言わないでください

Defuse を使用したい場合は、セキュリティの対称暗号化暗号ライブラリ 当社からのセキュリティに関するアドバイスが必要なプロジェクトの場合は、セキュリティ コンサルティング サービスへの当社の採用をご検討ください。

または法的な用語: この記事の情報はいかなる保証も提供しません。ご自身の責任でご利用ください。

元のアドレス: Choosing the Right Cryptography Library for your PHP Project: A Guide

この記事は、OneAPM エンジニアによって編集および編集されました。 OneAPM は、アプリケーション パフォーマンス管理の新興リーダーであり、企業ユーザーや開発者が遅いプログラム コードや SQL ステートメントをリアルタイムでキャプチャできるように支援します。さらに技術的な記事を読むには、OneAPM 公式ブログにアクセスしてください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。