twitter icon   twitter icon   rss icon

Linux.com Japan

Home ニュース Linux.com Exclusive DM-Cryptを使ってファイル システムを暗号化する

DM-Cryptを使ってファイル システムを暗号化する

原文は 2015 年 6 月 23 日に掲載されました。 ※ この記事は「チュートリアル」からの転載です。
 
編集者注: 「ファイル システム」 (2 語に分かれている場合) とは、ハードウェア デバイスの情報を格納している /dev のようにディレクトリ構造を表現するもので、ディスク ドライブのファイルそのものを指し示すものではありません。「ファイルシステム」と 1 語で記述した場合は、ファイルとディレクトリを管理するソフトウェアを意味します。
 
Encryption fig-1
Linux.com の読者からよく聞かれる質問の中に、Linux におけるファイル システムの暗号化があります。これを説明する前に、2 つの点を指摘しておきましょう。
 
1 つ目は、これに関する正しい情報を Web 上で探すことは困難であることです。私は、良い情報源を指摘するつもりです。
 
2 つ目は、問題の技術的詳細を理解することの大切さです。本文献で私が説明することは、この部分です。説明の後、実際に暗号化するための情報源へのポインターを指摘し、その他の情報源についても指摘するつもりです。
 
誰もがデータを暗号化したいと思っています。しかし、大事な点が欠けています。それは、「本当は何を暗号化したいのか」、「ソフトウェア パッケージ内でデータを暗号化し、単体ファイルとして格納したいのか」ということです。たとえば、LibreOffice で文書作成する場合を考えてみます。.odt ファイルを作成し、暗号化し、結果を単体のファイルとしてファイル システムに格納するのか、それともファイル システム レベルで Linux 自身が暗号化するのかです。
 
Linux 自身が暗号化する場合を考えてみます。LibreOffice は、今までと同じくファイルを読み書きするだけです。ファイルを実際にディスクに書き込む前に Linux が暗号化し、読み出し後に復号します。これが、ここで説明する方式です。たくさん質問があると思います。正しく質問するためには (正しい回答を得るためには)、ブロック ストレージの機能を理解しておく必要があります。ここから開始します。
 

ブロック レベル ストレージ

OS がローカル ドライブを処理する時は、ドライブをフォーマットしたり、特定のセクターの読み書きをしたりするために、ファイルシステム ソフトウェアを使います。ファイルを読み出す時は、ファイルシステムがデータの存在するセクターを確定し、データを読み出します。そしてファイルの形式に組み立てます。ファイル管理のために、ファイルシステムは、それぞれ異なるインデックスを利用し、そのインデックスもディスクに格納されています。ファイルシステムは、それぞれ異なるデータ管理の方法やセキュリティの方法を採用しており、結果として異なるファイル システム、ext4 や NTFS のようになっています。
 

下位レベルの詳細

Encryption fig-2
ブロック レベルのデバイスの動きを理解したところで、オペレーティング システムがファイルシステム ソフトウェアを使ってデータをセクター毎にドライブに書き込むことについて考えてみます。ファイルシステム ソフトウェアは、データの格納セクター、データの構成形式を決定し、ファイル名称の形式や構成方法について記述したメタデータの生成などを行います。ファイルシステム ソフトウェアが実際に読み書きするためには、デバイス自身を制御するデバイス ドライバーが必要です (図)。(ドライバーは、/dev ディレクトリに格納されている階層的なファイル システムとして表現されています)。
 
ファイルシステム ソフトウェアとデバイス ドライバーの階層の間のソフトウェアも暗号化を行えます。ファイルシステム ソフトウェアが、データを書き込む前に暗号化するのでしょうか。それとも、ファイルシステム ソフトウェアとデバイス ドライバーの間のソフトウェアが行うのが効率的でしょうか。後者の場合、ファイルシステム ソフトウェアは、通常と同じように動作します。しかし、デバイスにアクセスする時、読み出しは、暗号化ソフトウェアによって置き換えられます (図の右側)。これが、本文献でやりたい方法です。その前に、いくつかの問題を指摘しておきます。
 
(Linux システムの /dev ディレクトリに、どのようなデバイス ドライバーが存在するかを知りたい時は、この文献を読むと良いでしょう。プログラミングをカバーしていますが、読者がプログラマーでないときは、2 ページ目の Hello, World! Using/dev/hello_world の最初の節に良い説明があります。)
 
パーティション全体を暗号化する時は、ドライブ全体を暗号化するでしょう。しかし、小さな問題があります。そのドライブからブートするときに、ブート コード格納用に小さなパーティションが必要です。コンピューターは、ブートコードを読み出し、実行してブートします。もしドライブ全体が暗号化されていたら、コンピューターは、復号する手段を持っている必要があります。しかし、事前にファイル システムがロードされていないので、復号するソフトウェアを読み出すことができません。そうなると、BIOS が復号コードを抱える必要がありますが、ほとんどのコンピューターは持っていません。つまり、ブード レコードは暗号化できないということです (本問題について、たくさんの人が議論しています)。たとえば、ブート コードを取り外し可能な USB ドライブに格納して、その他の問題と同時に解決するなどです)。
 

リモート ドライブ

