フルディスク暗号化が答えるのはただひとつの問いです。ストレージを手にした攻撃者が、電源の切れたマシンから何を得られるか、という問いです。それ以外の問い——ホストに何が見えるか、稼働中のサーバーが押収されたらどうなるか、バックアップは安全か——にはそれぞれ別の答えがあり、これらをひとつの問いとして扱うことが、何も守らない暗号化を生む原因になります。
この違いをはっきりさせておく価値があります。「LUKSで暗号化済み」という文言は、このプライバシーホスティング業界のあらゆるページに登場するからです——当社のページも例外ではありません。それは実在する対策であり、運用コストはほとんどかからず、同時にホスティング業界で最も過大に語られる対策でもあります。本ガイドでは、レンタルサーバーにおいて保存時の暗号化が実際に何を防ぐのか、導入する価値のある3つの構成とそれぞれのコマンド、小規模VPSで本当に重要になる2つの設定、そして暗号化を単なる飾りに変えてしまう一握りのミスを解説します。
保存時の暗号化が実際に守るもの
保存時の暗号化とは、ボリュームが閉じている間、ストレージ媒体上のバイト列が暗号文になっていることを意味します。これは限定的な主張であり、その価値はただひとつの変数——攻撃者が到達した瞬間に鍵がどこにあるか——にかかっています。
| 状況 | LUKSは役に立つか |
|---|---|
| ドライブが廃棄された、保証交換で返却された、あるいは耐用年数の終わりに転売された | 役に立つ——教科書的なケースであり、劇的なケースよりもはるかによくある |
| マシンが電源を切った状態で押収された、あるいはストレージがラックから抜き取られた | 鍵がそのマシンの上に残っていない限り役に立つ |
| サーバー稼働中にプロバイダーが仮想ディスクをコピーする | コピー自体は暗号文——だが鍵は同じ物理ホストのRAM上にある |
| ハイパーバイザーレベルの攻撃者がゲストのメモリをダンプする | 役に立たない。ロック解除済みボリュームの鍵はカーネルメモリ上にある |
| 稼働中のサーバーでroot権限を奪われる | 役に立たない。ファイルシステムはマウント済みで、あなたと同じようにそのまま読み取られる |
| バックアップが平文のままボックスの外に出る | 役に立たない。それは送信先ではなく送信元で解決すべき問題 |
| パスフレーズの提出を命じられる | 技術的な問いではない——詳しくは後述 |
これは失望ではなく、定義として読んでください。ドライブ持ち出し型の露出を取り除くことが1時間の作業に見合うのは、まさにそれが他に防御手段のないクラスであり、かつ誰にも狙われずに起こるクラスだからです。ハードウェアは故障して返却され、アレイは退役し、ボリュームは次のテナントに再割り当てされます。暗号化はそのすべてを、何も起きなかったことに変えます。

