SHA パスワードハッシュ
関連記事
セキュアハッシュアルゴリズム(SHA)は、さまざまなハッシュ関数のセットで、広範な用途に頻繁に使用されます。
Arch Linux での SHA ハッシュ関数の使用例には以下があります:
- Arch Linux ISO と パッケージの整合性確認
- git を使用したソフトウェアのリビジョン固定
- 例えばディスク暗号化のための暗号化キーのセキュリティと確認
- 例えば btrfs のファイルシステムのデータ整合性とリソース管理
- セキュリティ#パスワードのハッシュおよびこの記事に記載された 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
/etc/pam.d/passwd
のパスワードオプションに関する詳細な説明については、pam_unix(8) のマニュアルページをご覧ください。
使用方法
暗号化設定を変更した後でも、パスワードは自動的には再ハッシュされません。これを修正するためには、すべてのユーザーのパスワードをリセットして再ハッシュさせる必要があります。
rootとして以下のコマンドを実行します。
# passwd username
ここで、username
はパスワードを変更するユーザーの名前です。その後、現在のパスワードを再入力すると、パスワードが再ハッシュされます。
パスワードが再ハッシュされたことを確認するためには、root として /etc/shadow
ファイルを確認します。SHA-256 でハッシュ化されたパスワードは $5
で始まり、SHA-512 でハッシュ化されたパスワードは $6
で始まり、yescrypt ハッシュは $y
で始まります。