Pro týmy bezpečnosti IT a recenzenty aplikací
Zabezpečení v Peelu
Ve zkratce: obsah nástěnky se šifruje v prohlížeči klíčem, který je ve fragmentu odkazu, takže naše servery ukládají a přeposílají šifrovaná data, která nedokážou přečíst. Níže je přesně popsáno jak a kde jsou hranice.
Shrnutí
- Text kartiček, jména, názvy nástěnek, hlasy a nálepky se šifrují pomocí AES-256-GCM klíčem nástěnky vygenerovaným v prohlížeči. Klíč cestuje ve fragmentu URL (
#k=) a nikdy se neposílá na server. - Akce facilitátora, hlavička nástěnky a snapshoty jsou podepsané klíčem facilitátora Ed25519. ID nástěnky je z tohoto klíče odvozené, takže klienti podvržení klíče odhalí.
- Skryté kartičky jsou až do odhalení zapečetěné pro facilitátora (X25519 sealed box) a svázané osolenými commitmenty, takže odhalený text nelze vyměnit.
- Výchozí je anonymita: operace nenesou ID autora; hlasy a reakce používají náhodné ID platné jen pro danou nástěnku.
- Účastníci se nikdy neautentizují. Žádná analytická SDK, žádné reklamy, žádné skripty třetích stran kromě Paddle.js na stránce pokladny.
- Jen Cloudflare. Nenárokované nástěnky se mažou 60 dní po poslední návštěvě.
Jak tečou data
Fragment URL (vše za #) zpracovává prohlížeč a není součástí HTTP požadavku. Peel do něj ukládá klíč nástěnky.
Model hrozeb
Navrhujeme tak, aby se plně kompromitovaný nebo zvědavý server, včetně nás, dozvěděl o tom, co tým říká, co nejméně.
Co chráníme
- Text kartiček, výběr GIFů a v režimu se jmény i jméno autora.
- Jména a avatary účastníků, název nástěnky a názvy vlastních šablon.
- Kdo hlasoval nebo reagoval na co a kdo napsal kterou kartičku.
- Integritu retra: kroky, odhalení a rozhodnutí facilitátora nelze zfalšovat.
S jakými útočníky počítáme
- Naše vlastní servery, zlovolný insider nebo kdokoli, kdo pronikne do našeho úložiště: získá šifrovaná data a metadata.
- Útočník v síti: TLS všude; klíč nikdy neprochází sítí.
- Server, který podvrhne klíče: ID nástěnky je odvozené z veřejného klíče facilitátora a klienti ověřují podepsanou hlavičku.
- Účastník, který chce nakukovat nebo falšovat: skryté kartičky jsou zapečetěné pro facilitátora; operace facilitátora vyžadují jeho podpis; úpravy kartičky vyžadují klíč kartičky.
- Facilitátor, který znovu publikuje za autora offline: commitmenty mu brání text změnit.
Mimo rozsah, upřímně
- Kdokoli s odkazem pro účastníky může nástěnku číst. Řízením přístupu je samotný odkaz. Sdílejte ho stejně opatrně jako nástěnku samotnou.
- Kompromitované zařízení, škodlivé rozšíření prohlížeče nebo někdo, kdo vám kouká přes rameno.
- Analýza provozu: server vidí časování, velikosti a počty (viz mapa dat).
- Odepření služby ze strany serveru: může zprávy zahodit nebo zdržet, ale ne je přečíst nebo zfalšovat.
Kryptografie
Všechna primitiva pocházejí z WebCrypto API prohlížeče. Žádná vlastní kryptografie, žádné kryptografické knihovny třetích stran.
| Klíč | Algoritmus | Použití |
|---|---|---|
| K_board | AES-256-GCM, 96bitový náhodný IV | Šifruje každou operaci, snapshot a aktualizaci přítomnosti. Doplňková data vážou ID nástěnky, typ operace a ID operace, takže šifrovaná data nelze přehrát do jiné nástěnky ani pozice. Existuje jen ve fragmentu odkazu #k=. |
| K_owner | Ed25519 | Autorita facilitátora. Podepisuje operace facilitátora (krok, časovač, reflektor, šablona, nastavení, odkrytí hlasů, skrytí kartičky), hlavičku nástěnky a snapshoty. Přísně rostoucí čítač brání opakovanému přehrání. Jen v odkazu facilitátora (&o=). |
| ID nástěnky | SHA-256, prvních 80 bitů, base32 | Odvozené z veřejného klíče facilitátora, takže samo ID dokazuje, kterému klíči nástěnka patří. Klienti odmítnou hlavičku, jejíž klíč se nezahashuje na toto ID. |
| K_fac | X25519 sealed box: efemérní X25519 + HKDF-SHA256 + AES-256-GCM | Skryté kartičky se během psaní zapečetí pro veřejný klíč facilitátora. Otevřít je dokáže jen odkaz facilitátora (&f=). |
| Klíče kartiček | Ed25519, jeden klíč na kartičku | Drží ho jen autor. Úpravy a odhalení jsou jím podepsané: pravost bez identity. |
| Commitmenty | HMAC-SHA256 se 128bitovou náhodnou solí | Skrytá kartička zveřejní commitment ke svému obsahu. Při odhalení se zveřejní obsah i sůl a každý klient je ověří, takže text nikdo nevymění. |
| Přítomnost | AES-256-GCM pod K_board | Jména, avatary a indikátory psaní se šifrují stejně jako všechno ostatní. |
| Balíček klíčů | HKDF-SHA256 z PRF přístupového klíče nebo z kódu pro obnovení, AES-256-GCM | Přihlášení facilitátoři mohou synchronizovat klíče k nástěnkám mezi zařízeními. Balíček se šifruje na zařízení; server ukládá jen šifrovaná data a zabalené klíče. |
Podepisované zprávy jsou doménově oddělené (například peel/sig/v1, peel/header/v1, peel/snap/v1), takže podpis pro jeden účel nelze použít pro jiný.
Anonymita
- Operace nenesou ID autora. Server nedokáže spojit kartičku s osobou a ve výchozím stavu to nedokáže ani facilitátor.
- Hlasy a reakce jsou vázané na náhodné ID platné pro jednu nástěnku, které není spojené se jménem.
- Indikátory psaní ukazují, že někdo píše, nikdy co.
- Režim se jmény je výslovné nastavení nástěnky; jméno autora pak cestuje uvnitř šifrované kartičky.
- Účastníci se nikdy nepřihlašují, takže neexistuje účet, se kterým by šlo cokoli propojit.
Mapa dat
Vše, co uchováváme, kde to je, kdo to může číst a jak dlouho to zůstává.
| Data | Kde | Kdo je může číst | Jak dlouho |
|---|---|---|---|
| Kartičky, hlasy, reakce, nálepky, akční kroky, název nástěnky, názvy vlastních šablon | Úložiště Durable Object, šifrovaně | Lidé s odkazem na nástěnku | Do smazání nástěnky |
| Obálka operace: typ, sekvence a čas na serveru, velikost, čítač facilitátora | Úložiště Durable Object | Peel | Do smazání nástěnky |
| Jména účastníků, avatary, psaní | Přeposíláno šifrovaně; v paměti po dobu připojení | Lidé s odkazem na nástěnku | Po dobu připojení |
| Stav nástěnky: krok, počet účastníků a kartiček, ID šablony z katalogu, příznak zamčení, čas vytvoření a vypršení | Durable Object, D1; zprávy ve Slacku/Teams, pokud jsou nainstalované | Peel; váš kanál ve Slacku/Teams | Po dobu života nástěnky |
| Účet facilitátora: ID u poskytovatele, jméno, e-mail (pokud je sdílený), propojení poskytovatelé, datum vytvoření, relace | D1 | Peel | Do smazání účtu |
| Balíček klíčů a zabalené klíče | D1, šifrovaně | Jen vy (přístupový klíč nebo kód pro obnovení) | Do smazání účtu |
| Plán, stav předplatného, ID zákazníka a předplatného v Paddle | D1; Paddle | Peel, Paddle | Podle požadavků daňových předpisů |
| ID pracovního prostoru, kanálu a zpráv ve Slacku/Teams; token bota (šifrovaný AES-GCM) | D1 | Peel | Do odinstalování |
| IP adresa | Edge Cloudflare, přechodně (doručení, limity požadavků) | Cloudflare, omezovač požadavků Peelu | Neukládá se v našich databázích |
| Denní počítadla (vytvořené nástěnky, dosažené kroky) | D1 | Peel | Jen agregovaně, bez identifikátorů |
Co náš server může a co ne
Může
- Vidět typy operací, velikosti, časování, krok, počet účastníků a kartiček, ID šablony z katalogu a příznak zamčení.
- Zahodit, zdržet nebo odmítnout doručit operace (odepření služby).
- Vidět IP adresy na okraji sítě.
- Agregovaně počítat nástěnky a dosažené kroky.
- Smazat nástěnku (vypršení, nahlášení zneužití).
Nemůže
- Číst text kartiček, jména, názvy nástěnek, názvy vlastních šablon, hlasy ani nálepky.
- Číst skryté kartičky před odhalením (a ani po něm).
- Falšovat akce facilitátora: vyžadují jeho podpis.
- Podstrčit vlastní klíče: prozradí ho ID nástěnky.
- Změnit odhalený text kartičky: prozradí ho commitmenty a podpisy kartiček.
- Zjistit, kdo napsal kterou kartičku.
Jako u každé webové aplikace důvěřujete kódu, který servírujeme. Tuto plochu držíme malou: přísná Content Security Policy, script-src omezený na náš vlastní původ, žádné skripty třetích stran a protokol je na vyžádání k dispozici k revizi.
Slack a Microsoft Teams
- Zprávy nesou odkaz na nástěnku a metadata (název, krok, počty). Text kartiček se posílá jen tehdy, když facilitátor pošle shrnutí a potvrdí to.
- Karta s pozvánkou obsahuje odkaz pro účastníky včetně klíče. Kdokoli, kdo může číst daný kanál, se může připojit, stejně jako při vložení odkazu.
- Náhledy odkazů ukazují jen krok a počty, nikdy obsah.
- Oprávnění ve Slacku:
commands,chat:write,links:read,links:write;users:readjen tehdy, když tým zapne zmínky. - Tokeny botů jsou v klidu šifrované (AES-GCM, klíč uložený jako tajemství Workeru). Podpisy požadavků Slacku a tokeny Bot Frameworku se ověřují u každého požadavku.
- Odinstalováním aplikace se zastaví veškeré odesílání a smažou se její tokeny.
Web a infrastruktura
- Jen Cloudflare: Pages, Workers, Durable Objects, D1, R2 a KV na účtu 1801 Labs. Žádné jiné servery.
- TLS všude, HSTS a přísná Content Security Policy.
- Žádná analytická SDK, žádné reklamy, žádné skripty třetích stran. Jedinou výjimkou je Paddle.js, načítaný jen na stránce pokladny.
- Jedna cookie, jen pro přihlášené facilitátory:
peel_session, httpOnly, Secure, SameSite=Lax. - Hledání GIFů a média jdou přes naše API, takže IP adresy účastníků se ke GIPHY nikdy nedostanou.
- Fonty a soubory hostujeme sami. Žádné fonty z CDN, žádné sledovací pixely.
- Limity požadavků na IP adresu a na nástěnku; hlášení zneužití a zamčení facilitátorem.
Účty a uchovávání dat
- Účastníci se nikdy neautentizují. Facilitátoři se přihlašují přes Google (nebo Entra ID přes Teams) jen kvůli uchování nástěnek nebo placeným funkcím.
- Účet uchovává ID, jméno a e-mail od poskytovatele a šifrovaný balíček klíčů odemykaný přístupovým klíčem (WebAuthn PRF) nebo kódem pro obnovení. Přihlášení dává vlastnictví, ne přístup k obsahu.
- Nárokování nástěnky prokazuje vlastnictví podpisem facilitátora. Klíče k nástěnkám se nikdy neposílají.
- Nástěnky bez účtu se mažou 60 dní po poslední návštěvě; každá návštěva lhůtu vynuluje. Úložiště mažou alarmy Durable Objects.
- Smazáním účtu se smažou relace, balíček klíčů a vaše knihovna a nástěnky opět dostanou 60denní lhůtu.
Odpovědné zveřejňování
Něco jste našli? Dejte nám vědět jako prvním a budeme s vámi spolupracovat. Přijetí hlášení potvrdíme do tří pracovních dnů.
- Dejte nám prosím přiměřený čas na opravu (snažíme se o 90 dní), než problém zveřejníte.
- Testujte na vlastních nástěnkách a účtech. Nepřistupujte k datům jiných lidí a nezhoršujte provoz služby.
- Proti výzkumu v dobré víře, který dodržuje tato pravidla, nebudeme podnikat právní kroky.
- Strojově čitelný kontakt:
/.well-known/security.txt.
Zákazníci s plánem Firma dostanou balíček pro bezpečnostní audit (odpovědi na dotazníky, subzpracovatelé, toky dat). DPA · Ochrana soukromí