リモートで暗号化されたハードディスクをロック解除する

2026/03/06 3:43

リモートで暗号化されたハードディスクをロック解除する

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

この記事では、Arch Linux システムのブートパーティションを暗号化し、ルートファイルシステムが復号される前にネットワーク経由でアクセス・ロック解除できるように設定する方法を説明しています。

  1. 必要なパッケージのインストール

    pacman -S dropbear
    と AUR パッケージ
    mkinitcpio-systemd-extras
    mkinitcpio-tailscale
    をインストールします。

  2. mkinitcpio の設定:既存のフックに加えて、

    sd-network tailscale sd-dropbear
    /etc/mkinitcpio.conf
    に追加し、
    SD_NETWORK_CONFIG=/etc/systemd/network-initramfs
    を設定します。

  3. initramfs で Tailscale をセットアップ

    setup-initcpio-tailscale
    を実行し、Web コンソールでマシンに
    tag:initrd
    タグを付与し、キーの有効期限を無効化します。

  4. Dropbear の設定

    SD_DROPBEAR_COMMAND="systemd-tty-ask-password-agent"
    を設定し、公開鍵を
    /root/.ssh/authorized_keys
    にコピーしてからホストキーを生成します(
    dropbearkey -t ed25519 -f /etc/dropbear/dropbear_ed25519_host_key
    )。

  5. 早期ネットワークの有効化:DHCP を使用した

    /etc/systemd/network-initramfs/10-wired.network
    を作成し、initramfs を再構築します(
    mkinitcpio -P
    )。

  6. ブートローダーエントリの調整:systemd-boot で

    rootflags=subvol=/@,x-systemd.device-timeout=0
    を追加し、復号プロンプトが無期限に待機するようにします。

  7. 再起動してロック解除:再起動後、Dropbear を介して

    <hostname>-initrd
    に SSH 接続し、
    systemd-tty-ask-password-agent
    で暗号化ディスクのパスフレーズを入力します。

このガイドでは、物理アクセスが不可能なヘッドレスサーバーや IoT デバイスに最適であることを強調し、さらに Tailscale の ACL やキー有効期限の無効化などの追加セキュリティ対策を提案しています。

本文

あなたのミッション(もし受け入れる意思があるなら)は、起動プロセスの最初の段階に忍び込み、スタートアップ設定を壊すことなく差し替え、痕跡を残さず離脱することです。
準備はできましたか?始めましょう。


設定

ここでヒーローたちが紹介され、舞台が整えられます。

長い間、私はバッテリーが持続しない古い ThinkPad を使っていました。特に Windows では寿命が短く、旅行先で頻繁に電源が切れてしまいます。家から離れるときは、SSH で自宅のデスクトップに戻り、ラップトップのバッテリーがなくても永続的な状態を保ち、さらに高速ビルドでバッテリー消耗を抑えるようにしています。

これには二つの小さな問題があります:

  • 時々家が停電し、デスクトップがシャットダウンします。
  • 電源が復旧すると、新しいパブリック IP が割り当てられることがあります。

長い間、BIOS の「Restore AC Power Loss」の後に「Power On」を有効化することで 1 を解決し、Tailscale で 2 を対処してきました。しかし最近、暗号化されたブートパーティションを持つ Arch をインストールしたため、起動が完了するまで暗号鍵の入力が必要になりました。
それならば、initramfs に Tailscale を入れるとどうでしょう?


計画

ここで勇敢なヒーローたちは今後直面する課題を描きます。

initramfs

Linux の起動初期は、実際には小型の第二オペレーティングシステムが実行されるだけです。これは

/boot
にある圧縮アーカイブからロードされ、メモリ上で実行されます。永続ストレージへのアクセスはありません。このメモリ上で動作する OS を initramfs(initial RAM filesystem)と呼びます。

したがって、次のような画面を見たら:

これは実際には完全に機能する OS です。PID やサービス管理もすべて揃っています。

