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)
| File | Size | Uploaded | |
|---|---|---|---|
| cypheron-0.3.0.tar.gz | 86.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|