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

224 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Система Ключей 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*