
スマートフォンを必要とせずにSignalアカウントを登録し、Signal Desktopをリンクするためのデスクトップアプリケーション。Signalの暗号プロトコルを使用して安全なデバイスプロビジョニングを実現します。
Signalでアカウントを登録し、Signal Desktopにリンクするためのデスクトップアプリケーション。すべてスマートフォンを必要としません。

Signalは依然として電話番号の使用が必要であることに注意してください。このユーティリティはスマートフォンの必要性を回避しますが、セットアップ段階でSMSメッセージを受信する手段は依然として必要です。
最新リリースを入手してください! (https://github.com/almet/signal-without-smartphone/releases)
このツールがあなたにとって興味深いかもしれない理由はいくつかあります。
Signalの会話のセキュリティは、それがインストールされているデバイスのセキュリティと同じくらい低くなります。
デバイスがパスコードでロックされていない状態で紛失または盗難された場合、もちろん誰かがそのメッセージを読むことができます。同様に、法執行機関は押収されたデバイスに侵入するためにフォレンジックツールを使用することが知られており、デバイス上のあらゆるもの(メッセージを含む)を読み取ることが可能です。
スマートフォンを持っていない人もいます。そうした人々もSignalを使えるべきです :-)
Signalは自社のソフトウェアでこのユースケースをサポートする意図はありません。Signal Desktopにはスタンドアロン登録コードが存在しますが、開発ビルドとステージングビルドに限定されており、メンテナーはトラッカー上でエンドユーザー向けではないと確認しています(#1118、#551、#575、#6431)。そのため、この別のツールが存在します。
リリースページからお使いのシステム用のファイルをダウンロードしてください。
.dmgを開き、Signal Setupをアプリケーションフォルダにドラッグします。AppImageを実行可能にして(chmod +x Signal_Setup-*.AppImage)実行します。必要に応じて、プレーンなsignal-setup-linux-*バイナリも公開されています。リリースは有料の開発者証明書(macOSでは年間99ドル、Windowsではそれ以上)で署名されていないため、インストール後にシステムが警告を表示します。
macOS: 「未確認の開発元からのアプリケーションのため開けません」と表示されます。アプリを右クリックして開くを選択し、確認してください。これは一度だけ行えば十分です。アプリが「破損している」と報告する場合は、ダウンロード検疫フラグを解除します: xattr -dr com.apple.quarantine "/Applications/Signal Setup.app"
Windows: SmartScreenが「WindowsによってPCが保護されました」と表示します。詳細情報をクリックし、それでも実行をクリックします。
cargo build --release
./target/release/signal-setup
このプロジェクトはCargoワークスペースで、2つのクレートから構成されています: signal-setup-core(Signalの登録とデバイスリンクのロジック)とsignal-setup(それに依存するデスクトップGUI)。ワークスペースをビルドすると、上記のsignal-setupバイナリが生成されます。
Linuxでは、GPU/ディスプレイ用にいくつかのシステムライブラリが必要です:
# Ubuntu / Debian
sudo apt install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxkbcommon-dev libssl-dev protobuf-compiler
# Fedora
sudo dnf install libxcb-devel libxkbcommon-devel openssl-devel protobuf-compiler
# Arch
sudo pacman -S libxcb libxkbcommon openssl protobuf
ツールを本番環境ではなくSignalのステージング環境に対して実行できます。これは開発テストに便利で、実際のアカウントを危険にさらすことはありません:
./target/release/signal-setup --staging
デバイスリンク手順を完了するには、ステージングサーバーに接続されたSignal Desktopインスタンスも必要です。Signal Desktopをソースからビルドすると、デフォルトでこれが行われます:
git clone https://github.com/signalapp/Signal-Desktop.git
cd Signal-Desktop
pnpm install
pnpm start
--demoフラグも利用可能で、偽のデータを使用した完全オフラインテストが可能です(サーバー不要)。
これを行う他のツールもあります。たとえばAsamKによる素晴らしいsignal-cliがありますが、残念ながらグラフィカルユーザーインターフェースを提供していません。以前のバージョンのこのツールは内部でこれを使用していましたが、実行にはユーザーがJVMをインストールしている必要がありました。
代わりに、そしてより簡単だと思ったからですが、これを機会にSignalの暗号を深く掘り下げてみました。
以下は大まかな動作の流れです(このアプリケーションはSignalのプライマリデバイスとして登録し、Signal Desktopをセカンダリデバイスとしてリンクします)。
フローは次のとおりです:
%%{init: {'theme':'default', 'themeVariables': {'background':'#ffffff'}}}%%
sequenceDiagram
actor User
participant App as App
participant Server as Signal Server
participant Desktop as Signal Desktop
participant Store as Disk + Keyring
Note over App: Step 0: Welcome (if saved accounts)
rect rgb(235,245,255)
Note over User,Server: Phase 1: Request verification code
User->>App: Step 1: enter phone (+1234567890)
App->>Server: POST /v1/verification/session
Server-->>App: session.id (+ captcha_required?)
alt Captcha required
Note over App: Step 2 shown
User->>App: solve captcha, paste it
App->>Server: POST .../session/{id}/code (sms)
else No captcha
App->>Server: POST .../session/{id}/code (sms)
end
Server-->>User: SMS verification code
end
rect rgb(235,255,235)
Note over User,Server: Phase 2: Verify & register account
User->>App: Step 3: enter 6-digit code
App->>Server: PUT .../session/{id}/code {code}
Note over App: Generate keys: ACI/PNI identity,<br/>signed pre-keys, Kyber PQ keys,<br/>master/profile keys, password
App->>Server: POST /v1/registration (account attrs + keys)
alt 409 Device transfer available
Server-->>App: 409 / DeviceTransferAvailable
Note over App: warn, retry skipping device transfer
else Success
Server-->>App: registered
App->>Store: save metadata (disk) + secrets (keyring)
end
end
rect rgb(255,245,235)
Note over User,Desktop: Phase 3: Link Signal Desktop
User->>App: Step 4: launch Desktop, "Link to existing device"
Desktop-->>User: shows QR code
User->>App: paste QR image / link
App->>Server: GET /v1/devices/provisioning/code
Server-->>App: verification_code
Note over App: Build ProvisionMessage (identity keys,<br/>profile/master key, code) →<br/>ECDH + HKDF + AES-256-CBC + HMAC
App->>Server: PUT /v1/provisioning/{ephemeral_id} (envelope)
Server-->>Desktop: deliver envelope / register as device 2
loop Poll up to 60s
App->>Server: GET /v2/keys/{aci}/2
Server-->>App: device 2 pre-keys (when ready)
end
Note over App: send_linked_device_sync():<br/>X3DH + Double Ratchet session,<br/>encrypt empty contacts SyncMessage
App->>Server: PUT /v1/messages/{aci} (encrypted sync)
Server-->>Desktop: SyncMessage / leaves "Syncing…"
end
App-->>User: Step 5 : 🎉 Setup complete
Signal Without Smartphone
Copyright (C) 2026 Alexis Métaireau
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.