Как Kaspa Forge защищает ваши приватные ключи
Kaspa Forge — некастодиальный продукт: приватные ключи создаются, расшифровываются и используются для подписи внутри вашего браузера. Основной профиль Desk зашифрован локально вашим паролем. На Sync-сервер ничего не копируется, пока вы явно не включите Forge Sync для удобства, — и даже тогда сервер получает только отдельно зашифрованный и подписанный blob, который не может прочитать.
Короткий ответ
Читаемые ключи остаются в браузере. При хранении профиль зашифрован паролем. Транзакции подписываются локально. Forge Sync по умолчанию выключен; после вашего согласия он отправляет только дважды зашифрованную безопасную проекцию и подписанные метаданные.
Sync: Безопасная проекция → age → AES-256-GCM → Ed25519-подписанный шифротекст → mirror-сервер
1. Профиль шифруется до записи в хранилище
Desk держит единый Profile v3: кошелёк, мастер-seed, счётчики деривации и рабочие записи сейфов, сделок, объявлений, чатов и истории транзакций. До записи в localStorage браузера профиль сериализуется и шифруется WASM-ядром Kaspa Forge в стандартном парольном формате age.
Шифрование происходит до сохранения: при миграции старого открытого профиля сначала записывается шифротекст и только затем удаляются старые plaintext-записи. Пароль не отправляется Kaspa Forge, поэтому поддержка не может его сбросить.
2. Разблокировка создаёт временную сессию браузера
При разблокировке Desk WASM локально расшифровывает age-шифротекст. Читаемый профиль хранится DOM-free модулем сессии в замыкании памяти; он не попадает в глобальный state приложения или серверную сессию. Пароль сохраняется в sessionStorage только этой вкладки, чтобы переход между страницами Kaspa Forge не требовал немедленного повторного ввода.
- Граница одной вкладки. Открытая сессия не передаётся другой вкладке и исчезает при закрытии текущей.
- Автоблокировка через 15 минут. Простой очищает читаемый профиль, пароль и сессию вкладки. Кнопка Lock делает это сразу.
- Повторное подтверждение пароля. Отправка средств, пополнение сейфа или сделки, экспорт и импорт ключей и другие чувствительные действия снова спрашивают пароль; где возможно, показываются сумма и адрес.
- Локальная подпись. Сборщики транзакций и функции подписи работают в браузерном WASM. Сервер получает готовую подписанную транзакцию для бродкаста, а не приватный ключ.
3. Не все приватные ключи разрешено хранить вместе
Более безопасный режим по умолчанию разделяет рабочие и независимые защитные ключи. Общее хранение тревожного ключа доступно как осознанный обмен изоляции на удобство, но Forge Sync всё равно исключает защитные ключи из каждой загружаемой проекции.
Мастер-seed локально выводит будущие рабочие ключи по domain-separated путям. Поэтому ранний независимый файл-бэкап способен заново обнаружить более поздние сущности. Тревожный ключ с раздельным хранением не зависит от seed. Тревожный ключ, сохранённый в полном профиле, всё равно сознательно исключается из Forge Sync.
4. Как работает зашифрованный Forge Sync
Forge Sync опционален, работает вручную и по умолчанию выключен. Desk запускает его только после того, как вы откроете Настройки, выберете «Включить Sync», подтвердите пароль и примете понятное сообщение о согласии. Скрытой загрузки и фонового Sync нет. После включения вы сами нажимаете «Синхронизировать», когда хотите обменять изменения между копиями профиля.
- Создание безопасной проекции. Браузер копирует рабочий профиль, не меняя локальный оригинал, и рекурсивно удаляет alarm_sk, heir_sk и arbiter_sk. Fail-closed проверка запрещает upload, если осталось хотя бы одно запрещённое приватное поле.
- Шифрование паролем Desk. Безопасная проекция превращается в age-зашифрованный armored blob под текущим паролем устройства — это тот же локальный слой защиты, что и у файла ключей.
- Вывод отдельных Sync-ключей. WASM применяет domain-separated HMAC-SHA512 к исходному якорю кошелька и выводит ID профиля, 256-битный Sync-секрет и отдельный Ed25519 seed аутентификации. Копии, сделанные до Forge Sync, выводят одну идентичность, а ротация адреса приёма не меняет якорь. Исходный ключ кошелька не покидает браузер и не подписывает API-запросы.
- Второе шифрование. WebCrypto оборачивает age-blob в AES-256-GCM со свежим 96-битным nonce, аутентифицируемыми метаданными и 128-битным тегом.
- Подпись и цепочка версий. Браузер хеширует шифротекст SHA-256, связывает его с предыдущей версией и подписывает manifest отдельным Ed25519 Sync-ключом.
- Upload только шифротекста. Mirror-сервис принимает новую версию, только если подпись, hash и compare-and-swap цепочка корректны. Он не может снять внешний AES-слой или внутренний age-слой.
- Проверка до merge. При скачивании браузер проверяет подпись, фактический hash blob, связь с предыдущей версией и локальный checkpoint до расшифровки. Rollback, fork, разрыв истории и подмена отклоняются. Разошедшиеся локальная и серверная версии требуют явного merge; устройство ничего не затирает молча.
Согласие — часть границы безопасности
Без вашего действия «Включить Sync» зашифрованный профиль остаётся локальным. После согласия сервер хранит нечитаемое зеркало только для того, чтобы вашим собственным копиям профиля было удобнее оставаться согласованными.
5. Что получает Sync-сервер — и чего он не получает
API-чтение и запись подписываются отдельным Sync-ключом и содержат свежие nonce и timestamp для защиты от replay. Сервис хранит ограниченную историю версий, чтобы браузер проверял непрерывность. Эти меры защищают целостность и выявляют rollback; конфиденциальность обеспечивают два клиентских слоя шифрования.
6. Правила восстановления и честные ограничения
- Forge Sync не является независимым бэкапом. Храните офлайн-экспорт .age отдельно от пароля. Новый пустой браузер не найдёт и не расшифрует зеркало только по паролю.
- Forge Sync никогда не переносит тревожный ключ сейфа. Это относится и к случаю, когда при создании вы выбрали хранить ключ в общем зашифрованном профиле. Сам сейф может синхронизироваться на другое устройство, но вы не сможете отменить вывод на этом устройстве, пока не импортируете полную копию .age, экспортированную с устройства создания сейфа (или не введёте ключ с отдельной карточки). После создания такого сейфа сделайте свежий экспорт.
- Пароль Desk на копиях должен совпадать. Если удалённый age-snapshot зашифрован другим паролем, Desk отклоняет его и не меняет локальные данные.
- В этой бете нельзя отозвать одно устройство. Копии профиля используют общие Sync-ключи. Потеря устройства с доступным для восстановления профилем — инцидент безопасности ключей; Sync не может удалённо стереть или заблокировать копию.
- Безопасность браузера остаётся важной. Вредоносная программа, расширение, keylogger или внедрённый код во время разблокировки могут прочитать то, что читает легитимная страница. Шифрование «на диске» не делает скомпрометированное активное устройство безопасным.
- Фишинг обходит хорошую криптографию. Вводите пароль Desk только на kaspaforge.org. Поддержка Kaspa Forge никогда не попросит пароль, seed, приватный ключ или полный файл ключей.
- Сброса пароля нет. Мы не восстановим забытый пароль, потому что не храним его или ключ расшифровки. Проверьте офлайн-восстановление до хранения значимых средств.
Практический чек-лист безопасности ключей
- Используйте уникальный сильный пароль Desk и храните его отдельно от .age-файла.
- Экспортируйте файл ключей и проверьте импорт или офлайн-дешифратор до пополнения.
- При раздельном хранении держите тревожную карточку отдельно от профиля. При общем — после создания сейфа экспортируйте свежую полную копию .age: Forge Sync тревожный ключ не перенесёт.
- Включайте Forge Sync только на подконтрольных устройствах; запускайте Sync вручную, когда нужна непрерывность.
- Блокируйте Desk или закрывайте вкладку после работы, обновляйте браузер и операционную систему.
Частые вопросы
Может ли Kaspa Forge прочитать мои приватные ключи?
Нет. Читаемые ключи и пароль остаются в браузере. Обычная платформа получает публичные данные и подписанные транзакции. Если вы явно включаете Forge Sync, отдельный сервер получает только подписанную, дважды зашифрованную безопасную проекцию и не получает ни одного секрета расшифровки.
Forge Sync работает автоматически?
Нет. По умолчанию он выключен и не работает в фоне. Вы разблокируете Desk, подтверждаете пароль, принимаете сообщение о согласии и вручную нажимаете «Включить» или «Синхронизировать». Это удобство для ваших копий профиля, а не скрытый аккаунт-бэкап.
Зачем при Sync два слоя шифрования?
Внутренний age-слой сохраняет тот же парольный формат профиля, что используется локально и в экспорте. Внешний AES-256-GCM использует отдельный domain-derived Sync-секрет и аутентифицирует контекст каждой версии. У сервера нет ни одного секрета, а подписанные manifest защищают целостность и историю.
Forge Sync заменяет файл ключей?
Нет. Храните офлайн-бэкап .age. Он переносим, восстанавливается независимо и не зависит от Sync-сервиса. Кроме того, только полная копия переносит на другое устройство тревожный ключ, сохранённый в профиле: Forge Sync удаляет его до upload. Одного пароля недостаточно, чтобы обнаружить зашифрованное зеркало на совершенно новом пустом устройстве.
Проверьте реализацию
Kaspa Forge имеет открытый исходный код. В публичном репозитории можно проверить браузерную сессию, age-обёртку, mirror-проекцию, протокол AES-GCM/Ed25519 и сервер. Хеши ковенантов, тестовое покрытие, известные ограничения и порядок сообщения об уязвимостях находятся в отдельном Security Center.
Дальше: Desk и мастер-файл ключей · офлайн-восстановление · как Kaspa Safe защищает средства