montana/Русский/Ключи/СПЕЦИФИКАЦИЯ.md

11 KiB
Raw Blame History

Система Ключей Montana Protocol

Простыми словами

Представь что у тебя есть:

  1. Ключи от машины — чтобы ездить и управлять
  2. Ключи от сейфа — где лежат твои деньги

Это РАЗНЫЕ ключи. Если украдут ключи от машины — деньги в сейфе целы.

В Montana Protocol так же:

  • Операционные ключи (keychain) = ключи от машины
  • Криптографические ключи (ML-DSA-65) = ключи от сейфа

Архитектура

┌─────────────────────────────────────────────────────────────┐
│                    ЛОКАЛЬНЫЙ MAC                            │
│                   (Хранитель сети)                          │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │              macOS KEYCHAIN                          │   │
│  │                                                      │   │
│  │  API Keys:           SSH Keys:        Servers:       │   │
│  │  - Telegram Token    - id_ed25519     - Timeweb IP   │   │
│  │  - OpenAI Key        - jn_srv         - Amsterdam IP │   │
│  │  - GitHub Token      - passphrase     - Users        │   │
│  │  - Admin ID          - config                        │   │
│  │                                                      │   │
│  └─────────────────────────────────────────────────────┘   │
│                           │                                 │
│                           │ SSH/API                         │
│                           ▼                                 │
└─────────────────────────────────────────────────────────────┘
                            │
                            │ Управление
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                    СЕТЬ АТЛАНТОВ                            │
│                                                             │
│  ┌───────────┐  ┌───────────┐  ┌───────────┐              │
│  │ Атлант 1  │  │ Атлант 2  │  │ Атлант N  │              │
│  │           │  │           │  │           │              │
│  │ ML-DSA-65 │  │ ML-DSA-65 │  │ ML-DSA-65 │              │
│  │ ключи     │  │ ключи     │  │ ключи     │              │
│  │ (свои)    │  │ (свои)    │  │ (свои)    │              │
│  └───────────┘  └───────────┘  └───────────┘              │
│                                                             │
│         Каждый узел = свои криптографические ключи         │
│              Децентрализация = безопасность                │
└─────────────────────────────────────────────────────────────┘

Два типа ключей

1. Операционные ключи (Keychain)

Что это: Ключи для УПРАВЛЕНИЯ инфраструктурой

Где хранятся: macOS Keychain на локальном Mac

Что делают:

  • Подключение к серверам (SSH)
  • Запуск ботов (Telegram Token)
  • Работа с AI (OpenAI, Anthropic)
  • Публикация кода (GitHub)

Если украдут:

  • Злоумышленник получит доступ к серверам
  • Сможет управлять ботом
  • НО! Криптовалюта и сеть — в безопасности

Аналогия: Ключи от офиса. Вор зайдёт в офис, но сейф не откроет.

2. Криптографические ключи (ML-DSA-65)

Что это: Постквантовые ключи протокола Montana

Где хранятся: На каждом узле (Атланте) отдельно

Что делают:

  • Подписывают транзакции
  • Подтверждают владение средствами
  • Участвуют в консенсусе

Если украдут:

  • Злоумышленник получит доступ ТОЛЬКО к средствам этого узла
  • Другие узлы — в безопасности
  • Сеть продолжает работать

Аналогия: Ключ от личного сейфа. Каждый сейф — отдельный.


Полный список ключей в Keychain

API Keys

Имя Назначение Команда
TELEGRAM_TOKEN_JUNONA Токен бота @junomontanaagibot security find-generic-password -a "montana" -s "TELEGRAM_TOKEN_JUNONA" -w
OPENAI_API_KEY Ключ OpenAI для GPT-5.2 security find-generic-password -a "montana" -s "OPENAI_API_KEY" -w
ANTHROPIC_API_KEY Ключ Anthropic для Claude security find-generic-password -a "montana" -s "ANTHROPIC_API_KEY" -w
GITHUB_TOKEN Токен GitHub для публикации security find-generic-password -a "montana" -s "GITHUB_TOKEN" -w
ADMIN_TELEGRAM_ID ID владельца в Telegram security find-generic-password -a "montana" -s "ADMIN_TELEGRAM_ID" -w
AI_PROVIDER Текущий провайдер AI (openai/anthropic) security find-generic-password -a "montana" -s "AI_PROVIDER" -w

