ハードドライブ暗号化キーをマシンに保存せずに起動時にマウントするにはどうすればよいですか?

ハードドライブ暗号化キーをマシンに保存せずに起動時にマウントするにはどうすればよいですか?

設定:私はUSB HDDでRaspberry Piを使用しており、Arch Linuxを実行しています。物事を同期自分だけの「クラウド」同期のため。

質問:物理的な侵入によってHDDパイとHDDが盗まれた場合は、HDD内のファイルを機密に保つようにしたいと思います。

現在の高レベルのアイデア:ハードドライブを暗号化し、ネットワークサーバーにキーを保存します。起動時にキーがダウンロードされ、パスワードが復号化されてインストールされます。 HDD / SDカードにキーを保存しないでください。盗難が発生した場合は、Webサーバーでキーの提供を中止してください。

Q:どうやって始めますか?

(crypttabはこの問題を解決できますか?自分のシステムデバイスを書くのが良いでしょうか?他のアイデアやソリューションも歓迎します)

ベストアンサー1

設定する最も簡単な方法は、プレーンテキストシステムパーティション(SDカードにあるようです)と暗号化されたデータパーティションを持つことです。データパーティションはdmcryptを使用して暗号化され、キーはサーバーからダウンロードしたキーファイルに保存されます。

サーバーインフラストラクチャの設定から始めて、キーファイルをダウンロードし、それを使用して暗号化されたボリュームを作成するか、既存のボリュームcryptsetup luksFormat /dev/sdb1 /run/data.keyfileにキーを追加しますcryptsetup luksAddKey /dev/mapper/encrypted /run/data.keyfile。パスワードまたはキーファイルを使用してボリュームのロックを解除できるため、管理が簡単です(サーバーが利用できない場合でもパスワードを入力できます)。

キーファイルは特定の形式である必要はありません。サーバーからランダムなバイトを生成するだけです。 16バイトで十分です(より多くの場合、より良いセキュリティを得ることはできませんが、より少ないとより良いパフォーマンスを得ることはできません)</dev/urandom head -c 16 >pi.keyfile

覗き見を避けるために、HTTPSを使用してキーを提供してください。 CA検証証明書がない場合は、自分で作成して/etc/ssl/certsダウンロードコマンド(wget --ca-certificate /etc/local/my.certまたはcurl --cacert /etc/local/my.cert)に追加または転送してください。

ボリュームを有効にする前にキーをダウンロードする必要があります。次のいずれかを使用して、1つの手順でこれを実行できます。

wget -nv -O - https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin
curl https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin

または、キーを一時ファイルとしてダウンロードしてからボリュームを有効にし、最後に(必須ではありませんが、セキュリティをわずかに向上させることができます)、一時ファイルを削除することもできます。この一時ファイルの元の場所は/runRAMにあり、ルートとしてのみ書き込むことができます(永続ストアにキーをダウンロードしないでください)。ルートでのみファイルを読み取ることができるように設定する必要があります(umask 700ダウンロードする前にスケジュールを設定できます)。これは、起動時に実行されるすべてのコードを制御しない場合にのみ重要です。

キーを一時ファイルとしてダウンロードする場合は、キーファイルをに挿入して/etc/crypttabsystemdデバイスを追加してボリュームを有効にする前に(しかしネットワークが利用可能になった後)、実行されているキーファイルをダウンロードして他のデバイスを追加して削除できます。それからキーファイル。インストールが簡単にwget … | cryptsetup …見えます/etc/rc.local

クライアントがキーをダウンロードすると、クライアントを認証できます。認証トークンはPiにプレーンテキストとして保存する必要があります。 SSL クライアント証明書を使用できます。

curl --cert /etc/keyfile.cert https://myserver.example.com/pi.keyfile
wget --certificate /etc/keyfile.cert https://myserver.example.com/pi.keyfile

または、HTTP基本認証を使用するパスワードとして保存されます。/root/.netrc:

curl -n --user=pi https://myserver.example.com/pi.keyfile
wget --user=pi /etc/keyfile.cert https://myserver.example.com/pi.keyfile

サーバー側で基本認証を構成する方が簡単に設定できます。特殊文字</dev/urandom | head -c 16 | base64なしでランダムに生成されたパスワードを使用してください。

何をしてもPiを盗む人は誰でも最初に送信者側でブロックしないとパスワードを取得し、鍵をダウンロードできます。また、Piに物理的にアクセスできる人は、SDカードをすばやく取り出し、コピーを作成して再接続することができます。稼働時間以外の項目を監視しないと、これは停電のように見えます。これを完全に防止する方法はありません。スマートカードにキーを入れることで、攻撃者がキーをコピーするのを防ぎますが、スマートカードを盗んだり、その場でキーファイルをダウンロードしたりすることはできません。

繰り返しますが、物理的にアクセスできる人がキーファイルをすばやくダウンロードしてから、空き時間にディスクを盗んで復号化するのを防ぐことはできません。これを避けるために、さまざまな価格で提供される改ざん防止ハードウェアを調べることをお勧めします。

おすすめ記事