コマンドラインのマニュアル

Man » cryptsetup マニュアルオンライン - cryptsetup man ページの詳細なオンラインドキュメント

🌍
cryptsetup - 暗号化されたストレージデバイスの設定と管理を行うユーティリティ

概要

cryptsetup <アクション> [<オプション>] <アクション引数>

説明

Cryptsetup は、ストレージデバイスのフルディスク暗号化を設定および管理するためのユーティリティです。 ブロックデバイス(ハードドライブやパーティションなど)およびコンテナ(ファイルとして保存されたディスクイメージ)を暗号化できます。

暗号化されたボリュームをアンロックすると、cryptsetup はアプリケーションが通常のストレージデバイスとしてアクセスできる新しいデバイスマッピングを作成します。実際の暗号化と復号の処理は、カーネルのデバイスマッパー dm-crypt ドライバーによって透過的に実行されます。

Cryptsetup は、プレーンな暗号化ボリュームと LUKS (Linux Unified Key Setup) ボリュームという 2 種類のボリュームタイプをサポートしています。プレーンなボリュームは基本的な暗号化を提供し、LUKS ボリュームには複数のキー スロットとキー管理などの高度な機能を有効にするメタデータヘッダーが含まれています。さらに、LUKS を使用して、OPAL 対応のストレージドライブでのハードウェアベースの暗号化を管理できます。

Cryptsetup は、loop-AES、TrueCrypt、VeraCrypt、BitLocker、および FileVault2 などの他の暗号化システムによって作成されたボリュームも限定的にサポートしています。

特定の cryptsetup アクションの詳細については、cryptsetup-<アクション>(8) を参照してください。ここで、<アクション> は cryptsetup アクションの名前です。

Cryptsetup デバイスは、systemd(1) または他のシステム起動スクリプトの一部である crypttab(5) を介して、起動時にアクティブにできます。

基本的なアクション

以下の操作は、すべてのサポートされているデバイスタイプに対して有効なアクションです。

OPEN

open <デバイス> <名前> --type <デバイス_タイプ>

<名前> をデバイス <デバイス> に基づいてマッピング (作成) します。cryptsetup-open(8) を参照してください。

CLOSE

close <名前>

既存のマッピング <名前> を削除し、キーをカーネルメモリから消去します。cryptsetup-close(8) を参照してください。

STATUS

status <名前>

マッピング <名前> のステータスを報告します。cryptsetup-status(8) を参照してください。

RESIZE

resize <名前>

アクティブなマッピング <名前> のサイズを変更します。cryptsetup-resize(8) を参照してください。

REFRESH

refresh <名前>

アクティブなマッピング <名前> のパラメーターを更新します。cryptsetup-refresh(8) を参照してください。

REENCRYPT

reencrypt <デバイス> または --active-name <名前> [<新しい_名前>]

LUKS デバイスの再暗号化を実行します。cryptsetup-reencrypt(8) を参照してください。

プレーンモード

プレーン dm-crypt は、デバイスをパスフレーズの 1 つの非塩化ハッシュでセクターごとに暗号化します。チェックは実行されず、メタデータも使用されません。フォーマット操作は行いません。 デバイスがマッピング (オープン) されると、通常、マッピングされたデバイスでファイルシステムの作成など、通常のデバイス操作を使用できます。マッピングされたデバイスは通常、/dev/mapper/<名前> にあります。


以下のプレーンデバイスタイプの有効なアクションは次のとおりです。

OPEN

open --type plain <デバイス> <名前>
create <名前> <デバイス> (非推奨の構文)

<名前>を、<デバイス>によってバックアップされたマッピングとして開きます(作成します)。cryptsetup-open(8)を参照してください。

LUKS拡張

LUKS(Linux Unified Key Setup)は、ディスク暗号化の標準です。これは、デバイスの先頭に標準化されたヘッダー、ヘッダーのすぐ後ろにキー領域、そのさらに後ろに大量のデータ領域を追加します。これらすべてを「LUKSコンテナー」と呼びます。LUKSコンテナーが格納されているデバイスは、「LUKSデバイス」と呼ばれます。ほとんどの場合、これらの用語は交換して使用できます。