SSH Keys

Имя Назначение Формат
SSH_KEY_ED25519_PRIVATE Приватный ключ для GitHub base64
SSH_KEY_ED25519_PUBLIC Публичный ключ для GitHub plain text
SSH_KEY_JN_SRV_PRIVATE Приватный ключ для серверов base64, зашифрован
SSH_KEY_JN_SRV_PUBLIC Публичный ключ для серверов plain text
SSH_KEY_JN_SRV_PASSPHRASE Пароль для расшифровки jn_srv plain text
SSH_CONFIG Конфигурация SSH (~/.ssh/config) base64

Servers

Имя Значение Назначение
SERVER_TIMEWEB_IP 176.124.208.93 Timeweb сервер
SERVER_TIMEWEB_USER root Пользователь Timeweb
SERVER_AMS_IP 72.56.102.240 Amsterdam сервер
SERVER_AMS_USER root Пользователь Amsterdam

Как восстановить SSH на новом Mac

# 1. Создать папку .ssh
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 2. Восстановить ключи из Keychain
security find-generic-password -a "montana" -s "SSH_KEY_ED25519_PRIVATE" -w | base64 -d > ~/.ssh/id_ed25519
security find-generic-password -a "montana" -s "SSH_KEY_ED25519_PUBLIC" -w > ~/.ssh/id_ed25519.pub
security find-generic-password -a "montana" -s "SSH_KEY_JN_SRV_PRIVATE" -w | base64 -d > ~/.ssh/jn_srv
security find-generic-password -a "montana" -s "SSH_KEY_JN_SRV_PUBLIC" -w > ~/.ssh/jn_srv.pub
security find-generic-password -a "montana" -s "SSH_CONFIG" -w | base64 -d > ~/.ssh/config

# 3. Установить права доступа
chmod 600 ~/.ssh/id_ed25519
chmod 600 ~/.ssh/jn_srv
chmod 644 ~/.ssh/*.pub
chmod 644 ~/.ssh/config

# 4. Passphrase для jn_srv
security find-generic-password -a "montana" -s "SSH_KEY_JN_SRV_PASSPHRASE" -w
# Используй при подключении к my-timeweb

Как запустить бота

# 1. Перейти в папку бота
cd Монтана_Montana_蒙大拿/Русский/бот

# 2. Загрузить ключи из Keychain в переменные окружения
source load_keys.sh

# 3. Запустить бота
python junomontanaagibot.py

Безопасность

Что защищено:

  • Все ключи в macOS Keychain (зашифрованы системой)
  • SSH ключ jn_srv дополнительно защищён паролем
  • Keychain требует пароль пользователя Mac

Что НЕ защищает Keychain:

  • Криптографические ключи протокола (ML-DSA-65)
  • Они на каждом узле свои
  • Компрометация Mac ≠ компрометация сети

Модель угроз:

Угроза                    │ Последствия           │ Сеть
─────────────────────────┼──────────────────────┼──────────
Украли Mac               │ Доступ к серверам    │ Работает
Взломали Keychain        │ Доступ к API/SSH     │ Работает
Взломали 1 сервер        │ Потеря 1 узла        │ Работает
Взломали ВСЕ серверы     │ Временный простой    │ Работает*

* Сеть восстановится — ключи протокола у пользователей

FAQ

Q: Почему ключи в Keychain, а не в файлах? A: Keychain зашифрован системой. Файлы .env — открытый текст.

Q: Что если потерял Mac? A: Keychain можно восстановить из iCloud или бэкапа Time Machine.

Q: Можно ли перенести на Linux? A: Да, но нужно использовать другое хранилище (например, pass или HashiCorp Vault).

Q: Как добавить новый ключ? A: security add-generic-password -a "montana" -s "ИМЯ" -w "ЗНАЧЕНИЕ"

Q: Как удалить ключ? A: security delete-generic-password -a "montana" -s "ИМЯ"


Автор

Alejandro Montana

Time is the only real currency