Skip to content

Latest commit

 

History

History
242 lines (197 loc) · 12.4 KB

File metadata and controls

242 lines (197 loc) · 12.4 KB

Архитектурный план: Безопасная система ESP32 на MicroPython

Обзор системы

Разрабатываемая система представляет собой безопасное решение для ESP32 на основе MicroPython, которое позволяет динамически загружать, дешифровать и выполнять программы из зашифрованных JSON-файлов. Система обеспечивает высокую производительность, безопасность и изоляцию выполнения кода.

Требования

Функциональные требования

  1. Поддержка минимальной версии MicroPython с:

    • Файловой системой (LittleFS/SPIFFS)
    • Криптографическими операциями (AES/ChaCha20)
    • JSON парсингом
  2. Возможность загрузки зашифрованных JSON-файлов из файловой системы

  3. Дешифрование файлов с использованием аппаратно-защищенных ключей

  4. Динамическое создание объектов с инъекцией методов

  5. Выполнение программ в изолированной среде

  6. Обеспечение безопасности через:

    • Проверку цифровых подписей
    • Контроль времени выполнения
    • Ограничение доступа к API
    • Регулярную ротацию ключей

Требования к производительности

  • Время от загрузки файла до выполнения < 500ms
  • Потребление RAM < 50KB на программу
  • Поддержка hot-reload без перезагрузки
  • Кэширование скомпилированного кода

Требования безопасности

  • Ключи никогда не хранятся в plain text
  • Код выполняется в ограниченном контексте
  • Возможность экстренной остановки
  • Логирование всех критических операций

Архитектура системы

Структура проекта

esp32_secure_system/
├── main.py                 # Основной точка входа
├── crypto_manager.py       # Управление криптографией
├── object_factory.py       # Фабрика динамических объектов
├── execution_sandbox.py    # Песочница для выполнения кода
├── program_loader.py       # Загрузчик и валидатор программ
├── fast_json_loader.py     # Оптимизированный парсер JSON
├── line_compiler.py        # Компилятор построчного кода
├── execution_engine.py     # Движок выполнения программ
├── lightweight_security.py # Легковесная безопасность
├── memory_optimizer.py     # Оптимизатор памяти
├── programs/               # Директория для зашифрованных программных файлов
│   └── led_control.enc.json
├── data/                   # Директория для расшифрованных файлов HTML, CSS, JS
│   ├── index.html
│   ├── style.css
│   └── script.js
└── utils/                  # Вспомогательные утилиты

Компоненты системы

1. CryptoManager

Класс для шифрования/дешифрования данных с использованием AES-GCM и других криптографических алгоритмов.

Основные функции:

  • encrypt_data(data, key): шифрование данных
  • decrypt_data(encrypted_data, key): дешифрование данных
  • generate_keys(): генерация криптографических ключей
  • load_encrypted_file(filepath, key): загрузка зашифрованного файла

2. ObjectFactory

Класс для динамического создания объектов с инъекцией методов из JSON-данных.

Основные функции:

  • create_object_from_json(json_config): создание объекта из JSON-конфигурации
  • inject_methods(obj, methods): инъекция методов в объект
  • validate_object_structure(config): валидация структуры объекта

3. ExecutionSandbox

Класс для безопасного выполнения кода в ограниченной среде.

Основные функции:

  • execute_in_sandbox(code, globals, locals): выполнение кода в песочнице
  • limit_resources(): ограничение ресурсов выполнения
  • monitor_execution_time(): мониторинг времени выполнения
  • stop_execution(): принудительная остановка выполнения

4. ProgramLoader

Класс для загрузки и валидации программ из зашифрованных JSON-файлов.

Основные функции:

  • load_program(filepath, key): загрузка программы из файла
  • validate_signature(program_data): проверка цифровой подписи
  • verify_integrity(data): проверка целостности данных

5. FastJSONLoader

Оптимизированный парсер JSON для быстрой загрузки данных.

Основные функции:

  • load_encrypted(filepath, key): загрузка зашифрованного JSON
  • extract_code_lines(json_data): извлечение строк кода
  • streaming_parse(filepath): поточное чтение файлов

6. LineBasedCompiler

Компилятор для эффективного объединения строк кода и предварительной валидации.

Основные функции:

  • optimize_for_esp32(code_strings): оптимизация кода для ESP32
  • build_executable(code_blocks): сборка исполняемого кода
  • remove_comments_and_empty(code): удаление комментариев и пустых строк
  • validate_syntax(code): предварительная валидация синтаксиса