VPSがノートPCとは違う理由
ノートPCでは設計が自明です。起動時にパスフレーズを入力し、鍵はマシンが動いている間だけRAM上に存在し、電源を切ればそこで話は終わります。サーバーにはコンソールの前に誰もいません。何かが毎回の起動時に鍵を供給しなければならず、その「何か」の候補はそれぞれ可用性と保護のどちらを取るかを取引します。
- 人間が入力する。最も強力な構成です。鍵が一度もマシン上に残らないからです——しかしあなたがいなければサーバーは再起動から戻ってこられず、OSが存在する前に入り込む手段が必要になります。
- マシン自身が保持する。便利ですが、自作のセットアップの多くでは自己矛盾に陥ります。同じ仮想ディスク上の鍵ファイルは、そのディスクを手にした者が鍵も手にすることを意味します。
- 別のマシンが引き渡す。ネットワーク経由のロック解除で、通常はClevisとTangサーバーの組み合わせです。サーバーは自分が管理するホストに到達できる間だけ自動でロックを解除します。これは実用的に有用な性質であり——信頼を消し去るのではなく、置き場所を移すだけです。
ほとんどのガイドが見落とす、もうひとつの違いがあります。VPSでは/bootとinitramfsが平文であり、最終的にはプロバイダーが管理するストレージ上に存在し、検証できるブートチェーンが存在しません——あなた自身が所有するTPMも、測定されたブートも、証明できるものも何もありません。あなたのパスフレーズを欲しがるホストは、initramfsを改ざんし、次にロックを解除したときにそれを収集することができます。これは当社が何かをしているという記述ではなく、アーキテクチャが何を許すかという記述であり、借りているコンピューターについて考える唯一の誠実な方法です。当社のVPSと専用サーバーの比較ではハードウェア側から同じ信頼境界を扱っており、オフショアの匿名性についての正直な回答ではそれを取り巻くマーケティングにも同じ姿勢を当てはめています。
導入する価値のある3つの構成
唯一絶対の正しいセットアップというものはありません——あるのは、その失敗モードを受け入れられるかどうかだけです。以下の3つで、実質的にすべての実際のケースをカバーできます。
| 構成 | 何を守るか | 再起動のコスト | ロックアウトのリスク |
|---|---|---|---|
| 1.暗号化データボリューム、起動後に手動で開く | 重要なデータ——データベース、メールストア、書類、鍵 | サーバーは自力で復帰し、ボールトはあなたを待つ | 非常に低い |
2.dropbearによるリモートロック解除を伴うフルルートLUKS | すべて——システムログ、設定、スワップ、あらゆるもの | 起動完了前に、毎回SSH経由であなたが必要 | 実在する——initramfsのネットワーク設定が壊れるとボックスが立ち往生する |
| 3.インストール時に暗号化されたベアメタル、IPMI経由でパスフレーズを入力 | すべて、しかも鍵の下にハイパーバイザーが存在しない | アウトオブバンドコンソールで、毎回あなたが必要 | 低い——IPMIは独立した入口 |
特別な理由がない限り、まず1番目から始めてください。運用リスクをごくわずかに抑えながら保護の大部分を得られ、他の2つにはない性質をひとつ備えています——何があってもサーバーがオンラインに復帰するのを止められない、という性質です。3番目の構成だけは、パスフレーズがホストの約束ではなく、ホストが到達できない事実になります。だからこそ当社の専用サーバーはインストール時にLUKSを設定し、そのパスフレーズを当社が一切目にすることはありません。
稼働中のVPSでデータボリュームを暗号化する
まず手を付けるべきはこの構成です。何も再インストールせず、起動プロセスも一切変わらず、失敗した場合の最悪の結果はコンテナファイルを1つ捨てることだけです。稼働中のDebianまたはUbuntuサーバーで15分あれば終わります。
- ツールをインストールする。
apt install cryptsetup。プランに2つ目のブロックデバイスが付いている場合は、それを直接使い、次の手順は飛ばしてください。 - コンテナを作成する。単一ディスクのVPSでは、実用的な方法はファイルです。
fallocate -l 40G /var/lib/vault.img。これはディスクのように振る舞い、後から拡張できます。 - LUKS2としてフォーマットする。
cryptsetup luksFormat --type luks2 /var/lib/vault.img。暗号方式はデフォルトのままにしてください。小規模サーバーで手を加える価値のある唯一のパラメータについては、後述のセクションで扱います。 - 開いてファイルシステムを作成する。
cryptsetup open /var/lib/vault.img vaultを実行すると/dev/mapper/vaultが得られます。続けてmkfs.ext4 /dev/mapper/vault、mount /dev/mapper/vault /srv/vaultを実行します。 - 重要なデータを移動し、サービスをそこに向ける。バインドマウント、またはサービスを止めた上での
rsyncの方が、シンボリックリンクよりも通常はきれいに片付きます——特にデータベースは、あちこち付いて回られるのを嫌います。 - LUKSヘッダーをバックアップする。
cryptsetup luksHeaderBackup /var/lib/vault.img --header-backup-file vault-header.binを実行し、そのファイルをサーバーの外に移してください。コンテナ先頭の数キロバイトが壊れるだけで、その先にあるすべてのバイトが恒久的に失われます。これが存在する唯一の保険です。 - 閉じて、再び開けることを確認する。
umount /srv/vault && cryptsetup close vaultを実行し、記憶ではなくメモを見ながらもう一度開いてみてください。中に価値あるものが入る前に、これを済ませておきます。
再起動後、ボールトはあなたがログインして開くまで閉じたままです。これは回避すべき制約ではなく——それこそが要点です。自動で開くボリュームは、鍵がマシン上にあるボリュームです。
shredは設計上信頼できません——上書きしている層は、データを実際に保存している層ではないからです。対象が本当に機微な情報であるなら、古いサーバー上で暗号化に移行するのではなく、新しいサーバーで最初から暗号化して始めてください。SSH経由のリモートロック解除によるフルルート暗号化
電源を切った状態での押収を生き延びて読み取り可能なものが何一つ残らないことが要件になる場合——ログ、シェル履歴、パッケージ一覧、実行しているものの輪郭まで——ルートファイルシステムもコンテナの中に収める必要があります。すると問題は、まだ起動していないマシンにどうやってパスフレーズを渡すかに変わり、その答えがinitramfsの中で動く小さなSSHサーバーです。
- 最初から暗号化してインストールする。カスタムISOアップロードからディストリビューションのインストーラーを起動し、暗号化LVMを使ったガイド付きパーティション分割を選びます。稼働中のルートファイルシステムをその場で変換することも可能ですが、リスクに見合いません。
- 起動前SSHサーバーを追加する。
apt install dropbear-initramfsを実行し、公開鍵を/etc/dropbear/initramfs/authorized_keysに置きます。これは通常のSSHとは別の鍵セットです——専用の鍵を使ってください。 - 締め付ける。
/etc/dropbear/initramfs/dropbear.confでDROPBEAR_OPTIONS="-I 180 -j -k -p 2222 -s"を設定します。パスワードログイン不可、ポートフォワーディング不可、専用ポート、そして詰まったセッションが起動を止めたままにしないためのアイドルタイムアウトです。 - initramfsにネットワークを与える。静的な
ip=パラメータをGRUB_CMDLINE_LINUX(/etc/default/grub内)に追加します——形式はip=address::gateway:netmask::interface:offです。この段階でDHCPに頼ることが、締め出しの典型的な原因になります。 - 再構築して再起動する。
update-initramfs -u && update-grubを実行し、再起動後にssh -p 2222 root@your-serverで接続してcryptroot-unlockを実行します。クライアントは未知のホスト鍵について警告します。initramfsは独自の鍵を持っており、これは想定どおりで、別のknown_hostsエントリとしてピン留めしておく価値があります。 - 頼る前に失敗パスをテストする。カーネルアップデートをインストールし、再起動し、もう一度ロックを解除します。カーネルのアップグレードはinitramfsを再生成するため、まさにそのタイミングで設定ミスが表面化します。
dropbearが起動に失敗した場合、SSHはあなたを助けられません——戻る唯一の方法は、OSが動く前から機能するコンソールです。すべてのServHidden VPSにはVNCコンソールアクセスが付属し、すべての専用サーバーには完全なIPMI/KVMがあるため、復旧経路は確保されています。それを持たないプロバイダーでは、構成1だけが責任ある選択です。本当に重要な2つの設定と、小規模VPSの落とし穴
LUKS2はデフォルトで512ビット鍵のAES-XTSとArgon2id鍵導出を使います。どちらも適切な選択です。暗号方式を手動で調整すると、遅くて弱いものが同時にできあがることが多く、ネット上にはまさにそれをやってしまったコマンドラインのコピーがあふれています。ただし、注意を払う価値のあることが2つあります。
性能は問題にならない——問題になるまでは
grep -m1 -o aes /proc/cpuinfoでハードウェアアクセラレーションの有無を確認し、cryptsetup benchmarkで計測してください。AES-NIを備えたCPUであれば——当社が運用するすべてのノードがそうです——AES-XTSは1コアあたり毎秒数ギガバイトを処理でき、単一の仮想ディスクが出せる速度を余裕で上回ります。そのため実際に見えるコストは、I/Oが重い状況下でのCPU使用率の数パーセントと、わずかなレイテンシ増加だけです。AES-NIがないと状況は逆転し、暗号化がボトルネックになります。これが、代替の暗号方式を選ぶことが単なる儀式ではなく本当の判断になる唯一のケースです。
効いてくるのはArgon2idのメモリ
Argon2idは意図的にメモリを大量に消費するよう設計されており、cryptsetupはフォーマット時に、そのマシンが積んでいるRAMを基準にパラメータを校正します。32 GBのワークステーションでボリュームをフォーマットし、それを1 GBのVPSに移すと、鍵導出が要求するメモリが存在しないため、ロック解除が完全に失敗することがあります——稼働中のシステムよりもさらに使えるメモリが少ないinitramfsの中では、なおさらです。小規模インスタンスでは値を固定してください。cryptsetup luksFormat --type luks2 --pbkdf argon2id --pbkdf-memory 262144 /dev/vdbは256 MBに上限を設定します。値を下げるとオフラインの総当たり攻撃への耐性が実際に低下するため、その分パスフレーズを長くして補ってください。
コピー&ペーストではなく意識的な判断に値するオプションフラグが1つあります。--allow-discardsはTRIMを下層のデバイスにそのまま通すもので、SSDの摩耗と定常状態の性能には有利ですが、同時にボリュームのどれだけが使用中か、おおよそどこが使用中かも露呈します。デフォルトでは無効になっています。何が漏れるかを理解した上で有効にしてください。
スワップ、ログ、スナップショット——忘れられがちな部分
周囲から平文が漏れ出している暗号化ボールトは、あらゆる失敗の中で最もよくあるものであり、誰かが確認するまで気づかれないままです。
- スワップ。メモリ上のものは何でもディスクにページアウトされ得ます。ボールトに慎重に入れた素材も例外ではありません。スワップを無効にするか、
/etc/crypttabにswap /dev/vdb1 /dev/urandom swap,cipher=aes-xts-plain64,size=256のような行を書いて毎回の起動時にランダムな鍵を与えてください。 - あなたが見ていない場所に書き込まれるすべてのもの。
/var/log、/tmp、データベースのデータディレクトリ、/var/lib/docker、シェル履歴、systemdジャーナル。/srv/vaultを暗号化しても、PostgreSQLが/var/lib/postgresqlに書き込んでいるなら、まったく何も達成しません。暗号化する前に洗い出してください。 - スナップショット。暗号化されたボリュームのブロックレベルのスナップショットは暗号文であり、問題ありません。メモリの状態を捉えるスナップショットはまったく別物で、鍵を含みうるものです。プロバイダーのパネルがどちらの種類を取得するのか、使う前に確認してください。
- バックアップ。これを解決すべき場所は送信先ではありません。resticやBorgBackupのようなツールは送信元で暗号化し、送信先は鍵を一切目にしません。だからこそバックアップサーバーは、信頼できるマシンである必要はなく、別の法域にある普通のマシンで構いません。
- すでにどこかへ送ってしまった平文。保存時の暗号化は遡って効くものではありません。すでにコピーされた、メールで送られた、あるいは別の場所に同期されたものは、今あなたが引いている境界の外側にあります。
鍵の置き場所がすべてを決める
上記のどの構成も、実質的には鍵の管理方法についての表明です。選択肢は4つあり、それらは同等ではありません。
- 頭の中にあり、毎回の起動時に入力する。保護は最大、運用上の手間も最大です。あなたなしでは、マシンは本当に読み取れません。
- 暗号化されたマシン上のファイルにある。単純なディスク転売以外には何も守りません。そのファイルが平文の
/bootの上にあるなら、何も守らないのと同じです——セルフホスト型暗号化における最も一般的なミスです。 - あなたが管理するマシンにあり、ネットワーク経由で取得する。Tangサーバーに紐づけたClevisです。
clevis luks bind -d /dev/vdb tang '{"url":"https://tang.example.net"}'。サーバーは自宅に到達できる間は無人で起動し、それ以外の場所では一切ロックを解除しません。ヘッドレスな機材群には最適で、その代わりTangホストこそが守るべき対象になります。 - TPMの中にある。自分で所有するハードウェア上では意味があります。VPSでは、仮想TPMはあなたが排除しようとしているのと同じハイパーバイザーが提供しているため、これは信頼ではなく利便性を解決するにすぎません。
ほとんどの設計は、たった一つのテストで判定できます。あなたがいなくてもマシンがログインプロンプトに到達できるなら、鍵はマシン上にあります。それは十分に理にかなったトレードオフであることもあります——多くのワークロードは、執念深い攻撃者への耐性よりも、無人での再起動を望みます。選択は意識的に行い、その結果を実態とは違うものとして語らないでください。
ホストに見えるものと、そこから先を法域が引き継ぐ理由
VPSでは、あなたの下にハイパーバイザーが存在します。当社はゲストのメモリを読み取らず、トラフィック・接続・DNSのログも、コンソールの記録も残しません——ですがそれらはあくまでポリシーであり、正直に言えばVPSはそれを信頼することをあなたに求めているのです。ベアメタルでは、あなたとシリコンの間にハイパーバイザーが存在しません。インストール時に設定され、当社が一切受け取らないパスフレーズによるフルディスク暗号化は、当社からの保証ではなく、マシンの物理的な性質そのものです。あなたが実際に選んでいるのは暗号方式の違いではなく、この違いです。
だからこそ、暗号化と法域はひとつの答えの両輪です。暗号化はディスクのコピーがどれだけの価値を持つかを決め、法域はどの手続きを通じて、どれだけ速く、誰がマシンの提出を強制できるかを決めます。当社は7つの法域——アイスランド、スイス、パナマ、ルーマニア、モルドバ、オランダ、ロシア——で展開しており、どれを選ぶべきかの考え方は当社の法域選びガイドに、より手短な形は法域セレクターとロケーションページにまとめています。
暗号化が手を出せない部分が強制開示です。狙われているのはハードウェアではなくあなただからです。イギリス、フランス、オーストラリアは、復号鍵の提出を人に義務づけ、拒否すれば罰則を科すことができる法律を持つ国々の一部です。この露出はあなたがどこにいるかに従うのであって、サーバーがどこにあるかには従いません。ボックス上のどんな設定も、それを変えることはできません。身分証明書なしで登録することは、そもそも残る紙の記録の量を制限します——これが、ノーKYCホスティングと暗号化が同じ話の中に登場することになる、実務的で地味な理由です——ですが、すでにあなたの名前を把握している裁判所に対する防御にはなりません。
暗号化を単なる飾りに変える9つのミス
- 同じディスク上の鍵ファイルから自動でロックを解除する。「暗号化された」サーバーの大半はこれに当てはまり、鍵を鍵穴に挿しっぱなしにしているのと同じです。
- 機微なデータが一度も届かないボリュームを暗号化する。ボールトは空で、データベースはその中に入っていません。
- LUKSヘッダーを一度もバックアップしない。コンテナ先頭のセクターが1つ壊れるだけで、その先のすべてのバイトが永久に失われます。
- ロック解除の経路を一度もテストしない。やがてカーネルのアップグレードがinitramfsを再生成し、次の再起動が救出作業になります。
- 大きなマシンでフォーマットし、小さなマシンでロックを解除する。Argon2idはVPSが用意できないメモリを要求し、ボリュームは開きません。
- ログインパスワードのようにパスフレーズを選ぶ。鍵導出関数を除けば、オフライン攻撃を制限するものは何もありません。時間を稼ぐのは長さです。
- 平文を暗号化に移行し、元のデータが消えたと思い込む。仮想化されたストレージでは、上書きは確実に消去してくれません。
- ボックスの管理に使うのと同じチャネルでパスフレーズを送る。それが生む相関の問題はサーバーOpSecで扱っています。
- プロバイダーの暗号化と自分の暗号化を混同する。「すべてのインフラは保存時に暗号化されている」——当社も例外ではありません——という言葉が守るのはインフラです。あなたを守るのは、あなたが保持する鍵だけです。
結局、VPSでやる価値はあるのか
あります。ただし期待値を調整した上での話です。1時間の作業と、測定できるほどの運用コストもかからずに、暗号化データボリュームはほかに対処しようのない露出のクラスをまるごと取り除き、しかも恒久的に取り除きます。退役したハードウェア、再割り当てされたストレージ、他人の手元で電源を切られたマシン——といったものです。重要なものを保持するすべてのサーバーで、最初の1時間のハードニングチェックリストを終えた直後にこれだけはやっておいてください。
暗号化がしないことは、レンタルしたコンピューターをあなた自身のコンピューターに変えることです。脅威モデルの中でホストそのものが攻撃者になっているなら、どんな暗号方式もそれを解決しません——その答えは、鍵をIPMI経由で入力しハイパーバイザーを一切通過させない専用ハードウェアであり、意図的に選んだ法域であり、そこにある必要のないものはどのサーバーにも置かないという規律です。制御を実際の脅威に一致させることこそが、プライバシーとその見せかけとの違いです。