第3章 暗号化

保護する必要のあるデータには、静止しているデータと移動中のデータの主に 2 種類があります。これらの異なる種類のデータは同じ技術を用いて同じ方法で保護されますが、セキュリティの実装方法は完全に異なる場合があります。同じ情報でもさまざまな時点で静止中になったり移動中になったりする場合があるので、単一のセキュリティ実装で、すべての起こりうる危険を防ぐことはできません。

3.1. 静止しているデータ

静止しているデータとは、ハードディスク、テープ、CD、DVD、ディスクおよびその他のメディアに保存されているデータのことです。この情報に対する最大の脅威は、物理的な盗難です。空港で使用されるノートパソコン、郵便物内の CD および安全でない場所に残されたバックアップテープなどは、盗難によってデータが侵害される可能性のある例です。ただし、それらのメディア上でデータが暗号化されている場合は、データがアクセスされる可能性は低くなります。

3.1.1. ディスク全体の暗号化

ディスク全体の暗号化またはパーティションの暗号化は、データを保護する最良の方法の 1 つです。それぞれのファイルが保護されるだけでなく、これらのファイルの一部を含んでいる可能性のある一時的なストレージも保護されます。ディスク全体の暗号化によってすべてのファイルが保護されるので、保護する部分を選択したりファイルを見落とす可能性について心配する必要がありません。
Red Hat Enterprise Linux 6 は、LUKS 暗号化をネイティブにサポートします。LUKS は、コンピューターがオフの間にデータを保護するように、ハードディスクのパーティションをバルク暗号化します。これにより、攻撃者がコンピューターにシングルユーザーモードを使用してログインしようとしたり、その他の方法でアクセス権を得ようとしたりすることからコンピューターを保護します。
LUKS のようなディスク全体の暗号化ソリューションは、コンピューターがオフの時にのみデータを保護します。コンピューターがオンになり、LUKS がディスクの暗号化を解除すると、ディスクにあるファイルはそれらに普通にアクセスできるすべての人が利用できるようになります。コンピューターがオンの時にファイルを保護するには、ファイルベースの暗号化などの他のソリューションと組み合わせてディスク全体の暗号化を使用します。また、コンピューターから離れる際はロックすることを忘れないようにしてください。コンピューターを数分間使用しないとパスフレーズ付きのスクリーンセーバーがアクティブになるように設定するのも、侵入者を防ぐ上で優れた方法です。LUKS についての詳細は、「LUKS のディスク暗号化」を参照してください。

3.1.2. ファイルベースの暗号化

ファイルベースの暗号化は、CD やフラッシュドライブ、外付けハードドライブなどのモバイルのストレージデバイスにあるファイルのコンテンツを保護するために使用します。ファイルベースの暗号化ソリューションの中には暗号化されたファイルの残りをコンピューターにそのまま残すものがあり、この場合は攻撃者がコンピューターに物理的にアクセスし、これらのファイルを復元する可能性があります。コンピューターにアクセスする可能性のある攻撃者からそれらのファイルのコンテンツを保護するには、ディスク全体の暗号化などの他のソリューションと組み合わせてファイルベースの暗号化を使用してください。

3.1.3. LUKS のディスク暗号化

Linux Unified Key Setup-on-disk-format (または LUKS) を使うと、Linux コンピューター上のパーティションを暗号化できます。これは特に、モバイルコンピューターやリムーバブルメディアを使う際に重要です。LUKS は、複数のユーザーキーを使って、パーティションのバルク暗号化に使用されるマスターキーの暗号化解除をできるようにします。

LUKS の概要

LUKS の機能
  • LUKS はブロックデバイス全体を暗号化するため、脱着可能なストレージメディアやノート PC のディスクドライブといった、モバイルデバイスのコンテンツ保護に適しています。
  • 暗号化されたブロックデバイスにあるのは任意のコンテンツです。これは、スワップデバイスの暗号化に役立ちます。また、とりわけデータストレージ用にフォーマットしたブロックデバイスを使用する特定のデータベースに関しても有用です。
  • LUKS は、既存のデバイスマッパーカーネルサブシステムを使用します。
  • LUKS はパラフレーズの強化を提供し、辞書攻撃から保護します。
  • LUKS デバイスには複数のキースロットが含まれ、ユーザーはこれを使ってバックアップキー/パスフレーズを追加できます。
LUKS でできない こと:
  • LUKS は、多くのユーザー (9 人以上) が同一デバイスに対して別々のアクセスを持つことが必要となるアプリケーションには適していません。
  • LUKS は、ファイルレベルの暗号化を必要とするアプリケーションには適していません。

3.1.3.1. Red Hat Enterprise Linux での LUKS 実装