LUKSは、個別に無効化または変更できる複数のパスフレーズを管理できます。各パスフレーズは、データ暗号化用のボリュームキーを含む個別のキー領域を使用します。キー領域は、アンチフォレンジストライプを使用することで、永続的なメディアから安全に削除できます。パスフレーズは、パスワードベースのキー派生関数(PBKDF)によってブルートフォース攻撃から保護されます。ファイルに保存されたパスフレーズは、キーファイルと呼ばれます。パスフレーズとキーファイルの違いは、キーファイルにバイナリデータを含めることができる点だけです。どちらも同じように処理されます。

LUKSバージョン1(またはLUKS1)は、元のメタデータ形式であり、LUKS2は新しいバージョンで、異なるPBKDFアルゴリズムや認証された暗号化などの追加の拡張が可能です。luksFormatコマンドで、--type luks1または--type luks2を使用して、特定のLUKSバージョンでデバイスをフォーマットできます。通常、バージョンを指定する必要はありません。自動的に認識されます。デフォルトの形式はLUKS2です。

<デバイス>パラメーターは、UUID=の形式でLUKS UUIDによって指定することもできます。

LUKSヘッダーは、データから分離して(別途保存)することができます。分離されたヘッダーを指定するには、すべてのLUKSコマンドで--headerパラメーターを使用でき、常に位置パラメーター<デバイス>よりも優先されます。

以下のLUKSアクションが有効です。

FORMAT

luksFormat <デバイス> [<新しいキーを含むキーファイル>]

LUKSパーティションを初期化し、初期パスフレーズ(キー領域0用)を設定します。cryptsetup-luksFormat(8)を参照してください。

OPEN

open --type luks <デバイス> <名前>
luksOpen <デバイス> <名前> (古い構文)

LUKSデバイス<デバイス>を開き、提供されたパスフレーズが正常に検証された後に、マッピング<名前>を設定します。cryptsetup-open(8)を参照してください。

SUSPEND

luksSuspend <名前>

アクティブなデバイスを一時停止し(すべてのI/O操作がブロックされ、デバイスへのアクセスは無期限に待機されます)、暗号化キーをカーネルメモリから削除します。cryptsetup-luksSuspend(8)を参照してください。

RESUME

luksResume <名前>

一時停止されたデバイスを再開し、暗号化キーを再インストールします。cryptsetup-luksResume(8)を参照してください。

ADD KEY

luksAddKey <デバイス> [<新しいキーを含むキーファイル>]

既存のパスフレーズを使用して新しいパスフレーズを追加します。 cryptsetup-luksAddKey(8) を参照してください。

キーの削除

luksRemoveKey <デバイス> [<パスフレーズを含むキーファイル>]

LUKS デバイスから指定されたパスフレーズを削除します。 cryptsetup-luksRemoveKey(8) を参照してください。

キーの変更

luksChangeKey <デバイス> [<新しいキーファイル>]

既存のパスフレーズを変更します。 cryptsetup-luksChangeKey(8) を参照してください。

キーの変換

luksConvertKey <デバイス>

既存の LUKS2 キーのスロットを新しい PBKDF パラメーターに変換します。 cryptsetup-luksConvertKey(8) を参照してください。

スロットの消去

luksKillSlot <デバイス> <番号>

LUKS デバイスから、<番号> で指定されたキーのスロットを消去します。 cryptsetup-luksKillSlot(8) を参照してください。

削除

erase <デバイス>
luksErase <デバイス> (古い構文)

すべてのキーのスロットを消去し、LUKS コンテナーを永続的にアクセス不能にします。 cryptsetup-erase(8) を参照してください。

UUID

luksUUID <デバイス>

LUKS デバイスの UUID を表示または設定します。 cryptsetup-luksUUID(8) を参照してください。

LUKS デバイスの確認

isLuks <デバイス>

<デバイス> が LUKS デバイスである場合は true を返し、そうでない場合は false を返します。 cryptsetup-isLuks(8) を参照してください。

ダンプ

luksDump <デバイス>

LUKS デバイスのヘッダー情報をダンプします。 cryptsetup-luksDump(8) を参照してください。

ヘッダーのバックアップ

luksHeaderBackup <デバイス> --header-backup-file <ファイル>

LUKS ヘッダーとキー スロット領域のバイナリ バックアップを保存します。 cryptsetup-luksHeaderBackup(8) を参照してください。

ヘッダーの復元

luksHeaderRestore <デバイス> --header-backup-file <ファイル>

指定されたファイルから、LUKS ヘッダーとキー スロット領域のバイナリ バックアップを復元します。 cryptsetup-luksHeaderRestore(8) を参照してください。

トークン

token <add|remove|import|export> <デバイス>

