Metadata-Version: 2.4
Name: iss-ledger-117
Version: 1.1.1
Summary: Криптографический регистратор доказательной базы ИИ по ГОСТ Р 34.11-2012 («Стрибог») и Приказу ФСТЭК России № 117 (Zero-Dependency)
Author-email: АНО «НИИ системного синтеза» <info@isslab.ru>
License: Apache-2.0
Project-URL: Homepage, https://isslab.ru
Project-URL: Documentation, https://isslab.ru/cyber/
Project-URL: Repository, https://git.isslab.ru/isslab/iss-ledger-117
Keywords: gost,streebog,gost-34-11-2012,fstec,fstec-117,kii,cybersecurity,ai-governance,audit-ledger,rfc-6986,astra-linux,red-os
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: System :: Logging
Classifier: Operating System :: OS Independent
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: License :: OSI Approved :: Apache Software License
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# iss-ledger-117: Криптографический регистратор доказательной базы ИИ (ГОСТ Р 34.11-2012)

[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Python: 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/)
[![ГОСТ: Р 34.11-2012](https://img.shields.io/badge/ГОСТ_Р-34.11--2012-red.svg)](https://datatracker.ietf.org/doc/html/rfc6986)
[![Zero-Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen.svg)]()

> **Открытая утилита стека «ИБ 3.0»: журнал действий ИИ-агента с хеш-цепочкой по ГОСТ Р 34.11-2012**  
> *Разработка: АНО «НИИ системного синтеза» (Лаборатория системного синтеза / ISS Lab)*  
> *Официальный сайт*: [https://isslab.ru](https://isslab.ru) · *Страница кибербезопасности*: [https://isslab.ru/cyber/](https://isslab.ru/cyber/)  
> *Репозиторий*: [https://git.isslab.ru/isslab/iss-ledger-117](https://git.isslab.ru/isslab/iss-ledger-117)

---

## 🎯 Назначение

`iss-ledger-117` — это криптографический регистратор событий для автономных систем искусственного интеллекта (LLM, AI-агенты, Claude Code, Cursor, MCP-серверы), функционирующий по принципу **Append-Only Cryptographic Ledger**.

Каждая запись связывается с предыдущей с использованием национального криптографического стандарта хеширования **ГОСТ Р 34.11-2012 («Стрибог-256», RFC 6986)**.

### 🛡️ Каким требованиям служит (соответствия сам по себе не даёт):
1. **Приказ ФСТЭК России № 117** (утверждён 11.04.2025, в силе с 01.03.2026, взамен приказа № 17 от 2013 г.):
   - непрерывное протоколирование обращений к компонентам ИИ и сгенерированных вызовов внешних функций;
   - защита журналов аудита от модификации и скрытого удаления стандартизированными криптографическими алгоритмами (ГОСТ Р 34.11-2012);
   - для систем с ИИ (требования req-60 / req-61 методики к приказу): контроль применяемых моделей и обучающих данных, исключение недекларированных деструктивных воздействий.
2. **Федеральный закон № 187-ФЗ «О безопасности КИИ РФ»**: след действий автономных компонентов с контролем целостности как часть доказательной базы субъекта КИИ.

> Формулировки требований даны по отраслевому разбору методики к приказу № 117; дословный текст приказа на fstec.ru построчно не сверялся. Правовой вывод о применимости — за организацией.

---

## ⚡ Свойства

* **Без сторонних зависимостей**: чистый Python 3.10+. Не требует OpenSSL, C-компиляторов, pycryptodome или Rust.
* **Установка без сети**: пакет поставляется файлом `.whl`; установка и все команды этого документа при приёмке каждой версии прогоняются в чистом окружении без доступа в сеть.
* **Контроль целостности**: изменение, удаление, вставка и перестановка отдельных записей обнаруживаются при пересчёте цепочки.
* **Проверка без доверия к составителю**: журнал пересчитывается одним файлом `iss_verifier.py` на стандартном Python, без установки пакета.
* **Сводка по журналу**: рабочий документ для службы ИБ в формате Markdown.

### Границы

* Цепочка сама по себе не обнаруживает ПОЛНУЮ перезапись журнала лицом, имеющим доступ к файлу: такой журнал внутренне согласован. Для доказательной силы голову цепочки закрепляют у стороны, не зависящей от владельца журнала, — меткой доверенного времени или записью во внешнем журнале.
* Реализация хеш-функции проходит контрольные примеры RFC 6986, но не является сертифицированным средством криптографической защиты информации.
* Сводка по журналу не является актом или заключением о соответствии; соответствия приказу ФСТЭК России № 117 пакет не удостоверяет.

---

## 📦 Установка

Пакет — чистый Python без сторонних зависимостей. Для изолированного контура скачайте файлы `.whl` и ставьте без сети:
```bash
pip install --no-index --find-links ./wheels iss-ledger-117
```
С доступом в сеть:
```bash
pip install --find-links https://isslab.ru/wp-content/uploads/iss-utils/index.html iss-ledger-117
```
Из исходников:
```bash
git clone https://git.isslab.ru/isslab/iss-ledger-117.git
pip install ./iss-ledger-117
```

---

## 🚀 Быстрый старт (CLI)

### 1. Добавление записи о действии агента
```bash
# Регистрация разрешенного SQL-запроса
iss-ledger append \
  --agent "claude-code" \
  --action "tool_call:sql" \
  --target "db.prod.billing" \
  --verdict "PERMIT" \
  --reason "Policy approved" \
  --payload "SELECT id, balance FROM accounts WHERE id = 42"

# Регистрация заблокированной деструктивной попытки
iss-ledger append \
  --agent "cursor-agent" \
  --action "tool_call:bash" \
  --target "/etc/shadow" \
  --verdict "BLOCK" \
  --reason "Нарушен инвариант: FS-Jail prohibited access to /etc/shadow" \
  --payload "cat /etc/shadow"
```

### 2. Верификация целостности журнала
```bash
iss-ledger verify --file audit_fstec117.jsonl
```
*Вывод:*
```
[OK] Целостность 2 записей успешно подтверждена ГОСТ Р 34.11-2012.
     Всего событий: 2 (PERMIT: 1, BLOCK: 1)
     Хеш среза:     55b5e709eb06745c27d1aebb8932c41eb33da02ddb6d0a78aaf462b19bc7c9d3
```

### 3. Сводка по журналу
```bash
iss-ledger report \
  --file audit_fstec117.jsonl \
  --org "МУП Городской Водоканал" \
  --system "АСУ ТП Очистных Сооружений (Контур ИИ)" \
  --category "2 категория КИИ" \
  --out ledger_summary.md
```

---

## 🔍 Независимая проверка инспектором (`iss_verifier.py`)

Проверяющему — внутреннему аудитору, заказчику, инспектору — не требуется устанавливать пакеты и доверять составителю журнала:

1. Передайте проверяющему один файл `iss_verifier.py` (200 строк чистого кода).
2. Запуск в изолированном контуре:
   ```bash
   python iss_verifier.py audit_fstec117.jsonl
   ```
3. Проверяющий видит итог пересчёта:
   ```
   ========================================================================
    АВТОНОМНЫЙ ИНСПЕКТОРСКИЙ ВАЛИДАТОР ЦЕЛОСТНОСТИ ЖУРНАЛОВ (ИБ 3.0)
    Стандарт: ГОСТ Р 34.11-2012 («Стрибог-256», RFC 6986)
   ========================================================================
   [+] РЕЗУЛЬТАТ ВЕРИФИКАЦИИ:
       Всего записей проверено:    2
       Статус целостности:         ЦЕЛОСТНОСТЬ 100% ПОДТВЕРЖДЕНА ПО ГОСТ
       Разрешено действий (PERMIT): 1
       Предотвращено угроз (BLOCK): 1
       Финальный крипто-якорь:     55b5e709eb06745c27d1aebb8932c41eb...
   [OK] Целостность цепочки записей подтверждена (ГОСТ Р 34.11-2012).
        Проверка целостности не заменяет аттестацию системы по приказу ФСТЭК России № 117.
   ```

---

## 💻 Использование в Python-коде (Интеграция с Агентом / MCP)

```python
from iss_ledger_117 import IssLedger117

# Инициализация регистратора
ledger = IssLedger117("var/log/ai_agent_audit.jsonl")

# Перехват вызова инструмента агента
def on_agent_tool_call(agent_id, action, target, payload):
    # 1. Проверка правилами безопасности (Circuit Breaker)
    if is_forbidden(target):
        # Фиксация предотвращения инцидента
        ledger.append(
            agent_id=agent_id,
            action=action,
            target=target,
            verdict="BLOCK",
            reason="Нарушен инвариант: Security invariant violation",
            payload=payload
        )
        raise PermissionError("Действие заблокировано ИБ 3.0")

    # 2. Фиксация разрешенного действия
    ledger.append(
        agent_id=agent_id,
        action=action,
        target=target,
        verdict="PERMIT",
        reason="Policy OK",
        payload=payload
    )
    return execute_tool(action, target, payload)
```

---

## 📐 Математическая схема связывания блоков

Каждая $n$-я запись в журнале содержит канонический хеш:
$$H_n = \text{Streebog256}\left(Index_n \parallel Timestamp_n \parallel AgentId_n \parallel Action_n \parallel Target_n \parallel H(Payload_n) \parallel Verdict_n \parallel Reason_n \parallel H_{n-1}\right)$$

Где:
* $H_0 = 0^{64}$ (хэш генезис-блока).
* $\parallel$ — канонический разделитель полей `|`.
* $\text{Streebog256}$ — алгоритм ГОСТ Р 34.11-2012 с длиной выхода 256 бит.

---

## 🧪 Верификация и тесты

Запуск полного набора юнит-тестов, включая официальные векторы RFC 6986 §10.1 (M1) и §10.2 (M2):
```bash
python -m unittest discover -s tests
```
*Результат:*
```
Ran 7 tests in 0.58s
OK
```

---

## 📜 Цитирование в научных работах и отчетах

Если вы используете `iss-ledger-117` в научных исследованиях или аттестационных отчетах:
```bibtex
@software{iss_ledger_117_2026,
  author = {Fischuk, Alexander},
  title = {iss-ledger-117: Zero-Dependency Cryptographic Verification Ledger for AI Agents under FSTEC Order No. 117 and GOST R 34.11-2012},
  year = {2026},
  publisher = {ANO Institute for System Synthesis},
  url = {https://git.isslab.ru/isslab/iss-ledger-117}
}
```

---
**АНО «НИИ системного синтеза»**  
Официальный сайт: [isslab.ru](https://isslab.ru)  
Канал института: [@agiandhuman](https://t.me/agiandhuman)
