Об этом проекте
Syndeo — это проект браузера с открытым исходным кодом, который переосмысливает традиционную архитектуру веб-браузера, ставя кэш в центр своей модели. Его философия основана на строгом разделении процессов и границах безопасности, с целью превращения доверия в проверяемую истину через проверяемые взаимодействия.
**Архитектура и модель процессов**
Система построена вокруг трех основных границ:
1. **Рендереры никогда не общаются с сетью:** Процессы рендеринга (Servo или WebKit) не открывают сокеты. Они отправляют объекты `NetRequest` в отдельный сетевой процесс (`syndeo-net`), который обрабатывает DNS, TLS и кэширование. Это предотвращает обход рендерером политик безопасности или утечку информации через сетевые задержки.
2. **Агент никогда не общается с хранилищем ключей:** Процесс агента, который может выполнять WebAssembly-задачи, изолирован от хранилища ключей. Он не может напрямую получить доступ к ключам, что снижает поверхность атаки для вредоносных скриптов или агентов.
3. **Хранилище ключей предоставляет ровно одну операцию:** Оно может подписывать данные только после того, как оболочка подтвердит намерение пользователя. Это подтверждение включает MAC-код происхождения, цели и хеша данных, обеспечивая явное и привязанное к конкретным действиям согласие.
**Ключевые компоненты**
- **`syndeo-cache`:** Реализует политики RFC 9111 с индексом redb и хранилищем BLOB-объектов, адресованным по BLAKE3. Поддерживает целостность подресурсов (SRI) и разделен по верхнему уровню происхождения для предотвращения кросс-сайтового отслеживания через задержки кэша.
- **`syndeo-net`:** Сетевой процесс, обрабатывающий HTTP/1.1, HTTP/2 и HTTP/3 (QUIC). Интегрируется с кэшем и предоставляет API для получения данных для остальной системы.
- **`syndeo-peer`:** Включает обмен контентом между пирами с использованием libp2p. Пиры запрашиваются только для контента, уже названного по хешу в странице, сохраняя некоторую конфиденциальность при децентрализованном распространении контента.
- **`syndeo-keystore`:** Управляет криптографическими ключами с запечатанным корневым секретом. Использует Argon2id для запечатывания пароля и интегрируется с системными хранилищами учетных данных (Keychain на macOS, Secret Service на Linux). Поддерживает согласие на каждую подпись и автоматическое забывание сидов после бездействия или блокировки.
- **`syndeo-dom`:** Безголосная реализация DOM, используемая агентом для чтения страниц без полного рендеринга, с фокусом на текст, ссылки и формы.
- **`syndeo-ui`:** Оконная оболочка, построенная с использованием winit, wgpu и egui, предоставляющая графический интерфейс с поддержкой доступности.
**Конфиденциальность и безопасность**
Syndeo устанавливает несколько настроек по умолчанию для защиты конфиденциальности:
- **Разделенный кэш:** Кэш индексируется по происхождению верхнего уровня документа, предотвращая кросс-сайтовое отслеживание через задержки попадания/промаха в кэше. Контент дедуплицируется на уровне BLOB-объектов для экономии места, несмотря на разделение.
- **DNS over HTTPS (DoH):** Включен по умолчанию (Cloudflare), с опциями для Google, Quad9 или системного резолвера.
- **Нет телеметрии:** Код не содержит аналитики, отчетов об ошибках или пингов обновления.
- **Удаление учетных данных:** Заголовки `Authorization` и `Cookie` удаляются при переходе по перенаправлениям между доменами.
**Использование и инструменты**
- **Установка:** Доступен для macOS (Apple Silicon) и Linux (x86_64/arm64) через скрипт, который проверяет контрольные суммы. `sudo` не требуется.
- **CLI:** `syndeo browse` загружает страницы и сообщает о статусе кэша. `syndeo agent` запускает задачи, такие как чтение или сканирование страниц. `syndeo sign` выполняет криптографическую подпись с подтверждением пользователя.
- **Режим прокси:** `syndeo-proxy` может работать как перехватывающий прокси для измерения эффективности кэша на реальном трафике из других браузеров, таких как Chrome.
- **Рендеринг:** Поддерживает Servo (безголосный/с ограниченными функциями) и WebKit (только macOS, для воспроизведения видео). Интеграция с WebKit использует локальный прокси для соблюдения сетевых границ, поскольку WebKit не поддерживает пользовательские обработчики схем для HTTP/HTTPS.
**Разработка и статус**
- **Сборка:** Требует Rust, с конкретными зависимостями для Linux (D-Bus, Wayland/X11). Интеграция с Servo ограничена из-за длительного времени компиляции.
- **Тестирование:** Включает соответствие RFC 9111, скрипты измерения памяти и инструменты проверки релизов.
- **Пробелы:** Поддержка Windows и ChromeOS находится в ожидании. Проект находится в активной разработке, с фокусом на проверку жизнеспособности и свойств безопасности модели «кэш в первую очередь».
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.