web-dev-qa-db-ja.com

phpseclibはOpenSSLの安全で信頼できる代替品ですか?

OpenSSLは、Apacheと設定ファイルを介してインストールおよびアクティブ化する必要があることを知っています。これは、煩雑であるか、不可能でさえあり得ます。そして phpseclib はより柔軟ですOpenSSLよりも扱いやすく(X.509の問題/特定の状況ではPHP実装では、有効なキーペアを作成するためにX.509証明書が必要))、 OpenSSLの代わりにphpseclibを使用します。

しかし、これが問題ですが、それは本当にセキュリティ面で実行可能な代替策なのでしょうか?そのソースコードをサーバー上に置くのは問題ではないですか? phpseclib、またはRSAのphp実装を使用して、セキュリティ上のマイナスの影響がありますか?

状況:

  • OpenSSL:+ネイティブ+バイナリ-柔軟性が低い-汎用性が低い-時々設定の問題
  • phpseclib:+柔軟+移植可能+多用途-非ネイティブ-コンパイルされていません

質問:

  • セキュリティ?

[〜#〜] edit [〜#〜]:OpenSSLを使用してキーペアを作成し、データをDBに直接暗号化します(クライアント要求、いいえそれを回避する方法)。しかし、ここでの問題は、最終的なアプリケーションとは関係なく、一般的なものです。

5
Larzan

暗号化アルゴリズムを安全に実装するのは難しい。知っておくべきこと。暗号化アルゴリズムconcentrateはキーに秘密を秘密にします。これは非常に価値があり、実装に関連する多くのリーク(実行時間の小さな変動など)が暗号化に適用されると悲惨な状態になる可能性があります。

このようなリークを回避する方法はいくつかありますが、注意、多くの試行錯誤、そして何よりも実行エンジンの低レベルの動作に関する広範な知識が必要です。原則として、ハードウェアから離れるほど、サイドチャネル攻撃からコードを保護することが難しくなります。 PHPは、Cコードよりも金属からはるかに離れています。

可能ではないというわけではありません。たとえば、暗号化アルゴリズムのタイミング攻撃に強い実装は、Javaまたは.NETで非常に可能です。したがって、PHPでも実行できるはずです。しかし、いつものように、それは確認するために多くの外部の精査を必要とします。

暗号化ではnew is badであることに注意してください。セキュリティは、長時間の露出によって得られます。 OpenSSLの欠点はすべて、長年にわたって多くの問題にさらされてきました。 phpseclibの方が新しく、サイドチャネルリークに関しては「やや敵意のある」フレームワークを使用しているため、本稼働に適合していると宣言するには時期尚早です。


「X.509問題」の意味がわかりません。つまり、X.509は地獄のスポーンです。しかし、PHPの実装がどのようにうまく機能するかはわかりません。ここでのPHPの良い点の1つは、PHPが配列の境界をチェックするため、バッファオーバーフローの結果を制限することです(実際にバッファオーバーフローする代わりにアプリケーションがクラッシュする)。これは、多くの人々がこれらのバッファーを作動させずにASN.1エンコード/デコードを適切に実装できないように思われるため、X.509にとって重要です。ただし、それ以外は、CとPHPのどちらを使用しても、X.509の複雑さは変わりません。

「簡単にするために」、すべてをゼロから書き直すというアイデアは、X.509について話すときに定期的に思い浮かびます。しかし、X.509の「問題」は、通常の実装が悪いことではありません。これは、X.509が本質的に複雑であることです。これは、X.509が信頼の委任という複雑な問題に前向きに対処しようとするためです(競合するすべてのソリューションは、それを回避しようとします)。 X.509(標準)は、多くのレガシークラッドを蓄積しています。それを最初から書き直すことは、あなたが望まない標準の部分を削除しない限り、それをより単純にすることはありません。その場合、それはより単純になりますが、それはそうしませんt動作します。

5
Thomas Pornin

番号。

phpseclibはOpenSSLほど厳しく吟味されていません。後者は、使用されている最も注意深く精査されたコードのトップ10リストに簡単に含まれています。

将来のバグを予測することは困難ですが、ソフトウェアへの注目が高まるほど、バグ(および特にセキュリティの問題)が早く取り除かれます。 OpenSSLは非常に成熟しています。一方、phpseclibは間違いなくそうではありません。

Phpseclibが明らかに安全でないと言っているのではありません。それは非常に合理的なコードのコードかもしれません。しかし、OpenSSLが持っている審査員のレベルからの精査のレベルを見ていなかったため、それはOpenSSLと同じレベルではありません。

また、HTTPSを実行するためにApache/SSLの代わりにphpseclibを使用するつもりなら、間違いなく間違っています。そして、あなたが話している「X.509の問題」は何でも約、これは合理的な解決策ではありません。

4
tylerl