web-dev-qa-db-ja.com

OpenLDAPでのパスワードのハッシュ

ほとんどの人がOpenLDAPの多数の組み込みハッシュ関数の1つを使用してOpenLDAPにユーザーパスワードを保存すると言っているインターネット上のいくつかの投稿を見ました。 ただし、OpenLDAP自体は、パスワードのハッシュ化と復号化を別のサービスに渡すことを推奨しています

さらに、 RFC 4519セクション2.41 は、LDAPシステムに保存されているパスワードはしないでくださいハッシュする必要があるが、クリアテキストで保存する必要があることを示しています。

クリンジ

OpenLDAPのドキュメントでは、パスワードハッシュを別のサービス、具体的には Cyrus SASL ライブラリに渡すことを推奨しています。

両方のパッケージのドキュメントにも古いハッシュアルゴリズムが多数リストされています。 SHA-1やMD5のようなもの。

2015年に、LDAPを介して管理されるパスワードをハッシュするための一般的な方法はありますか?最近、どのハッシュアルゴリズムが一般的に使用されていますか?ハッシュサービスにハッシュを渡すことは非常に一般的な方法ですか?もしそうなら、どのパッケージがRed Hat Systemsで共通ですか? theyはどこにハッシュを格納しますか?

3
StudentsTea

それはあなたが彼らが書いているものをどのように解釈するかについてです。彼らはあなたがハッシュ化すべきではなく、プレーンテキストでパスワードを保存すべきだと言っていません。 LDAPに書き込む値はハッシュ化も暗号化もされていません。これは、通常のデータベースでの状況に似ています。 passwordという列を定義して、その列を暗号化するようにデータベースに指示することができます。次に、その列にデータを貼り付けることができます。このデータは、暗号化/ハッシュまたはプレーンテキストにすることができます。列を暗号化するように定義すると、データは列に書き込まれるときに暗号化され、そこから読み取られるときに復号化されます。パスワードのハッシュを保存している場合、そのハッシュも暗号化され、使用する前に復号化する必要があります。一般に、データベースの暗号化とは、データダンプなどにエクスポートされたデータを保護することです。データベースのテーブルにアクセスすると、暗号化/復号化がバックグラウンドで行われ、表示されないという点で、ディスクの暗号化に少し似ています。ただし、データのダンプにアクセスしたり、ディスク上のテーブルデータファイルにアクセスしたりすると、情報を読み取ることができなくなります。

パスワード属性の定義がオクテット文字列構文に格納されていることに注意してください。この形式は、ハッシュされたパスワードで使用されるすべての文字をサポートするように定義されています。ベストプラクティスが言っていることは、LDAPはユーザーが指定した値を、それ以上の暗号化やハッシュを行わずに「そのまま」保存するということです。このデータを管理するソフトウェアの義務は、必要なハッシュを実行することです

「L」はLDAPの略で軽量です。 LDAPサーバーは、通常、書き込みがはるかに少ない大量の読み取りを認識します。それは多くのクエリを処理するように設計されており、シンプルに保つことで良好なパフォーマンスを確保しようとします。暗号化を追加すると、不要なオーバーヘッドがさらに発生します。パスワード属性が暗号化されている場合、すべてのクエリでその情報を復号化する必要があり、パフォーマンスが低下します。

LDAPは、管理インターフェースを提供しないことで、物事をシンプルに保ちます。基本的には、クエリに答えることを主な役割とする属性と値の定義済みツリーです。これをさらに強化するために、高需要の環境では、すべての書き込み/更新が送信されるマスターLDAPサーバーと、すべてのクエリが送信されるスレーブ/レプリカサーバーがあることがよくあります。マスターに書き込むとき、ifは変更をスレーブに転送します。

データの管理は通常、他のプログラムによって実行されます。たとえば、私たちのサイトには、IAMシステムからデータを受信するPerlプログラムがあります。次に、このデータを取得し、いくつかのビジネスルールを適用して、結果をLDAPマスターに書き込みます。 Perlプログラムはパスワードのハッシュを実行します(実際には、すべてのアプリケーションが同じハッシュアルゴリズムを理解しているわけではないため、各パスワードに対して複数のハッシュタイプをサポートする必要があります。このハッシュによってソルトも追加されます。

クライアントがLDAPサーバーに照会すると、属性に格納されているものを何でも取得します。パスワードを使用すると、格納されるデータには、使用されたハッシュのタイプの詳細が含まれます。もちろん、バインドが機能するためには、LDAPサーバーは、バインドを実行するために使用されているハッシュの少なくとも1つを理解している必要があります。

この場合、使用する主なハッシュはSHA-512です。 MD5、SHA1、Cryptなどへの参照は古くなっているため、使用しないでください。これは、このアプローチの利点のもう1つの例です。かつてはSHA-1やCryptさえ使用していました。 LDAPやバージョンなどをあまり気にすることなく、新しいハッシュアルゴリズムに簡単に更新できます。

3
Tim X

LDAPサーバーは、バインドの検証など、特定の状況では確実にハッシュを行います。保存されたパスワードは次のようになります(私の実際のパスワード、クラックしてください;)

{sha384}QoAkviNtBCtNyjN+yAkEEL6ChjtUVFKDTKHrIlx/YqIHrDG7Tx2eJhbBPKAX0mo5

ハッシュアルゴリズムがハッシュに含まれていることに注意してください。クライアントソフトウェアで使用されているかなり標準的なハッシュのセットがあります。 phpLDAPadminには、blowfish、crypt、ext_des、md5、md5cryptなどがあります。これはどこかで標準化されていると思います。新しいアルゴリズムはデフォルトでは利用できないので、md5cryptがこれらのオプションの中で最良であると思います。

どうやら、新しいハッシュアルゴリズム用のプラグインがあります。 この質問 を参照してください。それはあなたの最善の策です。

0
paj28

許容可能なハッシュアルゴリズムの詳細については、 パスワードストレージのチートシート を参照してください。 @Neilで示されているように、openldapで推奨されるハッシュアルゴリズムを使用できるはずです。

0
jhash