ということは、その上で何かをインストールできるわけです。

制約

以下の三つが課題となります:

  1. initramfs 内でのネットワーク
  2. initramfs への Tailscale
  3. initramfs での SSH

さらにセキュリティも重視したいので、追加で検討すべき点があります:

  • initramfs に Tailscale を入れると、暗号化されていない鍵が残ります。
  • Tailscale の鍵はデフォルトで 90 日後に失効します。すると全てが壊れます。
  • 初期起動環境に SSH アクセスを許可したくありません。

これらは次のように解決できます:

  1. Tailscale ACL を使い、initramfs へのインバウンドのみ許可しアウトバウンドは禁止する。
  2. 鍵の有効期限を無限に設定する。
  3. SSH サーバーで実際のロック解除コマンド(
    systemd-tty-ask-password-agent
    )以外はすべて拒否する。

Tailscale ACLs

Tailscale の ACL(アクセス制御リスト)について簡単に説明します。
ユーザーは特定のログイン方法に紐づいており、パスキーを追加すると元のアカウントとは別個のユーザーとして扱われます。さらに「グループ」や「オートグループ」、ホスト(ネットワークに接続したマシン)、タグが存在します。

タグはユーザーではなくホストをまとめるために使われ、ホストにタグを付与すると、そのログイン方法として扱われます。その結果、

autogroup:member
にはタグ付きマシンは含まれません。

したがって次のようなポリシーを書けます:

{
  // デバイスに適用できるタグとそれを使用するユーザーを定義
  "tagOwners": {
    "tag:initrd": ["autogroup:admin"]
  },

  // ユーザー、グループ、オートグループ、タグ、Tailscale IP、サブネット範囲の ACL を定義
  "acls": [
    {"action":"accept","src":["autogroup:member"],"dst":["*:*"]}
  ],

  // 保存時にアクセスルールをテスト
  "tests":[
    {
      "src":"100.76.34.8",
      "accept":["100.102.101.127:22","100.101.55.73:10078"]
    },
    {
      "src":"100.102.101.127",
      "deny":["100.101.55.73:10078"]
    }
  ]
}

これは「ユーザーアカウントに紐づくデバイスは他の任意のデバイスへアクセスでき、タグ付きデバイスには全ての権限が与えられない」という意味です。


Systemd で起動前

initramfs はほぼ通常の Linux システムと同じため、独自の

init
PID 1 を持ちます。Arch ではその PID が systemd です。つまり initramfs に systemd サービスを追加できるわけです! Arch には mkinitcpio-systemd-extras というパッケージに多くのサービスが用意されており、
mkinitcpio
は initramfs を再生成するツールです。

ここでは SSH サーバー(dropbear)とネットワーク起動(

sd-network
)を追加します。


盗み作戦

