Skip to main content

CYPHERON

Аутентифицированное потоковое шифрование файлов для Python 3.10+.

Tink Streaming AEAD · Зашифрованные наборы ключей · Контекст объекта · Apache-2.0

Документация и диаграммы · API · Исходный код

Установка

python -m pip install cypheron==0.3.0
cypheron --version

Дистрибутив называется cypheron, импорт — lyube_sec, команда — cypheron. Нужна платформа с совместимыми wheel для Tink и cryptography.

Возможности

  • Tink AES-256-GCM-HKDF с сегментами 1 МиБ для новых интеграций.
  • Привязка к доверенным tenant, object_id, version и ID ключа.
  • Зашифрованные неизменяемые keyset-файлы и адаптер настроенного клиентом KMS.
  • Потоковая ротация в отдельный файл без записи открытого текста на диск.
  • Публикация выходного файла после полной проверки, приватные временные каталоги и очистка после штатных ошибок.
  • CYBF v2 с AES-GCM или ChaCha20-Poly1305 и Argon2id для парольных файлов.
  • Ограничения размера открытого текста и ресурсов Argon2id.

Пример Python

Запустите пример в новом рабочем каталоге. Повторный запуск намеренно не перезаписывает существующие ключи и файлы.

from pathlib import Path

from lyube_sec.api import (
    EncryptionContext,
    KeysetStore,
    create_local_wrapping_key,
    decrypt_streaming_file,
    encrypt_streaming_file,
    load_local_wrapping_key,
)

work = Path("cypheron-demo")
work.mkdir(mode=0o700)  # Новый каталог, доступный только владельцу на POSIX.
source = work / "input.txt"
source.write_text("Пример защищённого документа", encoding="utf-8")

# Однократная подготовка. В рабочем приложении отделите её от обработки файлов.
root_key = work / "root.key"
create_local_wrapping_key(root_key)
keys = KeysetStore(work / "keysets", load_local_wrapping_key(root_key))
keys.create("v1")

context = EncryptionContext(
    tenant="customer-42",
    object_id="document-7",
    version=1,
)

encrypt_streaming_file(
    keys=keys,
    key_id="v1",
    context=context,
    in_path=source,
    out_path=work / "encrypted.tink",
    max_bytes=10 * 1024 * 1024,  # Политика приложения: до 10 МиБ.
)

decrypt_streaming_file(
    keys=keys,
    key_id="v1",
    context=context,
    in_path=work / "encrypted.tink",
    out_path=work / "restored.txt",
    max_bytes=10 * 1024 * 1024,
)

assert source.read_bytes() == (work / "restored.txt").read_bytes()

Для компактности пример хранит все данные рядом. Корневой файл root.key не зашифрован: в эксплуатации защищайте его отдельно от keyset-файлов и их резервной копии. Сервер может использовать KeysetStore.from_kms_client(...); права, учётные данные и SDK провайдера настраиваются отдельно.

Контекст необходимо сохранять в доверенной записи приложения. Библиотека не поддерживает собственную базу версий и не отклоняет повтор того же подлинного файла с тем же контекстом.

Файлы под паролем

cypheron file-enc --password input.txt encrypted.cybf
cypheron file-dec --password encrypted.cybf restored.txt

Пароль вводится скрыто в терминале. Argon2id по умолчанию использует 64 МиБ, три прохода и четыре полосы. Бюджет процесса — 128 МиБ и две параллельные KDF-операции; сервис должен ограничивать суммарную нагрузку отдельно.

Tink и CYBF — разные форматы; используйте соответствующий API или CLI. Экспериментальный CYBF v1 отклоняется.

Безопасность и проверка

Версия 0.3.0 локально проверена на macOS arm64: 198 тестов на Python 3.10 и 3.13, 93% покрытия строк; 3000 ограниченных мутаций потоков отклонены. Это не независимый аудит, сертификация или гарантия отсутствия ошибок. Удалённые проверки зависят от доступности CI; смотрите pipeline.

Расшифрование временно сохраняет открытый текст в приватном каталоге. Аварийная остановка может оставить временные данные. Нужна доверенная локальная файловая система; на Windows приватность зависит от ACL. Python не гарантирует стирание секретов из памяти. Компрометация хоста, утрата ключей, слабые пароли и авторизация приложения находятся за пределами гарантий шифрования.

Политика безопасности · Модель угроз · Результаты проверки · Ключи и восстановление

Лицензия

Copyright 2026 salyukov.gleb033 and contributors. Код и документация проекта распространяются по Apache-2.0, если для стороннего материала не указано иное. Уведомления об авторстве и лицензии зависимостей сохраняют применимость.

Metadata

Release files for cypheron 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cypheron 0.3.0
File Size Uploaded
cypheron-0.3.0.tar.gz 86.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cypheron 0.3.0
File Interpreter ABI Platform
cypheron-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 125.5 kB

Release files / cypheron-0.3.0.tar.gz

Download URL cypheron-0.3.0.tar.gz
Size 86.9 kB
Tags Source
SHA-256 checksum
How to use checksums
0b17def2136337075e52c47dd4d2fabc30eca378ca7d7ea3371f05b9687ff1e3
BLAKE2b-256 checksum
How to use checksums
0a7621179692f46d4e0b0ba1343eaa20da647679a5ad28234596ad8915574f48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.15

Release files / cypheron-0.3.0-py3-none-any.whl

Download URL cypheron-0.3.0-py3-none-any.whl
Size 38.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0b5ea6bc397bf070f4b36f9f3d9f8bda2aa1323a4e87e9d476fbafb8e2f0ce94
BLAKE2b-256 checksum
How to use checksums
050062a508d3071f6489db43cd6436ae00e0a88690b36a9a3bd4719098a258a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.15

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page