Об этом проекте

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 находится в ожидании. Проект находится в активной разработке, с фокусом на проверку жизнеспособности и свойств безопасности модели «кэш в первую очередь».