Linux パスワード ハッシュのソルトとは何ですか? また、それがなぜ重要なのですか?

最終更新: 04/12/2025
  • ソルトは、ユーザーごとに一意のハッシュを実現するために、ハッシュの前にパスワードに追加されるランダムな文字列です。
  • Linux ハッシュ、ソルト、アルゴリズムを /etc/shadow に保存し、辞書攻撃やレインボーテーブルに対するセキュリティを強化します。
  • 良い実践には、長くてランダムでユニークなソルトと、堅牢なハッシュアルゴリズムと データベース よく保護されています。
  • パスワードソルトは、強力なパスワード、MFA、パスワード マネージャーを含むより広範なセキュリティ ポリシーに統合する必要があります。

Linuxのパスワードハッシュのソルト

GNU/Linuxシステムを扱う方、あるいはアカウントのセキュリティを心配している方は、おそらく次のようなことを聞​​いたことがあるでしょう。 パスワードハッシュのソルトこれは、よく話題に上がるものの、半分しか理解されていない概念の 1 つです。技術的な話に聞こえますが、実際には、簡単に破られるシステムと、攻撃に対してはるかに耐性のあるシステムとの違いを生み出します。

つまり、塩は パスワードハッシュを予測不可能にする重要な要素ハッシュアルゴリズムを適用する前にランダムデータを追加することで動作するため、2人のユーザーが同じパスワードを使用していても、データベースに保存される結果は異なります。Linuxにおける具体的な実装、/etc/shadowとの関係、mkpasswdなどのツール、そして最新のセキュリティのベストプラクティスは、それ自体が全く異なる世界であり、ここでは詳細に検討していきます。

パスワード ハッシュのソルトとは何でしょうか?

パスワードハッシュにおけるソルトの定義

暗号学では、 (塩)は ランダムな文字列 ハッシュ関数を適用する前に、ユーザーのパスワードに追加されます。このハッシュ関数の目的は、平文のパスワードが複数のユーザーで同じであっても、結果として得られるハッシュが一意となるようにすることです。

ユーザーがパスワードを作成または変更すると、システムは ランダムソルトこれをパスワードと組み合わせ(スキームに応じて前、後、または特定の形式で)、その組み合わせにハッシュアルゴリズムを適用します。 SHA-256 o SHA-512パスワードはデータベースに保存されるのではなく、 (パスワード + ソルト)のハッシュほとんどのスキームでは、ソルト自体もハッシュとともに保存されます。

この技術により、 事前に計算されたハッシュに基づく攻撃手法レインボーテーブルのようなアルゴリズムを採用し、大規模な辞書攻撃やブルートフォース攻撃を非常に困難にします。攻撃者は、複数のユーザーがパスワードを共有しているという事実を悪用できなくなります。なぜなら、各ユーザーが異なるハッシュを持つようになるからです。

塩自体は秘密ではないことを理解することが重要です。 パスワードや秘密鍵ではないその機能はハッシュ処理にランダム性と一意性を導入することです。セキュリティは依然として、 強力なパスワード y 適切なハッシュアルゴリズム多くの従来の Linux システムでは SHA-256 または SHA-512 のバリアントが使用されていますが、パスワード専用に設計されたもの (bcrypt、scrypt、Argon2 など) が望ましいです。

パスワードソルトの仕組みを段階的に解説

パスワードソルトの仕組み

塩漬けのプロセスは、一連のかなり単純なステップにまとめることができますが、 セキュリティに大きな影響:

  Process ExplorerとVirusTotalで悪意のあるプロセスを検出する方法

まず、ユーザーがパスワードを登録または変更すると、システムは ユニークでランダムな塩 当該資格情報用のソルトは通常、十分な長さ(例えば16バイト以上)で、暗号的に安全な乱数ジェネレータから取得されます。

次に、ユーザーが選択したパスワードがそのソルトと組み合わされて 中間鎖この組み合わせは、ソルトとパスワードを連結するだけの単純なものから、ハッシュスキームによって定義されたより複雑な形式まで様々です。重要なのは、各ユーザーが最終的に異なる組み合わせを使用することです。

