「SHA パスワードハッシュ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(カテゴリを修正)
(同期)
 
(他の1人の利用者による、間の1版が非表示)
4行目: 4行目:
 
{{Related|セキュリティ#パスワードのハッシュ}}
 
{{Related|セキュリティ#パスワードのハッシュ}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
[[Wikipedia:Secure Hash Algorithms|セキュアハッシュアルゴリズム]](SHA)は、さまざまな[[Wikipedia:Cryptographic_hash_function|ハッシュ関数]]のセットで、広範な[[wikipedia:Cryptographic_hash_function#Applications|用途]]に頻繁に使用されます。
   
  +
Arch Linux での SHA ハッシュ関数の使用例には以下があります:
Secure Hash Algorithms (SHA) は[[Wikipedia:ja:暗号学的ハッシュ関数|ハッシュ関数]]の一群です。よくパスワードの暗号化に使われます。デフォルトで Arch は SHA-512 を使ってパスワードを暗号化しますが、他の環境では旧式の [[Wikipedia:ja:MD5|MD5]] アルゴリズムがいまだに使われていることもあります。この記事ではパスワードのセキュリティを堅牢にする方法を説明します。
 
   
  +
* [https://archlinux.org/download/#checksums Arch Linux ISO] と [[PKGBUILD#Integrity|パッケージ]]の整合性確認
== MD5 に対する SHA-2 の利点 ==
 
  +
* [[Git#Revision selection|git]] を使用したソフトウェアのリビジョン固定
  +
* 例えば[[dm-crypt/デバイスの暗号化#dm-crypt の暗号化オプション|ディスク暗号化]]のための暗号化キーのセキュリティと確認
  +
* 例えば [[Btrfs#Scrub|btrfs]] のファイルシステムのデータ整合性とリソース管理
  +
* [[セキュリティ#パスワードのハッシュ]]およびこの記事に記載された SHA ハッシュによるパスワード確認
   
  +
== SHA パスワードハッシュ ==
Linux ディストリビューションではパスワードは基本的にハッシュ化されて {{ic|/etc/shadow}} ファイルに保存されます。MD5 ハッシュ関数は既に[[Wikipedia:MD5#Collision_vulnerabilities|衝突攻撃]]によって破ることができます。パスワードをハッシュ化する手段として MD5 がセキュアでないということを直ちに意味するわけではありませんが、より堅牢で強固なアルゴリズムを使用することが推奨されます (例: SHA-512)。
 
   
  +
デフォルトでは、Arch Linux は {{pkg|shadow}} パッケージのリリースで4.1.4.3-3 ([https://bugs.archlinux.org/task/13591#comment85993 バグ13591]) から4.14.0まで、パスワードに [[wikipedia:SHA-2|SHA-512]] を使用していました ([https://archlinux.org/news/changes-to-default-password-hashing-algorithm-and-umask-settings/ yescrypt] に置き換えられる前) これは、[[Wikipedia:MD5|MD5]] ハッシュ関数を置き換えたもので、MD5 は[[Wikipedia:MD5#Collision_vulnerabilities|衝突脆弱性]]によって危険であることが判明しています。詳細については [[wikipedia:Secure Hash Algorithms#Comparison of SHA functions]] をご覧ください。
以下のチュートリアルでは米国の国家安全保障局 (NSA) によって Red Hat Enterprise Linux 5 での使用が推奨されていた SHA-512 ハッシュ関数を用います。[[Wikipedia:ja:SHA-2|SHA-2]] にはダイジェスト長が 224, 256, 384, 512 ビットのハッシュ関数が存在します。
 
   
  +
=== 設定 ===
== セキュリティを高める ==
 
   
  +
SHA-512 パスワードハッシュは、[[Wikipedia:Key stretching|キー強化]]を改善するために、{{ic|1=rounds=N}} オプションで設定できます。例えば、{{ic|1=rounds=65536}} という設定は、攻撃者が {{ic|/etc/shadow}} のパスワードファイルのハッシュに対してテストするたびに65536回のハッシュ計算を行わなければならないことを意味します。
{{Note|1={{pkg|shadow}} 4.1.4.3-3 から新しいパスワードを設定するとデフォルトで ''sha512'' が使われます ([https://bugs.archlinux.org/task/13591#comment85993 bug 13591] を参照)。}}
 
   
  +
そのため、攻撃者は65536倍の遅延を受けます。これにより、コンピュータはログインのたびに65536回のハッシュ計算を行う必要がありますが、遅いコンピュータでもそれには1秒未満しかかかりません。
4.1.4.3-3 (2011年11月26日) 以前のバージョンの {{pkg|shadow}} でパスワードを設定した場合、パスワードは MD5 でハッシュ化されています。SHA-512 ハッシュを使うには ''passwd'' でパスワードを変更してください。
 
   
  +
{{pkg|pam}} のリリース1.6.0以降、SHA-512 の {{ic|rounds}} オプションは、{{ic|/etc/login.defs}} ファイルを編集して {{ic|SHA_CRYPT_MAX_ROUNDS}} パラメータに値を設定するか、{{ic|/etc/pam.d/passwd}} を編集して適切な値で {{ic|rounds}} を追加することで設定できます。[https://github.com/linux-pam/linux-pam/pull/642/commits/8d082da1bc993b5b061ae81a9743891328e04ce6]
{{Note|以下のファイルを編集するには root 権限が必要です。}}
 
   
  +
もし {{ic|rounds}} オプションを使用しない場合、PAM は {{ic|/etc/login.defs}} でコメントされた {{ic|5000}} ラウンドの例とは異なる[https://github.com/linux-pam/linux-pam/blob/1e2c6cecf81dcaeea0c2c9d37bc35eea120cd77d/modules/pam_unix/support.c#L222-L241C15デフォルト]を使用します。
{{ic|1=rounds=N}} オプションを使うことで[[Wikipedia:Key stretching|キーストレッチング]]を設定できます。ラウンド数はハッシュ関数の選択よりもセキュリティに大きな影響を与えます。例えば {{ic|1=rounds=65536}} と設定した場合、攻撃者は {{ic|/etc/shadow}} に書かれたハッシュからパスワードを弾き出すのに65536個のハッシュを計算する必要があります。つまり攻撃するのにかかる時間が65536倍になります。また、コンピュータにログインするたびに65536個のハッシュを計算しなくてはならなくなります。ただし低速なコンピュータでも1秒もかかりません。{{ic|rounds}} オプションを使用しなかった場合、glibc は SHA-512 のデフォルトとしてラウンド数を '''5000''' にします。{{ic|rounds}} オプションのデフォルト値は {{ic|sha512-crypt.c}} にあります。
 
   
  +
例えば、次のように設定できます:
テキストエディタで {{ic|/etc/pam.d/passwd}} を開いてアンコメントされた最後の行に {{ic|rounds}} を追加してください。行を変更すると以下のようになります:
 
  +
{{hc|/etc/pam.d/passwd|2=
  +
password required pam_unix.so sha512 shadow nullok '''rounds=65536'''
  +
}}
   
  +
{{warning|上記の例のようにハッシュを {{ic|sha512}} で明示的に設定すると、その後の ''passwd'' コマンド実行でデフォルトの {{ic|yescrypt}} ハッシュが上書きされます。}}
password required pam_unix.so sha512 shadow nullok '''rounds=65536'''
 
   
{{note|{{ic|/etc/pam.d/passwd}} のパスワードオプションに関する詳しい解説は [https://linux.die.net/man/8/pam_unix PAM man ページ] 読んでください。}}
+
{{ic|/etc/pam.d/passwd}} のパスワードオプションに関する詳細な明について、{{man|8|pam_unix}}マニュアルページをご覧ください。
   
  +
=== 使用方法 ===
== パスワードの再ハッシュ化 ==
 
   
暗号化設定を変更しも、パスワードは自動的には再ハッシュされません。再ハッシュ化するには、てのユーザーパスワードを再設定する必要があります。
+
暗号化設定を変更した後でも、パスワードは自動的には再ハッシュされません。これを修正するためには、すべてのユーザーパスワードをリセットしてハッシュさせる必要があります。
   
root以下のコマンドを実行してください:
+
rootとして以下のコマンドを実行します。
   
 
# passwd ''username''
 
# passwd ''username''
   
{{ic|''username''}} はパスワードを変更するユーザーの名前に置き換えてください。現在のパスワードを入力すると、SHA-2 関数で再ハッシュされます。
+
ここで、{{ic|''username''}} はパスワードを変更するユーザーの名前ですその後、現在のパスワードを入力すると、パスワードが再ハッシュされます。
   
パスワードが再ハッシュされた確認するには、root {{ic|/etc/shadow}} ファイルをチェックてください。SHA-256 でハッシュ化されたパスワードは {{ic|$5}} から始まり、SHA-512 でハッシュ化されたパスワードは {{ic|$6}} から始まります。
+
パスワードが再ハッシュされたことを確認するためには、root として {{ic|/etc/shadow}} ファイルを確認ます。SHA-256 でハッシュ化されたパスワードは {{ic|$5}} 始まり、SHA-512 でハッシュ化されたパスワードは {{ic|$6}} で始まり、yescrypt ハッシュは {{ic|$y}} で始まります。
 
== 既知の問題 ==
 
 
=== fgetty ===
 
 
Arch Linux はデフォルトで SHA-512 によってパスワードをハッシュ化します (2011年11月26日以降)。ミニマルなターミナルマネージャである ''fgetty'' はデフォルトでは SHA-512 パスワードに対応していません。デフォルトの ''fgetty'' で SHA-512 を有効にすると締め出されてしまいます。''fgetty'' にパッチを当てて SHA-512 のサポートを追加したバージョンが [[AUR]] の {{AUR|fgetty-pam}}{{Broken package link|{{aur-mirror|fgetty-pam}}}} パッケージでインストールできます。
 

2025年3月3日 (月) 05:56時点における最新版

関連記事

セキュアハッシュアルゴリズム(SHA)は、さまざまなハッシュ関数のセットで、広範な用途に頻繁に使用されます。

Arch Linux での SHA ハッシュ関数の使用例には以下があります:

SHA パスワードハッシュ

デフォルトでは、Arch Linux は shadow パッケージのリリースで4.1.4.3-3 (バグ13591) から4.14.0まで、パスワードに SHA-512 を使用していました (yescrypt に置き換えられる前) これは、MD5 ハッシュ関数を置き換えたもので、MD5 は衝突脆弱性によって危険であることが判明しています。詳細については wikipedia:Secure Hash Algorithms#Comparison of SHA functions をご覧ください。

設定

SHA-512 パスワードハッシュは、キー強化を改善するために、rounds=N オプションで設定できます。例えば、rounds=65536 という設定は、攻撃者が /etc/shadow のパスワードファイルのハッシュに対してテストするたびに65536回のハッシュ計算を行わなければならないことを意味します。

そのため、攻撃者は65536倍の遅延を受けます。これにより、コンピュータはログインのたびに65536回のハッシュ計算を行う必要がありますが、遅いコンピュータでもそれには1秒未満しかかかりません。

pam のリリース1.6.0以降、SHA-512 の rounds オプションは、/etc/login.defs ファイルを編集して SHA_CRYPT_MAX_ROUNDS パラメータに値を設定するか、/etc/pam.d/passwd を編集して適切な値で rounds を追加することで設定できます。[1]

もし rounds オプションを使用しない場合、PAM は /etc/login.defs でコメントされた 5000 ラウンドの例とは異なる[2]を使用します。

例えば、次のように設定できます:

/etc/pam.d/passwd
password	required	pam_unix.so sha512 shadow nullok rounds=65536
警告: 上記の例のようにハッシュを sha512 で明示的に設定すると、その後の passwd コマンド実行でデフォルトの yescrypt ハッシュが上書きされます。

/etc/pam.d/passwd のパスワードオプションに関する詳細な説明については、pam_unix(8) のマニュアルページをご覧ください。

使用方法

暗号化設定を変更した後でも、パスワードは自動的には再ハッシュされません。これを修正するためには、すべてのユーザーのパスワードをリセットして再ハッシュさせる必要があります。

rootとして以下のコマンドを実行します。

# passwd username

ここで、username はパスワードを変更するユーザーの名前です。その後、現在のパスワードを再入力すると、パスワードが再ハッシュされます。

パスワードが再ハッシュされたことを確認するためには、root として /etc/shadow ファイルを確認します。SHA-256 でハッシュ化されたパスワードは $5 で始まり、SHA-512 でハッシュ化されたパスワードは $6 で始まり、yescrypt ハッシュは $y で始まります。