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

224 lines
11 KiB
Markdown
Raw Permalink Normal View 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
```bash
# 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
```
---
## Как запустить бота
```bash
# 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*