その後、 一方向ハッシュアルゴリズム結果として、固定長の一見ランダムな文字列(ハッシュ)が生成され、ソルトとともにデータベースに保存されます。現代のシステムでは、ハッシュを生成するアルゴリズムが求められています。 長くて複雑な出口これにより、検索空間が拡大し、ブルートフォース攻撃のコストが高くなります。

最後に、ユーザーがログインすると、システムは入力されたパスワードを再度取得します。 関連塩 データベースから、全く同じ結合とハッシュ化のプロセスを繰り返し、その結果を保存されているハッシュと比較します。一致すれば、平文を知らなくてもパスワードが正しいと判断できます。

このメカニズムにより、データベースが漏洩した場合でも、攻撃者は 独自のソルトを持つ個々のハッシュ比較可能なハッシュのセットの代わりに攻撃を阻止することは魔法ではありませんが、計算コストが大幅に高くなります。

パスワードハッシュでソルトを使用する利点

パスワードにソルトを使用する利点

塩漬けを使用する主な理由は 保存されたパスワードのセキュリティを強化します 多種多様な攻撃から保護します。しかし、具体的なメリットを詳しく説明する価値はあります。

まず、塩漬けは 辞書攻撃への耐性ソルトがなければ、攻撃者は一般的なパスワードとそのハッシュの膨大なリストを作成し、盗んだデータベースと比較するだけで済みます。ユーザーごとに固有のソルトがあれば、パスワードとソルトの組み合わせごとに異なる値が生成され、事前に計算されたハッシュは役に立たなくなります。

第二に、塩の使用は レインボーテーブルこれらは、一般的なパスワードのハッシュ値を事前に計算して復元を高速化するデータベースです。繰り返しになりますが、結果は特定のソルトに依存するため、ソルトなしのハッシュ用に設計されたこれらのテーブルは役に立たないか、少なくとも非常に非効率的です。

もう一つの明らかな利点は、 漏洩した場合のプライバシーたとえ侵入者がハッシュとソルトを使ってユーザーテーブルにアクセスできたとしても、誰が他のユーザーと同じパスワードを使用しているかをすぐに特定したり、簡単に大規模な攻撃を仕掛けたりすることはできません。各アカウントには個別に対応する必要がありますが、これは通常、大規模なシステムでは現実的ではありません。

  新たなWhatsApp詐欺の警告:Bizumとビデオ通話でアカウントと金銭を盗む

さらに、塩を加えることで、 ブルートフォース攻撃攻撃者は、候補パスワードをすべてのハッシュに対して一度にテストする代わりに、各ユーザーのソルトを考慮する必要があり、全体的な作業負荷が増加します。これに、低速でパラメータ化可能なハッシュアルゴリズム(bcryptやArgon2など)を組み合わせると、攻撃コストはさらに増大します。

最後に、ソルトは技術の進化に適応しやすい手法です。コンピューター機器が進化し、新たな攻撃が登場しても、 強力なハッシュとユニークなソルトの組み合わせ 難易度は高くスケーラブルに維持されており、ソルトの長さを増やしたり、アルゴリズムを強化したり、計算コストを増やしたりすることができます。

Linux がパスワードソルトを実装する方法 (/etc/shadow)

Linuxシステムや他の*NIX系システムでは、ユーザーのパスワードは/etc/passwdではなく、ファイルに保存されます。 / etc / shadowこのファイルはスーパーユーザーのみがアクセスでき、パスワード ハッシュと追加情報を保存し、ソルトとハッシュ アルゴリズムの使用が明確にわかる場所です。

/etc/shadow 内の行は次のような構造になっています:

ユーザー:$id$sal$hash:追加のフィールド…

象徴 $ 異なる部分を分けてください。ユーザー名の後の最初の部分は、 アルゴリズムの種類 使用される。例えば、 $ $ 1 通常はMD5を表します。 $ $ 5 SHA-256と $ $ 6 SHA-512 は、DES や MD5 に基づく古い方式よりも高いセキュリティを提供するため、最近のディストリビューションで最も一般的なアルゴリズムです。

アルゴリズム識別子が表示された後、 サラノキそして 結果のハッシュこれらはすべて同じフィールド内にあります。パスワードが検証されると、システムはその識別子(ソルト)を読み取り、入力されたパスワードに対応するアルゴリズムを適用し、計算されたハッシュと保存されているハッシュを比較します。

