
ハッシュを生成するために md5 ハッシュを使用した Web アプリケーションで使用された文字列があります。ハッシュもあります。しかし、文字列の md5 がハッシュと一致しないので、ソルトが関係していると思われます。ソルトを判別するのに役立つソフトウェアはありますか?
答え1
標準のハッシュ関数 (例: /etc/shadow 内の UNIX パスワード) では、ソルトはハッシュの一部として保存されます。
保存されたハッシュ値をソルトとして渡すと、正しい結果が得られます。
/etc/shadow 内のハッシュ化されたパスワード値は、実際には $ で区切られたレコードです。たとえば、パスワード 'blarg' のハッシュは次のようになります。
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0
$で区切られた3つのフィールドがあり、
- ハッシュ関数(この場合は '1'、MD5 を表す)
- 塩(「KfcI/JTQ」)
- ハッシュ値(「b5VTf4i9Mnf6QFgLuVZNM0」)
mkpasswd を複数回使用するとハッシュが変更されます。
$ mkpasswd -m md5 blarg
$1$Gst52IWk$8ARVeSlpkcZOlyKV10Slu/
$ mkpasswd -m md5 blarg
$1$JeqRviA/$GnH/AvGnZEG9wLfJjiaAt1
ただし、上記のハッシュ値からソルト (つまり、2 番目のフィールド) を渡すことで、元のハッシュと照合することができます。
$ mkpasswd -m md5 -S KfcI/JTQ blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0
パスワードハッシュ全体を渡すこともできます(ただし、ハッシュ関数は省略します)。
$ mkpasswd -m md5 -S KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0
Linux では、ハッシュ タイプは /etc/login.defs で制御できます。これを変更するときは十分に注意してください。システムから完全に締め出されてしまう可能性があります。マニュアル ページを注意深く読み、特に MD5_CRYPT_ENAB と ENCRYPT_METHOD の見出しを確認することをお勧めします。