以下は Arch システムで実行すれば、著者が持つのとほぼ同じ構成になる手順です。多くのコマンドは root 権限で実行してください。

  1. dropbear SSH サーバーをインストール

    pacman -S dropbear
    
  2. systemd パッケージをインストール

    yay -S mkinitcpio-systemd-extras mkinitcpio-tailscale
    
  3. /etc/mkinitcpio.conf
    にネットワーク (
    sd-network
    )、tailscale (
    tailscale
    ) と dropbear (
    sd-dropbear
    ) を追加:

    HOOKS=(base systemd autodetect microcode kms modconf block keyboard sd-vconsole plymouth sd-encrypt filesystems)
    +HOOKS=(base systemd autodetect microcode kms modconf block keyboard sd-vconsole plymouth sd-network tailscale sd-dropbear sd-encrypt filesystems)
    
  4. 新しい Tailscale デバイス用の鍵を設定

    setup-initcpio-tailscale
    
  5. Tailscale の Web コンソールで新デバイスに

    tag:initrd
    を付与し、キーの有効期限を無効化。

  6. /etc/mkinitcpio.conf
    で dropbear が実行できるコマンドを限定

    SD_DROPBEAR_COMMAND="systemd-tty-ask-password-agent"
    
  7. systemd に暗号パスワード入力を永遠に待機させる。systemd‑boot を使っている場合は

    /boot/loader/entries/linux-cachyos
    の options セクションで
    rootflags=subvol=/@
    を次のように拡張:

    rootflags=subvol=/@,x-systemd.device-timeout=0
    
  8. 公開鍵を

    /root/.ssh/authorized_keys
    にコピー(dropbear フックが拾う):

    cp ~/.ssh/authorized_keys /root/.ssh/
    
  9. dropbear 用の新しい公開/秘密鍵ペアを生成:

    dropbearkey -t ed25519 -f /etc/dropbear/dropbear_ed25519_host_key
    
  10. 初期ネットワーク設定
    以下はイーサネット接続のみ対象。

    /etc/systemd/network-initramfs/10-wired.network
    に次を追加:

    [Match]
    Type=ether
    
    [Network]
    DHCP=yes
    

    そして

    sd-network
    フックで読み込むように
    /etc/mkinitcpio.conf
    を登録:

    SD_NETWORK_CONFIG=/etc/systemd/network-initramfs
    
  11. initramfs の再構築

    mkinitcpio -P
    
  12. 再起動。

    $(hostname)-initrd
    に SSH で接続でき、次のようなプロンプトが表示されるはずです。


逃走

ここでは教訓を述べ、シーンを締めくくります。

要点は、コンピュータに「不可能だ」と思うことがあるなら、もっと攻撃的に取り組む価値があるということです。
(私は Windows を信じていますが、確信はあまりありません)


時折

/boot/EFI

ここで「initrd」は「initramdisk」の略であり、私たちの initramfs システムを指します。

詳細は sd-dropbear のドキュメントをご覧ください。

同じ日のほかのニュース

一覧に戻る →

2026/03/06 1:04

多数の管理者アカウントが侵害された後、ウィキペディアは読み取り専用モードになった。

## Japanese Translation: **概要:** 本書は、2026年2月20日から3月5日にかけて Wiki サービスに影響を与えた一連の技術的インシデントを記録しています。 - **2月20日:** 19:28 UTC に問題が確認され、19:44 UTC に修正が適用されました。23:33 UTC に監視を再開しました。 - **2月25日:** 16:40 UTC に調査が開始され、17:24 UTC に解決しました。 - **2月26日:** 16:25 UTC に修正で問題が解消され、16:58 UTC に監視を開始しました。 - **3月3日:** 10:09 UTC にデータベースサーバーの問題が検知され、10:24 UTC に修正が適用されました。10:17 UTC に監視更新が行われました。 - **3月5日:** 16:11 UTC に問題が確認され、17:09 UTC に初期修正(読み書き復旧)が実施されました。さらに編集は17:36 UTC の追加修正まで無効のままでした。18:36 UTC に監視を継続し更新しました。 3月4日、2月1–2、2月27–28、2月22–24、または2月21日はインシデントが報告されていません。 インシデントは運用上の問題、性能低下、一部停止、大規模停止、およびメンテナンスカテゴリにわたります(ただし各イベントに対する具体的なカテゴリは割り当てられていません)。 すべての修正後、チームは安定性を確認するために継続的監視を実施し、完全回復を宣言しました。ユーザーは一時的な読み取り専用アクセスと編集制限を経験し、継続的な Wiki 利用が必要な企業や教育グループの協力に影響を与える可能性があります。新たな症状が出現した場合に備えて、引き続き観測が行われることが示唆されています。 *この拡張版がご要望に合致する場合は、元の概要を置き換えることができます。*

2026/03/06 2:44

**「ブランドの時代」**