Red Hat Enterprise Linux 6 は、LUKS を使ってファイルシステムの暗号化を実行します。デフォルトではインストール時に、ファイルシステムを暗号化するオプションのチェックが外されています。ハードディスクを暗号化するオプションを選択すると、コンピューターを起動するたびにパスフレーズを尋ねられます。このパスフレーズは、パーティションの暗号化を解読するために用いられるバルク暗号化鍵を「ロック解除」します。デフォルトのパーティションテーブルの変更を選択すると、暗号化するパーティションを選択できます。この設定は、パーティションテーブル設定で行われます。
LUKS に使用されるデフォルトの暗号 (cryptsetup --help を参照) は aes-cbc-essiv:sha256 です。インストールプログラムの Anaconda は、デフォルトでは XTS モード (aes-xts-plain64) で AES 暗号を使用することに注意してください。LUKS のデフォルトの鍵のサイズは 256 ビット です。Anaconda (XTS モード) と併用する場合の LUKS のデフォルトの鍵のサイズは 512 ビット です。

警告

デフォルトの暗号化属性を変更すると、システムパフォーマンスに影響を及ぼし、システムを様々なセキュリティリスクにさらす可能性があります。暗号作成に関して十分な知識がなく、使用される暗号法の組み合わせについての機能を理解していない場合は、システムのデフォルトの暗号化属性を変更しないでください。
Red Hat では、デフォルトの暗号の使用を強く推奨しています。デフォルトの暗号以外を使う必要がある場合は、--cipher および --key-size のオプションでパーティションを初期化できます。このコマンドの構文は、以下のようになります。
cryptsetup --verify-passphrase --cipher <cipher>-<mode>-<iv> --key-size <key-size> luksFormat <device>
ここでの <cipher>-<mode>-<iv> は、使用されている暗号法を示す文字列になります。この文字列は、ブロック暗号、ブロック暗号モード、初期ベクトル(IV) の 3 つで構成されます。
ブロック暗号は、データブロック上で作動してバルクデータの暗号化と暗号化解除を可能にする、決定性アルゴリズムです。Red Hat Enterprise Linux で使用可能なブロック暗号は、以下のとおりです。
  • AES — Advanced Encryption Standard (高度暗号化標準) は、128、192、および 256 ビットの暗号化鍵を使用する 128 ビットの対称ブロック暗号です。詳細は、FIPS PUB 197 を参照してください。
  • Twofish — 128 から 256 ビットまでの暗号化鍵で作動する 128 ビットのブロック暗号です。
  • Serpent — 128、192、および 256 ビットの暗号化鍵を使用する 128 ビットのブロック暗号です。
  • cast5 — 40 から 128 ビットまでの暗号化鍵をサポートする 64 ビットの Feistel 暗号です。詳細は、RFC 2144 を参照してください。
  • cast6 — 128、160、192、224、または 256 ビットのいずれかの暗号化鍵を使用する 128 ビットの Feistel 暗号です。詳細は、RFC 2612。を参照してください。
ブロック暗号モードは、データを確実に暗号化または暗号解除するためにバルクデータにブロック暗号を繰り返し適用する方法を記述します。以下のモードが使用できます。
  • CBC — Cipher Block Chaining。詳細は、NIST SP 800-38A。を参照してください。
  • XTS — XEX Tweakable Block Cipher with Ciphertext Stealing。詳細は、 IEEE 1619 または NIST SP 800-38E。を参照してください。
  • CTR — Counter。詳細は、NIST SP 800-38A を参照してください。
  • ECB — Electronic Codebook。詳細は、NIST SP 800-38A を参照してください。
  • CFB — Cipher Feedback。詳細は、NIST SP 800-38A を参照してください。
  • OFB — Output Feedback。詳細は、NIST SP 800-38A を参照してください。
初期ベクトルは、暗号文の無作為化に使用されるデータのブロックです。IV により、同一のプレーンテキストを繰り返し暗号化しても異なる暗号文の出力が保証されます。IV は、同一の暗号鍵と再利用しないでください。CBC モードの暗号では、IV は 予測不可能である必要があります。そうでない場合は、システムは電子透かしに対する特定の攻撃に弱くなってしまいます (詳細は LUKS/cryptsetup FAQ を参照)。Red Hat では、AES と以下の IV を使用することを推奨しています。
  • ESSIV — Encrypted Salt-Sector Initialization Vector - この IV は、CBC モードの暗号に使用してください。デフォルトのハッシュである sha256 を使用すべきです。
  • plain64 (または plain) — IV sector offset - この IV は、XTS モードの暗号に使用してください。
使用される暗号鍵の長さを指定することもできます。鍵のサイズは、使用されるブロック暗号とブロック暗号モードの組み合わせによって異なります。鍵の長さが指定されないと、LUKS は決まった組み合わせでデフォルト値を使用します。たとえば、CBC モードで AES に 128 ビットの鍵を使用することにすると、LUKS は AES-128 実装を使用してパーティションを暗号化します。一方、XTS モードで AES に 512 ビットを指定すると、AES-256 実装が使用されます。XTS モードでは 2 つの鍵が使用されることに注意してください。ひとつ目は調整可能な暗号化に、2 つ目は通常の暗号化用に決められます。

