dm-crypt は、 Linux カーネルバージョン 2.6 以降およびDragonFly BSDにおける透過的なブロック デバイス暗号化サブシステムです。デバイス マッパー(dm) インフラストラクチャの一部であり、カーネルのCrypto APIの暗号化ルーチンを使用します。前身のcryptoloopとは異なり、dm-crypt は、ウォーターマーキング攻撃を回避するために、 XTS、LRW、ESSIVなどの高度な動作モードをサポートするように設計されています。[ 1 ]さらに、dm-crypt は cryptoloop の信頼性の問題にも対処しています。[ 2 ]
dm-cryptはデバイスマッパーのターゲットとして実装されており、他のデバイスマッパー変換の上に重ねて使用できます。そのため、ディスク全体(リムーバブルメディアを含む)、パーティション、ソフトウェアRAIDボリューム、論理ボリューム、およびファイルを暗号化できます。ブロックデバイスとして認識され、ファイルシステム、スワップ、またはLVM物理ボリュームのバックアップとして使用できます。
Linux ディストリビューションの中には、ルートファイルシステムで dm-crypt の使用をサポートしているものがあります。これらのディストリビューションは、通常の起動プロセスの前に、コンソールでパスフレーズを入力するかスマートカードを挿入するようにユーザーに促すためにinitrdを使用します。[ 3 ]
dm-crypt デバイス マッパー ターゲットは完全にカーネル空間に存在し、ブロック デバイスの暗号化のみに関与し、データ自体を解釈することはありません。暗号化されたボリュームの作成とアクティブ化、および認証の管理は、ユーザー空間のフロントエンドに依存します。現在、少なくとも 2 つのフロントエンドが利用可能です。 cryptsetupcryptmount
コマンドcryptsetupラインインターフェイスは、デフォルトでは暗号化ボリュームにヘッダーを書き込まないため、必要最低限の機能しか提供しません。ディスクをマウントするたびに暗号化設定を指定する必要があり(通常は自動化スクリプトで使用されます)、ボリュームごとに使用できるキーは 1 つだけです。対称暗号化キーは、指定されたパスフレーズから直接生成されます。
「ソルト」がないため、このモードでのcryptsetupの使用は、Linux Unified Key Setup(LUKS)の場合よりも安全性が低くなります。 [ 9 ]ただし、cryptsetupのシンプルさは、スマートカード認証 などのサードパーティ製ソフトウェアと組み合わせる場合に便利です。
cryptsetupまた、LUKS オンディスク形式を扱うためのコマンドも提供します。この形式は、鍵管理や鍵ストレッチング( PBKDF2を使用) などの追加機能を提供し、再起動後も暗号化されたボリューム構成を記憶します。[ 3 ] [ 10 ]
このcryptmountインターフェースは、「cryptsetup」ツールに代わるもので、スーパーユーザーによってデバイスが設定された後、スーパーユーザー権限を必要とせずに、必要に応じてどのユーザーでもdm-cryptファイルシステムをマウントおよびアンマウントできるようにします。
dm-crypt のようなディスク暗号化 (ボリューム暗号化) ソフトウェアは、抽象ブロック デバイスの透過的暗号化のみを扱うため、非常に柔軟性があります。つまり、オペレーティングシステムでサポートされているディスクベースのファイルシステムやスワップ領域の暗号化に使用でき、ファイルシステムによって実装された書き込みバリアは保持されます。[ 11 ] [ 12 ]暗号化されたボリュームは、ディスク パーティション、論理ボリューム、ディスク全体、およびファイルベースのディスク イメージ(losetup ユーティリティを使用したループ デバイスの使用による) に保存できます。dm-crypt は、 RAIDボリュームとLVM物理ボリュームを暗号化するように構成することもできます。
dm-crypt はinitrdを介して起動前の認証を提供するように構成することもでき、ブートローダー、カーネル、および initrd イメージ自体を除くコンピュータ上のすべてのデータを暗号化します。 [ 3 ]
他のディスク暗号化ソフトウェアと同様に、予測可能な初期化ベクトルを使用して暗号ブロック連鎖(CBC)モードの動作を使用する場合、ディスクはウォーターマーキング攻撃に対して脆弱になります。これは、攻撃者がディスク上に特別に細工されたデータが存在することを検出できることを意味します。この問題に対処するため、dm-crypt は以前のバージョンで、より精巧なディスク暗号化固有の動作モードの規定を含めました。[ 1 ] ESSIV(暗号化されたソルトセクタ初期化ベクトル)のサポートはLinux カーネル バージョン 2.6.10 で、 LRWは 2.6.20 で、XTS は2.6.24 で導入されました。ワイドブロックディスク暗号化アルゴリズムであるAdiantum は5.0 で、その AES ベースの類似アルゴリズムである HCTR2 は 6.0 で追加されました。
Linux Crypto APIは、最も一般的なブロック暗号とハッシュ関数をサポートしており、これらはすべてdm-cryptで使用できます。
暗号化されたファイルシステムのサポートには、LUKS (バージョン 1 および 2) ボリューム、ループ AES、TrueCrypt / VeraCrypt (Linux カーネル 3.13 以降)、[ 13 ] [ 14 ] [ 15 ]、およびBitLockerで暗号化された NTFS (cryptsetup 2.3.0 以降) が含まれます。[ 16 ] TrueCrypt / VeraCrypt (TCRYPT) および BitLocker (BITLK) のサポートには、カーネルのユーザー空間暗号化 API が必要です。[ 17 ]
dm-crypt および LUKS で暗号化されたディスクは、現在では開発が終了しているFreeOTFE (旧 DoxBox、LibreCrypt)を使用して MS Windows 上でアクセスおよび使用できます。ただし、使用するファイルシステムが Windows でサポートされている必要があります (例: FAT /FAT32 / NTFS )。暗号化されたext2およびext3ファイルシステムは、 Ext2Fsdまたはいわゆる「Windows 用 Ext2 インストール可能ファイルシステム」を使用することでサポートされます。 [ 18 ] FreeOTFE もこれらをサポートしています。
Cryptsetup/LUKSと必要なインフラストラクチャはDragonFly BSDオペレーティングシステムにも実装されています。[ 19 ]