## 日本語訳: **要約:** スイスの時計業界は、1970年代に起こったクォーツ危機によって軌道を変えました。この危機は日本企業の競争とフランス・米ドル為替レートの急騰が引き金となり、ユニット販売数は1970年代初頭から1980年代初頭にかけて約3分の2減少しました。その結果、多くのメーカーは破綻または買収を余儀なくされました。残存した数社は純粋な技術的精密さから**ブランド主導のラグジュアリー**へとシフトしました。 視覚的マイルストーンがこの転換を確固たるものにしました:パテック・フィリップの1968年「ゴールデン・エリプス」ケース、オーデム・ピゲの1972年ロイヤルオーク(ジェラルド・ゲンタ設計)、そして1976年のノーティラスはすべて技術的洗練よりも瞬時に認識できるデザインを強調しました。1984年にはパテックの広告代理店長レネ・ビッテルが「ホブナイル・カラトラバ」(3919)を提唱し、手巻き機構と独特な模様が投資銀行家の注目を集め、1987年までに売上を急増させました。 メカニカル時計は**高級アクセサリー**として再登場しました。大きさと視覚的インパクトが男性の「ユーピー」(若手社会人)に富を披露するために理想的だったためです。ブランド時代は現在、オーバーサイズで独特な形状のケース、人工的希少性、および二次市場(例:パテックの時計買い戻し)の積極的管理によって定義されます。 主要ブランドは階層化された製品ラインを割り当てる持株会社に統合されました。独立ブティックは、パテック・オーデム・ピゲ、ロレックスなどの数少ないフラッグシップハウスでのみ存続しています。業界がステータスシンボルに焦点を当てることで、メーカーによって管理される**資産バブルに似たビジネスモデル**が生まれました。 **教訓:** ブランド力は収益性を推進しますが、過度の依存はイノベーションを抑制するリスクがあります。次の「黄金時代」は、名声を売るだけでなく、本当に興味深い問題に取り組むことで生まれる可能性が高いです。

2026/03/02 18:26

**Linuxにおけるハードウェア・ホットプラグイベント ― 詳細解説**

## Japanese Translation: **概要:** Libusb の Linux ホットプラグシステムは、`linux_netlink.c` と `linux_udev.c` という 2 つのバックエンドに依存しています。デフォルトでは `--with-udev=yes` が設定されており、udev を無効にするとプレーンな netlink バックエンドが使用されます。 カーネルデバイスイベントは Netlink プロトコル 15(`NETLINK_KOBJECT_UEVENT`)を介して到達し、ヌル終端文字列として `add@/devices/...` のようなアクション行から始まり、`ACTION=add`、`SUBSYSTEM=usb` などのキー/バリュー ペアが続きます。udev はこれらのメッセージを受信し解析して、カスタムパケット形式でマルチキャストグループ 2(`MONITOR_GROUP_UDEV`)に再送信します。 udev パケットは `"libudev"` というマジック文字列から始まり、ビッグエンディアンのバージョンワード `0xfeedcafe` を持ち、次にネイティブエンディアンで格納された複数フィールド(`header_sz`、`properties_off`、`properties_len`、`subsystem_hash`、`devtype_hash`、`tag_bloom_hi`、`tag_bloom_lo`)が続きます。ハッシュは `SUBSYSTEM=` と `DEVTYPE=` の値に対して MurmurHash2 を用いて計算され、2 つの Bloom フィルタワードは `TAGS=` キーから導出されたビットをエンコードします。その後パケットには元のキー/バリュー文字列と、`SO_PASSCRED` 経由で送られる Unix 認証情報(pid/uid/gid)が含まれます。カーネルメッセージはゼロ認証情報を持つため、libudev は有効な認証情報がないパケットを拒否します。 プロトコルバージョンは固定で `0xfeedcafe` となっており、後方互換性や前方互換性に関する保証は文書化されていません。そのため、パケットレイアウト、フィルタリングロジック、または認証情報処理の変更は libusb と udev の両方で協調して更新を行う必要があり、ホットプラグイベントに依存するアプリケーションのデバイス検出、安定性、セキュリティに影響を与える可能性があります。

リモートで暗号化されたハードディスクをロック解除する | そっか~ニュース