パスフレーズを取得するために使用されるトークン オブジェクトを操作します。 cryptsetup-token(8) を参照してください。

変換

convert <デバイス> --type <形式>

デバイスを LUKS1 と LUKS2 の形式間で変換します(可能な場合)。 cryptsetup-convert(8) を参照してください。

設定

config <デバイス>

永続的な構成オプションを設定します(LUKS ヘッダーに保存します)。 cryptsetup-config(8) を参照してください。

LOOP-AES 拡張

Cryptsetup は、互換性モードを使用して、ループ AES 暗号化されたパーティションをマッピングすることをサポートしています。

オープン

open --type loopaes <デバイス> <名前> --key-file <キーファイル>
loopaesOpen <デバイス> <名前> --key-file <キーファイル> (古い構文)

ループ AES <デバイス> を開き、<名前> のマッピングを設定します。 cryptsetup-open(8) を参照してください。

FAQ のセクション 7 と、loop-AES [http://loop-aes.sourceforge.net] を参照して、loop-AES に関する詳細情報を確認してください。

TCRYPT (TRUECRYPT および VERACRYPT 互換) 拡張

Cryptsetup は、TrueCrypt、tcplay、または VeraCrypt 暗号化されたパーティションを、ネイティブの Linux カーネル API を使用してマッピングすることをサポートしています。 ヘッダーのフォーマットと TCRYPT ヘッダーの変更はサポートされていません。 cryptsetup は、デバイス上の TCRYPT ヘッダーを一切変更しません。

TCRYPT 拡張では、カーネル ユーザー空間暗号 API が利用可能である必要があります。 カーネルを自分で構成する場合は、「対称鍵暗号アルゴリズム用のユーザー空間インターフェース」を「暗号化 API」セクション(CRYPTO_USER_API_SKCIPHER .config オプション)で有効にします。

TCRYPT ヘッダーは暗号化されているため、常に有効なパスフレーズとキーファイルを提供する必要があります。


cryptsetup は、LRW 暗号化モードで 64 ビット暗号化ブロックを使用するレガシー暗号チェーンを除いて、すべてのヘッダーバリアントを認識します(具体的には、LRW モードの Blowfish は認識されません。これはカーネル暗号 API の制限です)。

VeraCrypt は TrueCrypt を拡張したもので、反復回数を増やしているため、ロック解除には時間がかかる場合があります。

カスタムの個人反復乗数(PIM)値を使用して VeraCrypt デバイスを開くには、コマンドラインで PIM を直接指定する --veracrypt-pim PIM オプションを使用するか、PIM を入力するように求められる --veracrypt-query-pim を使用します。

PIM 値は、キー派生中に適用される反復回数に影響します。詳細については、PIM [https://veracrypt.io/en/Personal%20Iterations%20Multiplier%20(PIM).html] を参照してください。

VeraCrypt デバイスのサポートを無効にするには、--disable-veracrypt オプションを使用します。

^ cryptOpen によるアクティベーションは、LRW または XTS 暗号化モードを使用する暗号チェーンに対してのみサポートされます。

^ cryptDump コマンドは、認識されたすべての TCRYPT デバイスで動作し、管理者権限は必要ありません。

システムデバイス(ブートローダーを含む、暗号化されたシステム全体が格納されているデバイス)をマッピングするには、--tcrypt-system オプションを使用します。システムで暗号化されたデバイスをマッピングすることは複雑であるため、cryptsetup-tcryptOpen(8)--tcrypt-system オプションセクションにある特定の情報を確認してください。

隠しヘッダー(および利用可能な場合は隠しデバイス)を使用するには、--tcrypt-hidden オプションを使用します。

バックアップ(セカンダリ)ヘッダーを明示的に使用するには、--tcrypt-backup オプションを使用します。

外側のボリュームがマウントされている場合、隠しボリュームは保護されません。その理由は、何らかの保護が存在する場合、外側のボリュームに保護対象を記述するメタデータが必要となり、その結果、隠しボリュームが検出可能になってしまうためです。

OPEN

open --type tcrypt <device> <name>
tcryptOpen_ <device> <name> (旧構文)

TCRYPT(TrueCrypt 互換)デバイス <device> を開き、マッピング <name> を設定します。cryptsetup-open(8) を参照してください。

DUMP

tcryptDump <device>

TCRYPT デバイスのヘッダー情報をダンプします。cryptsetup-tcryptDump(8) を参照してください。

TrueCrypt [https://en.wikipedia.org/wiki/TrueCrypt] および VeraCrypt [https://en.wikipedia.org/wiki/VeraCrypt] のページも参照してください。

cryptsetup は TrueCrypt または VeraCrypt のコードを使用しないため、この互換性拡張機能に関する問題はすべて cryptsetup プロジェクトに報告してください。

BITLK(WINDOWS BITLOCKER 互換)拡張機能

cryptsetup は、BitLocker および BitLocker to Go で暗号化されたパーティションを、ネイティブの Linux カーネル API を使用してマッピングすることをサポートします。ヘッダーのフォーマットと BITLK ヘッダーの変更はサポートされていません。cryptsetup はデバイス上の BITLK ヘッダーを一切変更しません。

BITLK 拡張機能には、カーネルユーザー空間暗号 API が利用可能である必要があります(詳細は TCRYPT セクションを参照)。

cryptsetup は、Windows Vista システムで使用されるレガシーヘッダー、および部分的に復号された BitLocker デバイスを除いて、すべての BITLK ヘッダーバリアントを認識します。CBC モードで暗号化されたレガシーデバイスのアクティベーションには、少なくとも Linux カーネルバージョン 5.3 が必要であり、Elephant Diffuser を使用するデバイスには、カーネル 5.6 が必要です。


^ itlkDump コマンドは、認識されているすべての BITLK デバイスで機能し、スーパーユーザー権限は必要ありません。

^ pen コマンドでロックを解除するには、パスワード、リカバリーパスフレーズ、または起動キーのいずれかを提供する必要があります。

さらに、ボリュームキーを使用したロック解除もサポートされています。BitLocker Full Volume Encryption Key (FVEK) を --volume-key-file オプションを使用して提供する必要があります。キーは復号化され、ヘッダーを含まないもの(使用される暗号とモードに応じて、128/256/512 ビットのキーデータのみ)である必要があります。

他のロック解除方法(TPM、スマートカード)はサポートされていません。

OPEN

open --type bitlk <device> <name>
bitlkOpen <device> <name> (古い構文)

BITLK(BitLocker互換)<device> を開き、<name> というマッピングを設定します。cryptsetup-open(8) を参照してください。

DUMP

bitlkDump <device>

BITLK デバイスのヘッダー情報をダンプします。cryptsetup-bitlkDump(8) を参照してください。

cryptsetup は Windows BitLocker コードを使用していないことに注意してください。この互換性拡張機能に関連するすべての問題を cryptsetup プロジェクトに報告してください。

FVAULT2(APPLE MACOS FILEVAULT2 互換)拡張機能

cryptsetup は、macOS オペレーティングシステム用の FileVault2(FileVault2 フルディスク暗号化)のマッピングを、ネイティブの Linux カーネル API を使用してサポートします。

cryptsetup は、Core Storage および HFS+ ファイルシステムをベースにした FileVault2 のみサポートします(macOS X 10.7 Lion で導入)。最新の macOS バージョンで使用されている APFS ファイルシステムをベースにした新しいバージョンの FileVault はサポートしません。

ヘッダーのフォーマットと FVAULT2 ヘッダーの変更はサポートされていません。cryptsetup はデバイス上の FVAULT2 ヘッダーを変更しません。

FVAULT2 拡張機能には、カーネルユーザー空間の暗号 API が利用可能である必要があります(詳細については、TCRYPT セクションを参照してください)および HFS+(hfsplus)ファイルシステムのカーネルドライバが必要です。

cryptsetup は、ポータブルドライブの基本的な構成を認識できるはずです。

^ vault2Dump コマンドは、認識されているすべての FVAULT2 デバイスで機能し、スーパーユーザー権限は必要ありません。

^ pen コマンドでロックを解除するには、パスワードを提供する必要があります。他のロック解除方法はサポートされていません。

OPEN

open --type fvault2 <device> <name>
fvault2Open <device> <name> (古い構文)

FVAULT2(FileVault2 互換)<device>(通常はデバイスの 2 番目のパーティション)を開き、<name> というマッピングを設定します。cryptsetup-open(8) を参照してください。

SED(自己暗号化ドライブ)OPAL 拡張機能

cryptsetup は、OPAL インターフェースを提供するドライブでのネイティブハードウェア暗号化を、dm-crypt とのネスト、またはスタンドアロンで使用することをサポートします。パスフレーズ、トークン、メタデータは LUKS2 ヘッダー形式で保存され、LUKS2 を使用する任意のソフトウェアまたはシステム(例: トークン)と互換性があります。

OPAL のサポートには、少なくともカーネル v6.4 が必要です。デバイスのサイズ変更はサポートされていません。

^ -hw-opal は、OPAL + dm-crypt 用に指定でき、--hw-opal-only は、dm-crypt レイヤーなしで OPAL のみを実行するために指定できます。


開く、閉じる、およびトークンを登録する操作は、LUKS2およびdm-cryptの場合と同じように機能します。 新しいパラメータは、フォーマット時にのみ必要です。 LUKS2メタデータは、開いたり閉じたりするときに正しいセットアップが実行されるようにします。

サブシステムラベルが指定されていない場合、HW-OPALに自動的に設定され、OPALを使用するデバイスがすぐに識別できるようになります。

FORMAT

luksFormat --type luks2 --hw-opal <デバイス> [<キーファイル>]

さらに、--hw-opalの代わりに--hw-opal-onlyを指定して、dm-cryptレイヤーを回避します。 通常のパスフレーズに加えて、ドライブの最初のパーティションをフォーマットするときに管理者パスワードを指定する必要があり、工場出荷時のリセットを実行するまで、他のパーティションをフォーマットするときにも再入力する必要があります。

ERASE

erase <デバイス>

パーティションまたはデバイスを安全に消去します。管理者パスワードが必要です。 さらに、--hw-opal-factory-resetを指定して、ドライブのPSID(通常はラベルに印刷されています)を使用して、ドライブを完全に工場出荷時の状態にリセットします。管理者パスワードの代わりにPSIDを使用します。

PSIDは、ダッシュ、スペース、またはアンダースコアなしで入力する必要があります。

警告:工場出荷時のリセットは、デバイス上のすべてのデータを、パーティションが存在する場合でも、LUKS2ヘッダーのバックアップが存在する場合でも、完全に消去します。

その他の操作

REPAIR

repair <デバイス>

可能な場合は、デバイスのメタデータを修復しようとします。 現在、LUKSデバイスタイプのみがサポートされています。 cryptsetup-repair(8)を参照してください。

BENCHMARK

benchmark <オプション>

暗号、およびKDF(キー派生関数)のベンチマークを実行します。 cryptsetup-benchmark(8)を参照してください。

プレーンモードまたはLUKS?

暗号の背景を十分に理解していない場合は、LUKSを使用してください。 プレーンモードでは、セキュリティを大幅に低下させる可能性のある多くのユーザーエラーが発生する可能性があります。 LUKSはそれらすべてを修正することはできませんが、その影響を軽減することができます。

警告

暗号化されたストレージを使用することのリスク、問題の処理、およびセキュリティに関する優れた情報については、Cryptsetup FAQを参照してください。 ただし、いくつかのリスクについては、ここで言及する価値があります。

バックアップ:ストレージメディアは故障します。 暗号化はそれには影響しません。 貴重なデータについては、暗号化されたデータもバックアップすることが必須です。 暗号化されたボリュームのバックアップ方法については、Cryptsetup FAQを参照してください。

文字エンコード:特殊な記号を含むパスフレーズを入力すると、パスフレーズは文字エンコードによって変更される可能性があります。 キーボード設定も変更される可能性があり、入力が困難または不可能になる可能性があります。 たとえば、一部のASCII 8ビットバリアントからUTF-8に切り替えると、異なるバイナリエンコードになり、結果としてcryptsetupによって異なるパスフレーズが認識される可能性があります。これは、端末で表示されるものがまったく同じであっても同様です。 したがって、7ビットASCIIのみからパスフレーズの文字を選択することをお勧めします。7ビットASCIIのエンコードは、すべてのASCIIバリアントおよびUTF-8で同じです。

LUKSヘッダー:LUKSボリュームのヘッダーが破損した場合、ヘッダーのバックアップがない限り、すべてのデータが永久に失われます。 キー スロットが破損した場合、ヘッダーのバックアップからのみ復元するか、既知のパスフレーズを持つ別のアクティブなキー スロットが損傷していない場合にのみ復元できます。 このリスクは、LUKSは、ヘッダーとキー スロット領域を上書きするだけで、高速かつ安全なワイプを行うように設計されているため、セキュリティと安全性のトレードオフの結果です。


以前使用されていたパーティション:パーティションを以前使用していた場合、LUKSまたはプレーンな dm-crypt コンテナーを作成する前に、ファイルシステムの署名、データなどをワイプしておくことを強くお勧めします。ファイルシステムの署名をすばやく削除するには、wipefs(8)--all オプションで使用します。ただし、これはデータを削除するものではなく、既知の形式の署名を無効にするだけです。完全にワイプするには、コンテナーを作成する前に、パーティション全体を上書きします。そうする方法がわからない場合は、cryptsetup の FAQ にいくつかのオプションが記載されています。

例 1:ブロックデバイス /dev/sdX に LUKS 2 コンテナーを作成します。

sudo cryptsetup --type luks2 luksFormat /dev/sdX

例 2:キースロット 5 に追加のパスフレーズを追加します。

sudo cryptsetup luksAddKey --key-slot 5 /dev/sdX

例 3:LUKS ヘッダーのバックアップを作成し、ファイルに保存します。

sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile

例 4:/dev/sdX 上の LUKS コンテナーを開き、sdX_crypt にマップします。

sudo cryptsetup open /dev/sdX sdX_crypt

警告:例 5 のコマンドは、すべてのキースロットを消去します。 バックアップを復元しない限り、その後は LUKS コンテナーを使用できなくなります。

例 5:/dev/sdX 上のすべてのキースロットを消去します。

sudo cryptsetup erase /dev/sdX

例 6:バックアップファイルから LUKS ヘッダーを復元します。

sudo cryptsetup luksHeaderRestore /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile

戻り値

cryptsetup は、成功時には 0 を、エラー時には 0 以外の値を返します。

エラーコード:1:誤ったパラメータ、2:権限がない(誤ったパスフレーズ)、3:メモリ不足、4:指定されたデバイスが正しくない、5:デバイスがすでに存在するか、デバイスがビジー状態。

注記

PLAIN モードのパスフレーズ処理

PLAIN モードでは、反復ハッシュやソルト処理は行われません。ハッシュが実行される場合、それは単一の直接ハッシュです。つまり、PLAIN モードでは、低エントロピーのパスフレーズは攻撃しやすくなります。

ターミナルから:パスフレーズは、最初の改行文字(\n)まで読み込まれます。改行文字を除いた入力は、デフォルトのハッシュまたは --hash で指定されたハッシュで処理されます。ハッシュの結果は、使用される暗号のキーサイズ、または -s で指定されたサイズに切り捨てられます。

標準入力から:改行文字(または最大入力サイズに達するまで)まで読み込みが行われ、末尾の改行文字が削除されます。最大入力サイズは、コンパイル時に組み込まれたデフォルトの最大キーファイルサイズと同じであり、--keyfile-size オプションを使用してオーバーライドできます。

読み込まれたデータは、デフォルトのハッシュまたは --hash で指定されたハッシュを使用してハッシュ化されます。ハッシュの結果は、使用される暗号のキーサイズ、または -s で指定されたサイズに切り捨てられます。


^ -key-file=- を使用してキーを標準入力から読み込む場合、末尾の改行文字は削除されません。

^ -hash に "plain" を引数として使用すると、入力データはハッシュされません。代わりに、キーサイズよりも短い場合はゼロパディングされ、キーサイズよりも長い場合は切り捨てられ、バイナリキーとして直接使用されます。これは、バイナリキーを直接指定する場合に役立ちます。標準入力から読み取ったデータの量がキーサイズよりも少ない場合に、警告は表示されません。

キーファイルから:キーは、使用される暗号のキーサイズ、または -s で指定されたサイズに切り捨てられ、バイナリキーとして直接使用されます。

^ -hash 引数は無視されます。--hash オプションは、標準入力からの入力で "plain" モードで使用する場合にのみ有効です。

キーファイルがキーよりも短い場合、cryptsetup はエラーで終了します。最大入力サイズは、コンパイル時に定義されたデフォルトと同じであり、--keyfile-size オプションを使用してオーバーライドできます。

LUKS のためのパスフレーズ処理

ターミナルから:パスフレーズは最初の改行文字まで読み取られ、改行文字を含めずに PBKDF2 で処理されます。

標準入力から:LUKS は、標準入力から最初の改行文字、またはコンパイル時に定義された最大キーファイル長までパスフレーズを読み取ります。--keyfile-size が指定されている場合、無視されます。

キーファイルから:キーファイル全体が、コンパイル時に定義された最大サイズまで読み取られます。改行文字は入力の終了を示しません。--keyfile-size オプションを使用して、読み取る量を制限できます。

LUKS は、総当たり攻撃から保護し、低エントロピーのパスフレーズにもある程度の保護を提供するために、パスワードベースのキー導出関数 (PBKDF) を使用します(cryptsetup FAQ を参照)。LUKS1 は PBKDF2 アルゴリズムのみをサポートしますが、LUKS2 はメモリ効率の良い Argon2 もサポートします。PBKDF は、コストを使用して設定されます。コストとは、反復の実行時間(CPU コストまたは反復回数)、使用するメモリ量(メモリコスト)、および使用する並行プロセスの数(並行コスト)です。PBKDF2 は反復回数のみをサポートします。cryptsetup は PBKDF ベンチマークを使用して、新しいパスフレーズが初期化されているコンピューターに基づいて最適なコストを計算します。必要に応じて、これらのコストもオーバーライドできます。ただし、ハードコードされた制限があり、詳細は --pbkdf オプションの説明の「MINIMAL AND MAXIMAL PBKDF COSTS」セクションに記載されています。

パスフレーズが LUKS ヘッダーに追加される場合(luksAddKeyluksFormat)、ユーザーはパスフレーズ処理にかかる時間を指定できます。この時間は、PBKDF2 の反復回数を決定するために使用され、より高い時間は、低エントロピーのパスフレーズに対してより優れた保護を提供しますが、luksOpen コマンドの完了にはより時間がかかります。パスフレーズのエントロピーが使用されるキー長よりも高い場合、より高い反復時間はセキュリティを向上させません。

デフォルト設定の 1 ~ 2 秒で、ほとんどの実用的なケースで十分です。例外は、低エントロピーのパスフレーズが遅い CPU を持つデバイスで使用される場合であり、この場合、反復回数が少なくなる可能性があります。遅いデバイスでは、--iter-time オプションを使用して反復時間を増やし、より高い反復回数を得ることをお勧めします。これにより、後続のすべての luksOpen 操作がそれに応じて遅くなります。


無効なパスフレーズ/キーに対する一貫性のない動作

LUKSは、キー スロットが復号化されたときに、有効なパスフレーズがあるかどうかを確認します。

プレーンな dm-crypt の動作は異なります。入力されたパスフレーズは常に使用され、デバイスがロック解除されます。入力されたパスフレーズが間違っている場合、プレーンな dm-crypt によってマップされるデバイスは、間違った暗号化キーを使用し、データは読み取れなくなります。

サポートされている暗号、モード、ハッシュ、およびキー サイズ

利用可能な暗号、モード、ハッシュ、およびキー サイズの組み合わせは、カーネルのサポートによって異なります。/proc/crypto を参照して、利用可能なオプションのリストを確認してください。より多くのオプションを取得するには、追加のカーネル暗号モジュールをロードする必要がある場合があります。

cryptsetup は、カーネル外で多くの操作を実行するため、構成された暗号ライブラリも選択されたアルゴリズムをサポートしている必要があります。一部のアルゴリズムは、cryptsetup がさまざまな暗号バックエンド (ライブラリ) でコンパイルできるため、欠落している場合があります。

パスフレーズに関する注意事項

数学は買収できません。パスフレーズを安全に保管するようにしてください。突然、パスフレーズを思い出すことができなくなった場合に備えて、いくつかの便利な方法があります。これらの代替手段には LUKS が必要です。LUKS のみで複数のパスフレーズを持つことができるためです。ただし、攻撃モデルで許可されている場合は、パスフレーズを密封された封筒に入れてどこかに保管するのも良い方法です。

乱数生成器に関する注意事項

cryptsetup で使用される乱数生成器 (RNG) は、常にカーネル RNG であり、データ ストリームに修正や追加は行われません。

cryptsetup/LUKS には、2 種類の乱数が必要です。1 つは、ソルト、AF スプリッター、および削除されたキー スロットのワイプに使用されます。もう 1 つは、ボリューム キーに使用されます。

最新のカーネル (Linux カーネル 5.6) を使用している場合は、RNG (/dev/random または /dev/urandom) を選択する必要はありません。低エントロピーの状況 (組み込みシステム) では、カーネル RNG の初期化に時間がかかる場合がありますが、これは cryptsetup が開始される前に発生します。cryptsetup --help を使用して、コンパイルされたデフォルトの乱数生成器を表示します。詳細については、urandom(4) を参照してください。

認証されたディスク暗号化 (実験的)

通常のディスク暗号化モードは、長さを維持する (プレーンテキスト セクターと暗号化されたセクターのサイズは同じ) ため、機密保護のみを提供でき、暗号学的に健全なデータ整合性保護を提供することはできません。

認証されたモードでは、各セクターに追加のスペースが必要であり、認証された暗号化 (AEAD) アルゴリズムが使用されます。

データ整合性保護で LUKS2 デバイスを構成すると、基になる dm-integrity デバイスが作成され、データおよびメタデータの更新の原子性を保証するために、追加のセクターごとのメタデータ スペースとデータ ジャーナル保護が提供されます。メタデータとジャーナルに追加のスペースが必要になるため、デバイスで使用できるスペースは、長さを維持するモードよりも少なくなります。


dm-crypt デバイスは、そのような dm-integrity デバイスの上に配置されます。このデバイススタックのすべての有効化と無効化は、cryptsetup によって実行されます。integrity 保護されたデバイスを使用する場合、luksOpen を使用しても違いはありません。LUKS2 デバイスをデータ整合性保護付きでフォーマットする場合は、--integrity オプションを使用します (cryptsetup-luksFormat(8) を参照)。

Linux カーネル 5.7 はスタンドアロンの dm-integrity デバイスに対して TRIM サポートを追加しましたが、cryptsetup(8) は認証付き暗号化モードでディスクカード (TRIM) をサポートできません。これは、基になる dm-crypt カーネルモジュールが、dm-integrity を認証タグスペースアロケーターとして使用する場合にこの機能をサポートしていないためです (cryptsetup-open(8) の --allow-discards を参照)。

一部の整合性モードでは、2 つの独立したキー (暗号化用と認証用) が必要です。これらのキーはどちらも、1 つの LUKS キー スロットに格納されます。

認証モードのサポートは実験的なものであり、現在利用できるモードは限られています。ディスク暗号化に適した認証付き暗号化アルゴリズムはごくわずかです。また、CRC32 やその他の非暗号化チェックサム (特別な整合性モード "none" を除く) は使用できません。何らかの理由で、認証モードを使用せずに整合性チェックを行いたい場合は、LUKS2 とは別に、dm-integrity を個別に構成する必要があります。

ループバックデバイスの使用に関する注意点

cryptsetup は通常、ブロックデバイス (ディスクパーティションまたは LVM ボリューム) で直接使用されます。ただし、デバイス引数がファイルの場合、cryptsetup はループバックデバイスを割り当て、このファイルにマップしようとします。もちろん、ファイルをループデバイスに手動でマップすることもできます。cryptsetup FAQ に例を示します。

デバイスマッピングがアクティブな場合、ステータスコマンドの出力でループバックファイルを確認できます。また、losetup(8) も参照してください。

LUKS2 オンディスクヘッダーのロック

LUKS2 オンディスクメタデータは、いくつかのステップで更新され、適切なアトミックアップデートを実現するために、ロックメカニズムが使用されます。ファイル内のイメージの場合、コードは flock(2) システムコールを使用します。ブロックデバイスの場合、ロックは、ロックディレクトリに保存された特別なファイルに対して実行されます (デフォルトは /run/cryptsetup)。ロックディレクトリは、ディストリビューションによってブートアップフェーズ中に適切なセキュリティコンテキストで作成する必要があります。LUKS2 のみロックを使用し、他の形式ではこのメカニズムを使用しません。

LUKS オンディスク形式仕様

LUKS オンディスクメタデータ仕様については、LUKS1 [https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification] および LUKS2 [https://gitlab.com/cryptsetup/LUKS2-docs] を参照してください。

著者

cryptsetup は、Jana Saout <_> によって最初に作成されました。LUKS 拡張機能と元の man ページは、Clemens Fruhwirth <_> によって作成されました。man ページ拡張は Milan Broz <_> が行い、man ページの書き換えと拡張は Arno Wagner <_> が行いました。


バグの報告

バグは cryptsetup メーリングリスト <_> または Issues プロジェクトセクション [https://gitlab.com/cryptsetup/cryptsetup/-/issues/new] で報告してください。

失敗したコマンドの出力に --debug オプションを追加して添付してください。

関連項目

Cryptsetup FAQ [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions]

cryptsetup(8)、integritysetup(8)、および veritysetup(8)

CRYPTSETUP

cryptsetup プロジェクトの一部 [https://gitlab.com/cryptsetup/cryptsetup/]。