
Aplicativo desktop para registrar uma conta Signal e vincular o Signal Desktop sem exigir um smartphone, utilizando os protocolos criptográficos do Signal para provisionamento seguro de dispositivos.
Uma aplicação de desktop para registrar uma conta no Signal e vinculá-la ao Signal Desktop, tudo sem precisar de um smartphone.

Observe que o Signal ainda exige um número de telefone para ser usado. Este utilitário evita a necessidade de um smartphone, mas ainda exigirá uma forma de receber mensagens SMS durante a fase de configuração
Obtenha o lançamento mais recente!
Existem várias razões pelas quais esta ferramenta pode ser interessante para você:
A segurança das suas conversas no Signal é tão baixa quanto a segurança dos dispositivos nos quais está instalado:
Se o seu dispositivo for perdido ou roubado quando não estiver bloqueado com sua senha, é claro que alguém pode ler as mensagens nele. Da mesma forma, sabe-se que entidades policiais usam ferramentas forenses para invadir dispositivos apreendidos, tornando possível ler qualquer coisa no dispositivo, incluindo suas mensagens.
— Segurança de grupo no Signal, Freedom of the Press Foundation
Algumas pessoas não têm um smartphone, e elas deveriam poder usar o Signal :-)
O Signal não tem intenção de oferecer suporte a este caso de uso em seu próprio software. O código de registro independente existe no Signal Desktop, mas está restrito a compilações de desenvolvimento e teste, e os mantenedores confirmaram em seu rastreador de problemas que não é destinado a usuários finais (#1118, #551, #575, #6431). É por isso que esta ferramenta separada existe.
Baixe o arquivo para o seu sistema a partir da página de lançamentos:
.dmg e arraste Signal Setup para Applications.AppImage: Torne-o executável (chmod +x Signal_Setup-*.AppImage) e execute-o. Um binário simples signal-setup-linux-* também é publicado, se preferir.Os lançamentos não são assinados com um certificado de desenvolvedor pago ($99 USD por ano para macOS, ainda mais para Windows) e, como resultado, o sistema avisa após a instalação:
macOS mostra "não pode ser aberto porque é de um desenvolvedor não identificado." Clique com o botão direito no aplicativo e escolha Abrir, depois confirme. Você só precisa fazer isso uma vez. Se informar que o aplicativo está "danificado", limpe a flag de quarentena de download: xattr -dr com.apple.quarantine "/Applications/Signal Setup.app".
Windows O SmartScreen mostra "O Windows protegeu seu PC." Clique em Mais informações e depois em Executar mesmo assim.
cargo build --release
./target/release/signal-setup
O projeto é um workspace Cargo com duas crates: signal-setup-core (a lógica de registro e vinculação de dispositivos do Signal) e signal-setup (a GUI de desktop que depende dela). Compilar o workspace produz o binário signal-setup acima.
Apenas no Linux, algumas bibliotecas do sistema são úteis para GPU/exibição:
# 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
Você pode executar a ferramenta no ambiente de staging do Signal em vez da produção, o que é útil para desenvolvimento e teste sem arriscar sua conta real:
./target/release/signal-setup --staging
Para concluir a etapa de vinculação de dispositivo, você precisará de uma instância do Signal Desktop também conectada ao servidor de staging. Compilar o Signal Desktop a partir do código-fonte faz isso por padrão:
git clone https://github.com/signalapp/Signal-Desktop.git
cd Signal-Desktop
pnpm install
pnpm start
Uma flag --demo também está disponível para testes totalmente offline com dados falsos (nenhum servidor necessário).
Existem outras ferramentas capazes de fazer isso, como a excelente signal-cli por AsamK, mas infelizmente elas não fornecem uma interface gráfica do usuário. Uma versão anterior desta ferramenta a utilizava internamente, mas exigia que os usuários tivessem uma JVM instalada para executar as coisas.
Em vez disso — e porque pensei que seria mais fácil — aproveitei a ocasião para mergulhar fundo na criptografia do Signal.
Aqui está uma visão geral de como as coisas funcionam (esta aplicação se registra como o dispositivo primário do Signal e, em seguida, vincula o Signal Desktop como um dispositivo secundário).
Aqui está o fluxo:
%%{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/>.