ランダム化されたSlappasswd出力


10

slappasswd固定ハッシュを生成することを期待していましたが、同じ入力パスワードに対して同じ出力を取得することはないため、出力はランダム化されているようです。

$ slappasswd -s secret
{SSHA}mCXsPZkfgQYZr2mKHpy5Iav+2S2XlVU3
$ slappasswd -s secret
{SSHA}62oXsalJBuopYfHhi6hGp6AESuWNIVnd
$ slappasswd -s secret
{SSHA}0Ulc8+ugMi3NbTtWnclOFW1LKCqRdsT8

認証中に、slapdは提供されたパスワードのハッシュを同じようにランダム化して、そもそも最初に定義されたパスワードと一致できるようにする方法を知っていますか?

回答:


8

ここで外に出ますが、slappasswdがプレーンハッシュの代わりにソルトハッシュを使用していると思います。つまり、ランダムなプレフィックスがパスワードに追加され、そのランダムなプレフィックスがslappasswd出力に表示される文字列の一部として保存されます。パスワードを入力すると、それにプレフィックスが追加され、結果がハッシュされ、slappasswd出力の文字列と比較されます。一致する場合、あなたは入っています。一致しない場合、パスワードは間違っていました:)


3
確かに。特に、のデフォルトのハッシュ方式slappasswdは{SSHA}、またはSHA-1のソルトバージョンです。
justarobert

同意しますが、私の質問は残ります。ソルトがハッシュの一部として終わる場合、ハッシュされたパスワードからソルトを抽出できないことを意味します。したがって、slapdはどのようにパスワード検証を行うときに追加するソルトを知るのでしょうか?(ハッシュ化されたパスワードが同じになるには、同じソルトを追加する必要があります)。
最大

3
@user:後の部分に{SSHA}はソルトとハッシュの両方が含まれています。
user1686 2011

8

SSHAはソルトSHA-1です。デフォルトでは、最後の4バイトがソルトです。slappasswdの出力は

'{<Hash Method>}<base64 converted hash and salt>'

したがって、テストするには、プレーンテキストのパスワードがソルト付きSHAと等しいかどうかを確認する必要があります。

  1. ハッシュメソッドの指定子をsedなどで取り除きます。
  2. base64文字列をデコードする
  3. 最後の4バイトを抽出します。これはソルトです
  4. ソルトをプレーンテキストのパスワードに連結します
  5. ハッシュ化
  6. 比較する

base64でデコードされた文字列には、ハッシュがバイナリ形式で含まれており、印刷できないため、odを使用して16進数に変換します。最初の3つのステップは、次のコードによって実行されています。

#!/bin/bash
output=$(slappasswd -h {SSHA} -s password)
hashsalt=$( echo -n $output | sed 's/{SSHA}//' | base64 -d)
salt=${hashsalt:(-1),(-4)}
echo $output
echo $(echo -n $hashsalt | od -A n -t x1)
echo "Salt: $salt"

出力は次のようになります。

{SSHA}fDu0PgKDn1Di9W1HMINpPXRqQ9jTYjuH

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8 d3 62 3b 87
<------------------------- Hash --------------------------> <-- Salt-->

Salt: ▒b;▒

したがって、今度はソルトをプレーンテキストのパスワードに連結してハッシュする必要があります。今回はソルトしません。私が理解していた問題は、ソルトは実際には印刷不可能な文字を含む任意の文字になり得るということでした。これらの印刷不可能な文字を連結するために、printfとその16進表現を使用します。

slappasswd -h {SHA} -s $(printf 'password\xd3\x62\x3b\x87') | sed 's/{SHA}//' | base64 -d | od -A n -t x1

出力は次のとおりです。

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8

上記のハッシュと同じです。これで、「パスワード」がソルト付きSHAと一致することを確認しました。

よろしくお願いしますhttp : //cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.