ドライブがリモートの場合、データ参照には複数の方法があります。暗号化の方法についても理解しておくべきことがあります。2 つの方法があります。
  • ブロック レベル ストレージ:  ローカル ドライブと同様に、ファイルシステム ソフトウェアは、リモート ディスクのセクターを直接読み書きできます。
  • ファイルレベル ストレージ:  オペレーティング システムは、リモート サーバーにファイルを送付し、リモー トサーバーが、ファイルをディスクに書き込みます。リモート サーバーには、専用のオペレーティング システムとファイルシステム ソフトウェアがあります。
ブロック レベルのリモート ストレージの場合、選択肢があります。たとえば、割り当てたサーバーに異なるボリュームをアタッチできるようなクラウド ホスティングを利用している場合は、ブロック レベル ストレージを利用しています。ボリュームは、サーバーに物理的にアタッチされている必要はありません。しかしサーバーは、あたかも直接接続されているようにボリュームにアクセスできます。ローカルに接続されているようにフォーマットしたり、セクター毎に読み書きしたりできます。つまり、ブロック レベルのリモート ストレージの場合、ローカル コンピューターやローカル ドライブと同様にファイル システム レベルでの暗号化を行えます。
 

ソフトウェア

さて、やるべきことはわかりました。どうやればよいでしょうか。Linux は、先に説明したファイルシステム ソフトウェアとデバイス ドライバーの間で、働くソフトウェアを実装したソフトウェア パッケージを備えています。このソフトウェアは dm-crypt と呼ばれています。dm-crypt は、データを暗号化し、LUKS と呼ぶストレージ フォーマットで、ストレージ デバイスに書き込みます (デバイス ドライバーを利用して)。
 
LUKS (Linux Unified Key Setup) は、ドライブ内で使用される形式で、ext4 のようなファイル システムに利用されます。dm-crypt システムは、ファイルシステム ソフトウェアの間に位置します。ファイルシステム ソフトウェアは、ext4 ファイルシステムを読み書きします。ext4 データは、dm-crypt を通して、ドライブに LUKS 形式で書き込まれます。これにより、暗号化されて LUKS 形式の上に ext4 や NTFS ファイルシステムを構築できます。
 
dm-crypt はサブシステムの名称です。一緒に動作する複数のツールがあります。dm-crypt という単独のコマンドはありません。dm-crypt を管理するいくつかのプログラムがあります。
  • cryptsetup:  デバイスを dm-crypt で管理できるようにします。

他の機能

dm-crypt の優れた点の 1 つは、ディスク ドライバーと直接つながって働くわけではないことです。LUKS を利用して、パーティション全部を使う代わりに 1 つのファイルに全データを書き込むこともできます。つまり、完全なファイル システムを有する 1 つのファイルを dm-crypt で作成することができるのです。そのファイルを別のドライブとしてマウントして、他のソフトウェアから参照できます。
 

クラウド ドライブ

Amazon Web Service のようなクラウド提供者は、サーバーに接続されたブロック デバイスへの完全なアクセスを提供しています。そのため、dm-crypt を利用可能です。ブロック デバイスを LUKS 形式にフォーマットしたり、dm-crypt で管理して、ext4 ファイル システムにフォーマットできます。 つまり、クラウド上に自分が管理する暗号化ドライブを持つことができます。詳しくは、cryptsetup プログラムの利用チュートリアルを見てください。
 
AWS と違って、ブロック デバイスへの直接アクセスを提供していないクラウド提供者もあります。たとえば、Digital Ocean です。しかしこの場合でも、ファイルを生成して、そのファイルを dm-crypt で利用するようにできます。"container" と呼ばれるファイル中のファイル システムを作成します。ローカル マシン上で、暗号化された "container" ファイルを作成する場合と同じやり方でできるのです。dm-crypt LUKS "container" ファイルの作成方法を記述した Digital Ocean のチュートリアルがあります。ブロック デバイスと同様に、ファイル システム (ext4) を作成できますが、それは、実際にはファイルの中にあるのです。
 

ローカル ドライブ

これらをローカルで行う方法を見てみましょう。Amazon に暗証化ドライブを作成した上記のチュートリアルは、ローカル ドライブに作成した時と同様の手順を踏んでいます。他のチュートリアルもあります。これは、ローカル上のやり方で、ステップ順に説明しています。
 
ローカルのファイル システム全体を含む "container" を作成したい場合は、Digital Ocean のチュートリアルに従ってください。
 
他のコマンド、cryptmountを使って、暗号化されたパーティション作成や、"container"を作成したいときは、このチュートリアルを参照してください。
 

結論

これで終わりです。暗号化を理解することは、本当に何がしたいかを考えることです。アプリケーションに暗号化と復号をやらせるのか、それとも、オペレーティングシステムに暗号化をやらせるのか、そして、パーティションを暗号化するのか、単体のファイルを暗号化するのか、暗号化されたファイルを格納する "container" を作成するのか。それから、ここで紹介したチュートリアルに従ってやってみてください。きっと、うまくいくでしょう。
Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/05/15 2018年 5月 14日
  2. Today's Linux 2018/05/16 2018年 5月 15日
  3. Today's Linux 2018/05/14 2018年 5月 13日
  4. Today's Linux 2018/05/17 2018年 5月 16日
  5. Today's Linux 2018/05/18 2018年 5月 17日

Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!