> openssl passwd -1 "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
これは、拡張された Unix スタイルの crypt(3)
です。 パスワード ハッシュ構文、具体的にはその MD5 バージョン。
最初の $1$
ハッシュタイプを識別し、次の部分 OKgLCmVl
はパスワードの暗号化に使用されるソルトで、セパレータの後に $
行末までの文字が実際のパスワード ハッシュです。
したがって、最初の暗号化からソルト部分を取得し、それを後続の暗号化で使用すると、常に同じ結果が得られるはずです:
> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
パスワードを変更するとき 、常に新しい塩に切り替える必要があります。これにより、新しいパスワードが実際に古いパスワードと同じであったかどうかを後で知ることができなくなります。 (古いパスワードの再利用を防ぎたい場合は、もちろん、新しいパスワード候補を 2 回ハッシュすることができます。1 回は古いソルトで、次に、結果が古いパスワードとは異なり、したがって許容できる場合は、もう一度新しいソルトでハッシュします。塩)
openssl passwd
を使用する場合 オプションを指定しないと、元の crypt(3)
が返されます -dave_thompson_085 で説明されている互換性のあるハッシュ。この場合、salt はハッシュの最初の 2 文字です:
> openssl passwd "a"
imM.Fa8z1RS.k
> openssl passwd -salt "im" "a"
imM.Fa8z1RS.k
新しい実装では、この古いハッシュ スタイルを使用しないでください。これは、有効なパスワードの長さが 8 文字に制限されており、salt が少なすぎて最新の方法から適切に保護できないためです。
(私は一度、古典的な crypt(3)
ごとにレインボー テーブルの完全なセットを保存するのに必要なデータ量を計算しました。 ハッシュ。正確な結果は覚えていませんが、計算が正しかったと仮定すると、「数テラバイトのディスクの適度なスタック」のオーダーでした。私の意見では、それは「組織的な犯罪者が実行できる」範囲内に位置付けられます。)
通常のハッシュとは異なり、パスワード ハッシュは「salt」およびを使用する必要があります ハッシュを取得した攻撃者がパスワードを簡単に復元できないようにするために、(通常は反復によって) 遅くする必要があります。 security.SX の canonical と、それにリンクされている多くのものを参照してください。
元の 1970 年代の crypt(3) は、明確にするために現在 DEScrypt と呼ばれていますが、(軽く) ソルト化されています :
<ブロック引用>塩 セット [a-zA-Z0-9./] から選択された 2 文字の文字列です。この文字列は、4096 通りの方法のいずれかでアルゴリズムを混乱させるために使用されます。
少し新しい MD5crypt スキームはソルト化され、反復されますが、最新の標準には達していません。これらの両方と、Unix(es) でそれらを置き換えたより優れたスキームのいくつかは、https://en.wikipedia.org/wiki/Crypt_%28C%29 で詳しく説明されています。
ユーザーmuruさんそうですね。パスワードはソルト化されています。
オプション -salt string
を追加できます あなた自身とハッシュは同じままです.
$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142
$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142