/etc/shadowでのパスワードのハッシュ化
今回は、/etc/shadowのハッシュ値がどのようなものか解説します。【連載コラム:Linuxシステム管理標準教科書を読む(33)】
Linuxの基本的なスキルを習得したら、Linuxサーバーをシステムとして長期に運用管理していくためのスキルを身につけるのはいかがでしょうか。このコラムでは、「Linuxシステム管理標準教科書」の全体調整を担当した筆者が改めて大切なポイントを解説していきます。
Linuxのユーザーパスワードは、/etc/shadowにハッシュ化されて保存されています。ハッシュはパスワードからハッシュ化を行った値で、暗号化された情報が復号できるのに対してハッシュ値は元に戻すのが難しいため、パスワードのような情報の保存に向いています。/etc/shadowのハッシュ値がどのようなものか解説します。
ハッシュ化とは
ハッシュ化とは、暗号の一種と考えられていますが、厳密な定義でいえば暗号化とハッシュ化は異なる物です。暗号は、元の情報を暗号化することで第三者が読めなくするものですが、復号することで元の情報に戻すことができます。暗号化したり、復号したりする際の方法に、共通鍵を使ったり、秘密鍵・公開鍵を使ったりするなど、様々な暗号化の手法があります。
一方、ハッシュ化は、一方向性関数とも呼ばれるハッシュ関数を使って元の情報をハッシュ値に変更します。ハッシュ値から元の情報に戻す解読は相当困難なため、パスワードを推測してハッシュ化を行いハッシュ値と比較する総当たり攻撃が有効な手段となり、パスワードを破るのが難しくなっています。
/etc/shadowのハッシュ値を見る
それでは、/etc/shadowのハッシュ値を見てみましょう。
$ sudo cat /etc/shadow | grep linuc
linuc:$6$rounds=100000$LJ9X08ZYN/zXIRaf$MlFDUV8wemu1kcBDCmfR0kt0d7thdFo7Y9dZ9sKHlG6ua8TrIcMmrHkN3IGdSwFtHaW1sKdNINZtAXNAlmzl.:20289:0:99999:7:::
:と$でいくつかの項目に区切られている、MCF(Modular Crypt Format)という書式になっています。$6で始まる部分がハッシュ値です。意味は以下の通りです。
6:ハッシュ方式。6はSHA-512
rounds=100000:パスワードのハッシュ化を繰り返す回数。大量に繰り返すことで一方向性を高めると共に、総当たり攻撃の際の計算量と時間を多くすることで攻撃者側の負担とかかる時間を増やします。
LJ9X08ZYN/zXIRaf:SALTと呼ばれる、元の情報であるパスワードに付加し、情報を長くする役割を持つ情報。ランダムかつ長いので、同じパスワードでも異なるハッシュ値を生成することになる。
ソルトの意味
ハッシュ化は一方向性ハッシュ関数を使って行うため、ランダム性がないので同じパスワードからは同じハッシュ値が生成されます。そのため、同じハッシュ値が存在するとパスワードも同じであると推測できます。同じパスワードが存在するということは、よくあるパスワードが使われている可能性が高く、攻撃者側の総当たり攻撃の効率を高める結果となります。そこでパスワードにソルト(塩)を付加しパスワードのランダム性を高めることで、同じハッシュ値が生成されることを防いでいます。
ただし、ハッシュ値は可搬性を考えてパスワードのハッシュ値と同じ/etc/shadowに保管しているため、攻撃者も参照できてしまいます。そこでソルトとは別の値をハッシュ値とは別に用意して強化する手法をペッパー(胡椒)と呼びます。ペッパーを使うとセキュリティがより強固になりますが、情報の可搬性が低くなります。
パスワードは安全か?
このように、パスワードのハッシュ化も、昔使われていたMD5からSHA-512のようなより強力なハッシュ関数に置き換わっています。しかし、総当たり攻撃が可能であることは間違いなく、時間をかけることでパスワードを破ること自体は可能です。今後、パスワードのみの認証は少しずつ少なくなり、証明書認証(例:SSHの公開鍵認証)や二要素認証(例:ワンタイムパスワード)などが増えていくでしょう。
/etc/shadowのパスワードハッシュ化について解説しましたが、これを機会にパスワード認証以外の認証方式についても理解を深めてください。
- 筆者紹介
宮原 徹 氏
Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。
<Linuxシステム管理標準教科書とは>
「Linuxシステム管理標準教科書」(システム管理教科書)は2015年4月にリリースされた標準教科書シリーズの1冊です。Linuxシステムの運用管理という観点で書かれており、システム管理者という業務において知っておかなければならない基本的なトピックが解説されています。「Linux標準教科書」「Linuxサーバー構築標準教科書」でコマンド操作やサーバー構築の基本を学んだら、このシステム管理教科書を読んで、単にLinuxを使うのではなく、システムとして長期的に管理運用していくためのスキルを身につけてください。
バックナンバー
第32回:EPELを使う
第31回:インストールISOイメージをリポジトリにする方法
第30回:dnfコマンドのモジュールを使ってみる
第29回:DNFを使ってみる
第28回:DNFについて