7. ExecutionEngine

Движок выполнения программ с поддержкой кэширования и горячей замены.

Основные функции:

  • execute_setup(setup_code): выполнение кода инициализации
  • execute_loop(loop_code, iterations): выполнение циклического кода
  • hot_swap(new_program): горячая замена программы
  • cache_compiled_programs(): кэширование скомпилированных программ

8. LightweightSecurity

Класс для проверки цифровых подписей и обеспечения безопасности.

Основные функции:

  • verify_ed25519_signature(data, signature, public_key): проверка подписи Ed25519
  • check_permissions(functions): проверка разрешений на вызов функций
  • sanitize_input(data): очистка входных данных

9. MemoryOptimizer

Класс для управления памятью и оптимизации потребления ресурсов.

Основные функции:

  • preallocate_buffers(size): предварительное выделение буферов
  • monitor_memory_usage(): мониторинг использования памяти
  • cleanup_cache(): очистка кэша
  • optimize_bytearray_usage(): оптимизация использования bytearray

Формат JSON-программы

{
  "metadata": {
    "version": "1.0",
    "signature": "ed25519_signature_here",
    "timestamp": "2023-12-01T10:00:00Z",
    "checksum": "sha256_checksum"
  },
  "config": {
    "runtime_limit_ms": 5000,
    "memory_limit_kb": 50,
    "permissions": ["gpio", "time"]
  },
  "imports": [
    "import machine",
    "import time"
  ],
  "functions": [
    "def blink_led(pin_num, duration):",
    "    pin = machine.Pin(pin_num, machine.Pin.OUT)",
    "    pin.value(1)",
    "    time.sleep(duration)",
    "    pin.value(0)",
    "    time.sleep(duration)"
  ],
  "setup": [
    "led_pin = 2"
  ],
  "loop_logic": [
    "blink_led(led_pin, 0.5)",
    "time.sleep(1)"
  ]
}

Процесс выполнения

  1. Загрузка: FastJSONLoader загружает зашифрованный JSON-файл
  2. Дешифрование: CryptoManager дешифрует содержимое файла
  3. Валидация: ProgramLoader проверяет подпись и целостность
  4. Компиляция: LineBasedCompiler собирает исполняемый код
  5. Создание объекта: ObjectFactory создает объект с нужными методами
  6. Выполнение: ExecutionEngine запускает код в ExecutionSandbox
  7. Мониторинг: MemoryOptimizer контролирует использование ресурсов

Оптимизации для ESP32

  1. Использование bytearray: Вместо строк где возможно использовать bytearray
  2. @micropython.native: Для критичных функций использовать декоратор
  3. LRU кэш: Реализовать кэш для скомпилированного кода
  4. Пакетная обработка: Обрабатывать данные порциями для экономии памяти
  5. Предвыделение памяти: Заранее выделять буферы нужного размера

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

  1. Шифрование AES-GCM: Защита JSON-файлов с помощью AES-GCM
  2. Подписи Ed25519: Проверка целостности с помощью Ed25519
  3. Изоляция: Выполнение в песочнице с ограниченными правами
  4. Ограничение API: Запрет доступа к опасным функциям
  5. Ротация ключей: Регулярная смена криптографических ключей

Тестирование

  1. Производительность: Измерение времени загрузки и выполнения
  2. Безопасность: Проверка устойчивости к различным атакам
  3. Стабильность: Длительное выполнение программ без сбоев
  4. Потребление памяти: Мониторинг использования RAM
  5. Валидация: Проверка корректности всех компонентов

Пример использования

from fast_json_loader import FastJSONLoader
from line_compiler import LineBasedCompiler
from execution_engine import ExecutionEngine

# Инициализация компонентов
loader = FastJSONLoader()
compiler = LineBasedCompiler()
engine = ExecutionEngine()

# Загрузка и выполнение программы
json_data = loader.load_encrypted("programs/led_control.enc.json", device_key)
code_blocks = loader.extract_code_lines(json_data)
executable = compiler.build_executable(code_blocks)

# Выполнить setup и цикл
engine.execute_setup(executable['setup'])
engine.execute_loop(executable['loop_logic'], max_iterations=1000)

Бенчмарки

Система должна соответствовать следующим показателям производительности:

  • Загрузка файла: < 100ms
  • Дешифрование: < 150ms
  • Компиляция: < 100ms
  • Запуск программы: < 150ms
  • Общее время: < 500ms
  • Потребление памяти: < 50KB
  • Время горячей замены: < 200ms