Šepot — end-to-end encrypted messenger

Initial public release. Anonymous on-device identity (no phone number,
e-mail, or password), Signal-protocol cryptography (X3DH + PQXDH, Double
Ratchet, sealed sender) via libsignal, a metadata-minimizing relay,
group chats, disappearing messages, encrypted local storage, optional
Tor transport, and a UI localized into Czech, English, German, Russian,
and Italian.

Monorepo: Flutter client (app/), Rust relay + wire types (rust/),
protobuf definitions (proto/), self-host deploy (deploy/).

Licensed under AGPL-3.0 with an app-store distribution exception (§7).
This commit is contained in:
Julius Joska
2026-07-11 17:06:39 +02:00
commit 8081d98c67
309 changed files with 44102 additions and 0 deletions
+142
View File
@@ -0,0 +1,142 @@
# Changelog
Všechny podstatné změny v aplikaci Šepot. Formát dle
[Keep a Changelog](https://keepachangelog.com/cs/1.1.0/),
verzování dle [ajtak standardu](#verzování).
## [Nevydáno]
### Přidáno
- **Aplikace mluví pěti jazyky: česky, anglicky, německy, rusky
a italsky.** Jazyk se řídí systémem (neznámé jazyky spadnou na
angličtinu), nebo ho přepneš ručně v Nastavení → Obecné. Přeložené
jsou i notifikace, chybové hlášky, iOS dialogy oprávnění a chybová
obrazovka startu; volba jazyka funguje už na zamykací obrazovce.
- **Připojení přes Tor.** Přepínač v Nastavení → Připojení (Android,
vyžaduje Orbot): provoz na server jde přes síť Tor a skryje tvou IP
adresu. Přepnutí přestaví spojení za běhu, bez restartu aplikace.
- **Skupinové konverzace.** Skupinu (až 128 členů) založíš z Kontaktů,
posílat do ní jde všechno co do běžného chatu — text, fotky, přílohy,
hlasovky, reakce, odpovědi i mizící zprávy. Menu nabízí seznam členů,
přejmenování a odchod. Zprávy jsou end-to-end šifrované každému členovi
zvlášť, takže platí stejná ochrana jako v běžné konverzaci; server
o skupině neví nic.
### Opraveno
- Automatický zámek, změna PINu i nátlakový PIN ověřeny na zařízení.
## [0.3.2] – 2026-07-10
### Přidáno
- **Smazání účtu maže i server.** „Smazat všechna data" nově kromě
lokálního wipe odregistruje účet z relaye (`DELETE /v1/identity`):
smaže se registrace identity, záznamy zařízení, distribuční klíče,
push token i fronta nedoručených zpráv. Když je zařízení offline,
aplikace na to upozorní a zbytek řeší podpora@sepot.cz.
### Opraveno
- iOS: privacy manifest (`PrivacyInfo.xcprivacy`) je součástí Xcode
projektu — konec ručního vkládání při každém buildu (ITMS-91053).
- iOS: `Info.plist` měl dvakrát `CFBundleDisplayName` (jednou bez
diakritiky) a povoloval landscape, ačkoli je aplikace zamčená na
portrét. Sjednoceno.
## [0.3.1] – 2026-07-09
### Opraveno
- **Nahlašování už nevybízí k vkládání obsahu zpráv.** Formulář dřív nabízel
„pokud chceš něco doložit, vlož to do popisu sám“. U hlášení o ohrožení
dítěte by to znamenalo, že se k provozovateli dostane materiál, jehož
držení je trestné — a k posouzení ho stejně nesmí použít. Nově formulář
obsah odmítá a u této kategorie odkazuje na STOPonline.cz a Policii ČR.
## [0.3.0] – 2026-07-09
Nahlašování zneužití a standardy ochrany dětí — bez nich Šepot nesmí do
obchodů (Google Play UGC policy, Child Safety Standards, App Store 1.2).
### Přidáno
- **Nahlášení zneužití** — Nastavení → Bezpečnost → Nahlásit zneužití, nebo
z menu konverzace. Do teď „nahlásit“ jen zablokovalo kontakt a nikam
nedošlo; nově hlášení dorazí provozovateli. Kategorie zahrnují ohrožení
dítěte (CSAE), které se řeší přednostně.
- **Standardy ochrany dětí** — veřejný dokument na
[sepot.cz/bezpecnost-deti](https://sepot.cz/bezpecnost-deti), odkaz přímo
z nastavení.
- **Deklarace exportní compliance** (`ITSAppUsesNonExemptEncryption`) —
Šepot používá vlastní E2E šifrování, což se Applu hlásí pravdivě.
### Opraveno
- **iOS: bílá obrazovka po spuštění.** Nativní knihovna libsignal se na
iPhonu nenačetla (framework je v `Frameworks/`, ale není zalinkovaný, a
výchozí loader ho hledal v kořeni `.app`). Start teď knihovnu načítá přes
`@rpath` a navíc už nikdy neskončí němou plochou — když se šifrovací
jádro nespustí, objeví se čitelná chybová obrazovka s textem k odeslání.
- Verze uvedená v Nastavení → O aplikaci ukazovala pořád `0.1.0`.
### Poznámka k soukromí
Hlášení neodchází přes relay, ale na webový server sepot.cz — ten se při
odeslání dozví IP adresu odesílatele. Aplikace na to upozorňuje ještě před
odesláním. Obsah zpráv se neodesílá nikdy; do hlášení jde jen to, co
uživatel sám napíše.
## [0.2.0] – 2026-07-08
Velká funkční vlna — z E2E základu je plnohodnotný soukromý messenger.
### Přidáno
- **Jádro chatu** — odpovědi na zprávy, reakce emotikonem, úprava a mazání
odeslaných zpráv.
- **Hlasové zprávy** — nahrávání mikrofonem přímo v chatu, přehrávání
s průběhem. Šifrované per-file, plaintext audio nikdy nejde na disk.
- **Obnova účtu ze zálohovací fráze** — 24 slov vrátí tvoji identitu
(stejný SEP kód, kontakty tě dál poznají).
- **Šifrované zálohy historie** — export/import konverzací; zálohu dešifruje
jen tvoje identita.
- **Blokování a nahlášení kontaktu** — příchozí zprávy od blokovaného se
zahodí.
- **Potvrzení přečtení** (volitelné, výchozí vypnuto).
- **Smazat u mě** — lokální smazání zprávy vedle „Smazat pro všechny".
- **Zabezpečení obrazovky** — blok screenshotů a skrytí obsahu v přepínači
aplikací.
- **Nátlakový (decoy) PIN** — druhý PIN otevře prázdnou aplikaci; skutečná
data zůstanou skrytá.
- **Nativní iOS push (APNs)** — bez závislosti na Googlu.
### Změněno
- **Sjednocené logo** napříč launcherem, splash obrazovkou i uvnitř aplikace.
- **Čistší pole pro psaní** — jeden tenký obrys, ikony uvnitř, nižší profil.
- **Bubliny se scalují** podle délky zprávy.
### Opraveno
- **Doručenky (✓✓)** se povýší i u offline příjemce, jakmile si zprávu
vyzvedne.
- **Náhledy fotek** už neukazují předchozí obrázek (chyba recyklace v seznamu).
### Bezpečnost
- Zálohy i decoy PIN stojí na oddělených šifrovaných databázích a klíčích
odvozených z identity.
## [0.1.0] – 2026-07-04
První beta.
### Přidáno
- **End-to-end šifrované zprávy** (libsignal, PQXDH + Double Ratchet,
sealed sender) přes vlastní relay (WSS + Tor onion).
- **Fotky a dokumenty** — šifrované přílohy.
- **Ověření kontaktu** přes safety number a QR.
- **Mizící zprávy** s per-konverzace TTL.
- **PIN (Argon2id) a biometrické odemčení**, šifrovaná lokální DB (SQLCipher).
- **Push** — UnifiedPush (výchozí), FCM (opt-in).
- Bez telefonního čísla, bez e-mailu, bez reklam.
---
## Verzování
- **versionName `0.MINOR.PATCH`** v betě → **`1.0.0` = veřejné vydání**.
- **MINOR** = nová várka funkcí / milník (0.2.0 → 0.3.0 → 0.4.0…).
- **PATCH** = jen opravy chyb a drobnosti (0.2.1, 0.2.2…).
- **Build number** (`+N`) roste `+1` při každém uploadu, nezávisle na
versionName, stejný pro iOS i Android. Uživatel ho nevidí.