Skip to content

Система на RazorPages для относительно безопасной передачи данныех текстов и файлов до 5 ГБ (Исполнитель Gemini 3)

License

Notifications You must be signed in to change notification settings

KuzarinM/VoidDropSecure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔒 VoidDropSequence

Self-hosted, Zero-Knowledge File Sharing Service.

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

✨ Особенности

  • 🔐 End-to-End Шифрование: Все данные шифруются (AES-GCM 256) на клиенте с использованием Web Crypto API. Сервер хранит только зашифрованные байты.
  • 🪃 Secure Reverse Drop (НОВОЕ): Возможность создать "Шлюз" (обратную ссылку). Вы отправляете ссылку собеседнику, и он может безопасно передать вам файл. Используется гибридное шифрование (RSA-OAEP + AES), гарантирующее, что прочитать файл сможет только создатель ссылки.
  • 🖼️ Rich Media Support (НОВОЕ):
    • Отдельная вкладка для отправки Изображений.
    • Поддержка Drag & Drop и вставки из буфера обмена (Ctrl+V).
    • Безопасный просмотр картинок прямо в браузере получателя (расшифровка в Blob URL без сохранения на диск).
  • 🏎️ Chunked Uploads: Поддержка файлов любого размера (хоть 10 Гб). Данные загружаются и шифруются потоково (кусками по 4 МБ), не перегружая оперативную память.
  • 🧅 Layered Security:
    • Базовая ссылка содержит ключ после # (сервер его не видит).
    • Опциональная защита паролем (двойное шифрование ключа "Матрешка").
  • 📱 Mobile Friendly: Адаптивный "Cyberpunk" дизайн (Dark Mode), QR-коды для передачи на телефон с возможностью скачивания PNG.
  • 💣 Самоуничтожение: Файлы удаляются физически (shredding) сразу после скачивания или по истечению таймера (TTL).
  • 💾 No Database: Работает без SQL/Redis. Использует файловую систему для хранения метаданных (Sidecar pattern), что упрощает бэкапы.
  • 🐳 Docker Ready: Полностью готов к развертыванию в контейнерах.

🛠️ Технический стек

  • Backend: ASP.NET Core 8 (Razor Pages)
  • Frontend: Vanilla JS (ES6+), Web Crypto API, Bootstrap 5
  • Streaming: StreamSaver.js (для сохранения больших файлов сразу на диск)
  • Storage: Local Filesystem (Flat-file DB pattern)

🚀 Быстрый старт (Docker)

Самый простой способ запустить VoidDrop — использовать docker-compose.

version: '3.8'

services:
  voiddrop:
    image: voiddrop:latest
    build: .
    container_name: voiddrop
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./void-data:/data
    environment:
      - ASPNETCORE_URLS=http://+:8080
      - AppConfig__StoragePath=/data
      - AppConfig__CleanupIntervalMinutes=10
      # Разрешаем загрузку до 10 ГБ (в байтах)
      - AppConfig__MaxUploadSizeBytes=10737418240
  1. Сохраните код выше в docker-compose.yml.
  2. Запустите:
    docker-compose up -d --build
  3. Откройте http://localhost:8080.

Важно: Для работы криптографии в современных браузерах (Clipboard API, Web Crypto) требуется HTTPS или localhost. В продакшене обязательно используйте Reverse Proxy (Nginx/Caddy) с SSL сертификатом.

⚙️ Конфигурация

Приложение настраивается через переменные окружения (Environment Variables):

Переменная По умолчанию Описание
AppConfig__StoragePath SecretData Путь к папке, где хранятся зашифрованные файлы и метаданные.
AppConfig__CleanupIntervalMinutes 10 Как часто запускать фоновый процесс очистки просроченных файлов.
AppConfig__MaxUploadSizeBytes 5368709120 Максимальный размер файла (байт). Default: 5 GB.

🛡️ Архитектура безопасности

В проекте используются два различных подхода к шифрованию в зависимости от сценария.

1. Прямая отправка (Direct Send)

Сценарий: "Я хочу отправить файл другу".

  1. Генерация: Клиент генерирует случайный Master Key (AES-256).
  2. Шифрование: Файл нарезается на чанки. Каждый чанк шифруется AES-GCM с уникальным IV.
  3. Передача: Зашифрованные чанки летят на сервер. Ключ кодируется в Base64 и добавляется в URL якорем (#Key).
  4. Пароль (опционально): Если установлен пароль, Master Key заворачивается в ключ, полученный из пароля (PBKDF2), и только потом сохраняется. Сервер видит только крипто-мусор.

2. Обратный запрос (Secure Reverse Drop)

Сценарий: "Я хочу получить файл от друга, но у нас нет безопасного канала для обмена ссылками".

Используется Гибридное шифрование (Hybrid Encryption).

  1. Инициализация (Получатель):
    • Браузер генерирует пару ключей RSA-OAEP 2048 (Public + Private).
    • Private Key остается в RAM браузера.
    • Public Key отправляется на сервер для создания "Комнаты ожидания".
  2. Отправка (Отправитель):
    • Отправитель переходит по ссылке и получает Public Key.
    • Файл шифруется быстрым симметричным ключом (AES-GCM).
    • Сам AES-ключ шифруется асимметричным RSA Public Key.
    • Зашифрованный пакет ("конверт") отправляется на сервер.
  3. Получение:
    • Браузер Получателя видит пакет.
    • Расшифровывает AES-ключ своим Private Key.
    • Использует AES-ключ для расшифровки и отображения файла.

Безопасность: Даже если ссылка на запрос перехвачена злоумышленником, он может только отправить файл, но не может прочитать то, что отправят вам другие, так как у него нет Private Key (который живет только в вашей вкладке браузера).

🤝 Авторы

Проект создан в уникальном коллаборативном режиме "Человек + ИИ":

  • 💻 Code & Implementation: [Gemini 3 Pro Preview / AI Assistant]
    • Написал 99% кода (C#, JS, CSS).
    • Реализовал криптографию (AES + RSA) и логику потоков.
  • 🧠 Architecture & Prompts: [Максим / KuzarinM ]
    • Идея, требования безопасности, архитектурный надзор.
    • Тестирование на прочность и дизайн-ревью.
    • Помогал ИИ не сойти с ума.

About

Система на RazorPages для относительно безопасной передачи данныех текстов и файлов до 5 ГБ (Исполнитель Gemini 3)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published