どのユーザーが暗号化されたパスワードを持っているか、またどのようなアルゴリズムが使用されているかを素早く調べたい場合は、次のようなコマンドを使用できます。 grep '\$' /etc/shadowこの文脈では、ドル記号($)は、現代形式のハッシュを含む行を見つけるために使用されます。この記号は正規表現では「行末」を意味するため、バックスラッシュでエスケープする必要があります。

パスワードのないアカウントやロックされたアカウントでは、通常、そのフィールドに次のような値が表示されます。 ! o * ドルを含むハッシュではなく、通常のパスワードでは認証できないことを示しています。この構造から、1つのことが明らかになります。 Linuxはソルトをフォーマットに統合している ストレージ パスワード ネイティブに。

パスワードハッシュとソルトの違い

混同されることもある次の 2 つの概念を明確に区別することが重要です。 ハッシュ y 塩漬けパスワードハッシュとは、一方向アルゴリズムを用いてパスワードを認識できない値に変換するプロセスです。サーバーは元のパスワードを知る必要はなく、同じハッシュを生成することでユーザーが正しいパスワードを知っていることを確認するだけで済みます。

  WINUXとは:自由な魂とWindowsのルック&フィールを備えたLinux

問題は、2つのパスワードが同一である場合、 塩なしハッシュも同様ですこれにより、攻撃者はパスワードでユーザーを比較・グループ化したり、事前に計算されたテーブルを使用したりすることが可能になります。さらに、ハッシュアルゴリズムが高速でデータの整合性を重視して設計されている場合(シンプルなSHA-256など)、大規模なブルートフォース攻撃に対してより脆弱になります。

塩漬けはまさにその弱点を解決するために登場します。 パスワードにランダムなデータを追加する ハッシュ化前に、この文字列をハッシュします。その結果、2人のユーザーがパスワードとして「casa」を選択した場合でも、データベース内のハッシュは全く異なるものになります。例えば、一方のユーザーは「casa+7Ko#」を、もう一方のユーザーは「casa8p?M」をハッシュ前の文字列として持つことになるからです。

このように、ハッシュとソルトは競合するのではなく、むしろ補完し合う関係にあります。ハッシュは 一方向性特性 検証の容易さ;塩は 大規模攻撃に対する独自性と耐性安全なパスワード保存の実装では、両方の手法を組み合わせ、理想的にはこの目的のために設計されたアルゴリズムと構成可能なコストを使用します。

Linuxでmkpasswdを使ってソルトを使う

GNU/Linux環境やその他のシステム Unixの塩漬けを実験する非常に実用的な方法は、 mkpasswdこのコマンドは生成に使用されます 暗号化されたパスワード 安全に実行され、ユーザー作成プロセスや管理スクリプトなどに統合されるのが一般的です。

mkpasswdの基本構文では、暗号化するパスワードと、オプションを使用してアルゴリズムの種類(たとえば、des、md5、sha-256、sha-512)などの一連のオプションを指定できます。 -m現代のシステムでは、賢明な選択は SHA-512 少なくとも、ディストリビューションがサポートしている場合はさらに強力なスキームによって保護されます。

塩漬けの文脈で特に興味深い選択肢は -S、それは可能にします 塩を加える パスワードを暗号化する前に、手動で指定する必要があります。手動で指定しない場合、mkpasswdは 各実行におけるランダムソルト同じログインパスワードを使用しても、結果のハッシュは毎回異なります。

これは簡単に確認できます。SHA-512とランダムなソルトを使用して、mkpasswdで「password123」を複数回暗号化すると、全く異なるハッシュが得られます。しかし、-Sオプションを使用して同じソルト値を渡すと、パスワードとソルトの組み合わせは変わらないため、ハッシュは常に同一になります。

このツールのおかげでとても簡単です ソルトで暗号化されたパスワードを準備する 設定ファイルに追加したり、ユーザーを手動で管理したり、何もプログラムせずにソルト動作をテストしたりできます。

デジタル衛生とは何ですか?
関連記事
デジタル衛生:オンライン生活における安全、幸福、秩序