Cyfrowa warstwa autentyczności dla wiadomości, ogłoszeń i mediów społecznościowych. C2PA + behawioralna atestacja procesu + percepcyjne hashowanie + Integrity Clash detection. Prawda przeżywa screenshot, copy-paste i strip-metadata.
Projekt hackathonowy. Temat: Dekada innowacji — zbuduj fundamenty nowej ery w otaczającej nas rzeczywistości.
Od sierpnia 2026 EU AI Act Art. 50 wymaga oznaczania treści generatywnych. Ale prawo to tylko ramka — nie daje narzędzi:
- Babcia + BLIK: oszust przejmuje numer mamy na WhatsAppie. "Synu, miałam wypadek, wyślij 5000 zł". Nie ma sposobu, by odbiorca zweryfikował, że to faktycznie urządzenie mamy.
- Deepfake porn: ofiara nie ma sposobu, by udowodnić "to nie ja". Słowo przeciw słowu.
- Scam OLX: ogłoszenia z AI-generated zdjęciami "mieszkania" zalewają serwisy. Brak warstwy detekcji niespójności.
C2PA jako standard rozwiązuje część problemów, ale: (1) metadane są wycinane przez platformy, (2) tekst sie nie da klasycznie podpisać, (3) sam podpis nie wykrywa AI.
Trzy warstwy weryfikacji w jednym manifeście:
- Hard binding (klasyczny C2PA) — kryptograficzny podpis treści przez WebAuthn (Touch ID / Windows Hello / Android fingerprint). Klucz prywatny nigdy nie opuszcza secure enclave urządzenia.
- Soft binding — SimHash dla tekstu, pHash dla obrazów. Manifest da się odzyskać z chmury nawet po screenshocie / przepisaniu / kompresji.
- Behavioral attestation (ZK-PoP lite) — dynamika pisania (interwały klawiszy) jako dowód, że tekst napisał człowiek, nie LLM.
Plus: Integrity Clash detection — wykrycie sprzeczności typu "manifest mówi człowiek, ale klasyfikator AI wykrywa generację".
- Backend: FastAPI + PostgreSQL (Manifest Store + key registry)
- Frontend: Next.js 15 (App Router) + Tailwind + Motion
- Crypto: WebAuthn (natywne) + WebCrypto dla hashowania
- Soft binding: Datasketch (SimHash), ImageHash (pHash)
- C2PA: własna implementacja oparta o spec 2.3 (manifest = JSON + JUMBF-like envelope, podpis ECDSA P-256)
- Babcia + BLIK (komunikator) — wiadomość scam vs wiadomość z prawdziwego urządzenia
- Personal Alibi (galeria) — porównanie deepfake'a z bazą podpisanych zdjęć ofiary
- OLX scam (ogłoszenia) — wykrycie AI-generated zdjęć w ogłoszeniu
cp .env.example .env # opcjonalnie, domyślne wartości działają
./scripts/dev up # backend + frontend, hot reload- Backend: http://localhost:8000/docs
- Frontend: http://localhost:3000
Wszystkie komendy:
./scripts/dev up # odpalenie stacku dev (hot reload obu serwisów)
./scripts/dev down # zatrzymanie
./scripts/dev logs # logi obu serwisów
./scripts/dev logs backend # tylko backend
./scripts/dev restart backend # restart pojedynczego serwisu
./scripts/dev shell backend # bash wewnątrz kontenera
./scripts/dev reset-db # re-seed demo data bez restartu
./scripts/dev status # zdrowie usług
./scripts/dev rebuild # force rebuild obrazów (po zmianie deps)
./scripts/dev prod # tryb produkcyjny
./scripts/dev snapshot # zip projektu bez śmieci
./scripts/watch # watcher + auto-testy po każdej zmianie
./scripts/check # pełen smoke test całego systemuLub make up / make check / make watch itd.
# Terminal 1
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
# Terminal 2
cd frontend
npm install
npm run devZmiana w kodzie backendu (backend/app/*.py): uvicorn w kontenerze wykryje i zrestartuje automatycznie. Healthcheck wraca w <2s.
Zmiana w kodzie frontu (frontend/app/*.tsx): Next.js Fast Refresh — zmiany widoczne w przeglądarce bez utraty state.
Zmiana w requirements.txt / package.json: ./scripts/dev rebuild && ./scripts/dev up.
Zmiana w Dockerfile / docker-compose.yml: ./scripts/dev rebuild.
Po zmianie chcesz sprawdzić że nic się nie zepsuło: ./scripts/check — 15 asercji E2E przez całą ścieżkę od API do scenariuszy.