
Настольное приложение для регистрации аккаунта Signal и привязки Signal Desktop без необходимости использования смартфона, использующее криптографические протоколы Signal для безопасной настройки устройства.
Десктопное приложение для регистрации аккаунта Signal и связывания его с Signal Desktop без необходимости использования смартфона.

Обратите внимание, что для использования Signal всё ещё требуется номер телефона. Эта утилита избавляет от необходимости иметь смартфон, но по-прежнему потребуется способ получения SMS-сообщений во время начальной настройки
Загрузите последнюю версию!
Есть несколько причин, по которым этот инструмент может вас заинтересовать:
Безопасность ваших разговоров в Signal настолько же низка, насколько низка безопасность устройств, на которых он установлен:
Если ваше устройство потеряно или украдено, когда оно не заблокировано вашим паролем, кто-то, конечно, сможет прочитать сообщения на нём. Правоохранительные органы, как известно, используют криминалистические инструменты для взлома изъятых устройств, что позволяет читать что угодно на устройстве, включая ваши сообщения.
У некоторых людей нет смартфона, и они должны иметь возможность пользоваться Signal :-)
Signal не намерен поддерживать этот вариант использования в своём собственном ПО. Код автономной регистрации существует в Signal Desktop, но он ограничен только сборочными конфигурациями для разработки и тестирования, а разработчики подтвердили в своём трекере, что он не предназначен для конечных пользователей (#1118, #551, #575, #6431). Именно поэтому и существует этот отдельный инструмент.
Загрузите файл для вашей системы со страницы релизов:
.dmg и перетащите Signal Setup в папку «Программы».AppImage: Сделайте его исполняемым (chmod +x Signal_Setup-*.AppImage) и запустите. Обычный исполняемый файл signal-setup-linux-* также публикуется, если вы предпочитаете.Релизы не подписаны платным сертификатом разработчика ($99 USD в год для macOS, для Windows ещё дороже), поэтому система предупреждает вас после установки:
macOS показывает «невозможно открыть, так как она от неизвестного разработчика». Щёлкните приложение правой кнопкой мыши и выберите Открыть, затем подтвердите. Это нужно сделать только один раз. Если приложение сообщает, что оно «повреждено», снимите карантинную метку загрузки: xattr -dr com.apple.quarantine "/Applications/Signal Setup.app".
Windows SmartScreen показывает «Защита Windows заблокировала запуск этого приложения». Нажмите Дополнительные сведения, затем Всё равно выполнить.
cargo build --release
./target/release/signal-setup
Проект представляет собой рабочее пространство Cargo с двумя крейтами: signal-setup-core (логика
регистрации и связывания устройств Signal) и signal-setup (графический интерфейс
рабочего стола, зависящий от него). Сборка рабочего пространства создаёт
исполняемый файл 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 для полностью автономного тестирования с фиктивными данными (без
сервера).
Существуют и другие инструменты, способные это сделать, например, отличный signal-cli от AsamK, но, к сожалению, они не предоставляют графического интерфейса. Предыдущая версия этого инструмента использовала его под капотом, но требовала от пользователей установленной 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/>.