3.1.3.2. 手動によるディレクトリーの暗号化

警告

以下の手順を実行すると、暗号化しているパーティションの既存データがすべて削除されます。すべての情報が失われてしまうので、この手順を開始する前に、外部ソースへのデータのバックアップを必ず行なってください。
  1. root としてシェルプロンプトに以下を入力し、ランレベル 1 に入ります。
    telinit 1
  2. 既存の /home のマウントを解除します。
    umount /home
  3. 直前の手順のコマンドが失敗した場合は、fuser を使用し、/home を独占しているプロセスを見つけてこれらを止めます。
    fuser -mvk /home
  4. /home がもはやマウントされていないことを確認します。
    grep home /proc/mounts
  5. パーティションをランダムなデータで埋めます。
    shred -v --iterations=1 /dev/VG00/LV_home
    このコマンドは、デバイスの連続書き込み速度で実行され、完了までに時間がかかる場合があります。使用デバイスに暗号化されていないデータが残っていないことを確認した上で、デバイスの暗号化されたデータを含む部分を難読化するのは重要なステップです。
  6. パーティションを初期化します。
    cryptsetup --verbose --verify-passphrase luksFormat /dev/VG00/LV_home
  7. 新たに暗号化したデバイスを開きます。
    cryptsetup luksOpen /dev/VG00/LV_home home
  8. デバイスがあることを確認します。
    ls -l /dev/mapper | grep home
  9. ファイルシステムを作成します。
    mkfs.ext3 /dev/mapper/home
  10. ファイルシステムをマウントします。
    mount /dev/mapper/home /home
  11. ファイルシステムが表示されていることを確認します。
    df -h | grep home
  12. 以下を /etc/crypttab ファイルに追加します。
    home /dev/VG00/LV_home none
  13. /etc/fstab ファイルを編集して、/home の古いエントリを削除し、以下の行を追加します。
    /dev/mapper/home /home ext3 defaults 1 2
  14. デフォルトの SELinux セキュリティコンテンツを復元します。
    /sbin/restorecon -v -R /home
  15. マシンを再起動します。
    shutdown -r now
  16. /etc/crypttab にあるエントリにより、コンピューターのブート時に luks パスフレーズが尋ねられます。
  17. root としてログインし、バックアップを復元します。
これですべてのデータ用に暗号化されたパーティションを設定できたので、コンピューターをオフにしている間もデータを安全に保管できます。

3.1.3.3. 既存デバイスへの新規パスフレーズの追加

既存デバイスに新規パスフレーズを追加するには、以下のコマンドを使用します。
cryptsetup luksAddKey <device>
認証のために既存のパスフレーズが尋ねられると、新規パスフレーズの入力を求めるプロンプトが出されます。

3.1.3.4. 既存のデバイスからのパスフレーズ削除

既存のデバイスからパスフレーズを削除するには、以下のコマンドを使用します。
cryptsetup luksRemoveKey <device>
削除したいパスフレーズについて尋ねれ、認証に必要な残りのパスフレーズを求めるプロンプトが出されます。

3.1.3.5. Anaconda での暗号化したブロックデバイスの作成

システムのインストール時に、暗号化されたデバイスを作成することができます。これにより、 暗号化パーティションを含むシステムを簡単に設定することができます。
ブロックデバイスの暗号化を有効にするには、自動パーティション設定を選択している場合は システムの暗号化 チェックボックスに、個別パーティション、ソフトウェア RAID アレイまたは論理ボリュームを作成している場合は 暗号化 チェックボックスにチェックを入れます。パーティション設定が終了したら、暗号化のパスフレーズが尋ねられます。このパスフレーズは暗号化したデバイスにアクセスするために必要になります。LUKS デバイスが事前に存在しており、インストールプロセスの当初にそれらの正しいパスフレーズを指定している場合には、チェックボックスのあるパスフレーズ入力ダイアログが表示されます。このチェックボックスにチェックを入れると、既存の暗号化ブロックデバイスの利用可能なスロットに新規パスフレーズを追加することになります。

注記

自動パーティション設定 画面の システムの暗号化 チェックボックスにチェックを入れた後に カスタムレイアウトの作成 を選択しても、ブロックデバイスは自動的に暗号化されません。

注記

kickstart ファイルを使うと、暗号化した新規ブロックデバイスごとに個別のパスフレーズを設定することができます。また、Anaconda のデフォルトの暗号法である aes-xts-plain64 が適切でない場合、kickstart では別のタイプの暗号法を指定することもできます。暗号化するデバイスの依存関係で、autopartpartpartitionlogvol、および raid 指示文などとともに、--cipher=<cipher-string> を指定することができます。このオプションを有効にするには、--encrypted オプションと合わせて使う必要があります。<cipher-string> の形式および暗号法の組み合わせに関する詳細情報は、「Red Hat Enterprise Linux での LUKS 実装」 を参照してください。kickstart の設定に関する詳細は、Red Hat Enterprise Linux 6 インストールガイド を参照してください。