Pre tímy IT bezpečnosti a recenzentov aplikácií
Zabezpečenie v Peeli
V skratke: obsah nástenky sa šifruje v prehliadači kľúčom, ktorý je vo fragmente odkazu, takže naše servery ukladajú a preposielajú zašifrované dáta, ktoré nedokážu prečítať. Nižšie je presne opísané ako a kde sú hranice.
Zhrnutie
- Text kartičiek, mená, názvy násteniek, hlasy a nálepky sa šifrujú pomocou AES-256-GCM kľúčom nástenky vygenerovaným v prehliadači. Kľúč cestuje vo fragmente URL (
#k=) a nikdy sa neposiela na server. - Akcie facilitátora, hlavička nástenky a snapshoty sú podpísané kľúčom facilitátora Ed25519. ID nástenky je z tohto kľúča odvodené, takže klienti podvrhnutie kľúča odhalia.
- Skryté kartičky sú až do odhalenia zapečatené pre facilitátora (X25519 sealed box) a viazané osolenými commitmentmi, takže odhalený text nemožno vymeniť.
- Predvolená je anonymita: operácie nenesú ID autora; hlasy a reakcie používajú náhodné ID platné len pre danú nástenku.
- Účastníci sa nikdy neautentifikujú. Žiadne analytické SDK, žiadne reklamy, žiadne skripty tretích strán okrem Paddle.js na stránke pokladne.
- Len Cloudflare. Nenárokované nástenky sa mažú 60 dní po poslednej návšteve.
Ako tečú dáta
Fragment URL (všetko za #) spracúva prehliadač a nie je súčasťou HTTP požiadavky. Peel doň ukladá kľúč nástenky.
Model hrozieb
Navrhujeme tak, aby sa úplne kompromitovaný alebo zvedavý server, vrátane nás, dozvedel o tom, čo tím hovorí, čo najmenej.
Čo chránime
- Text kartičiek, výber GIF-ov a v režime s menami aj meno autora.
- Mená a avatary účastníkov, názov nástenky a názvy vlastných šablón.
- Kto hlasoval alebo reagoval na čo a kto napísal ktorú kartičku.
- Integritu retra: kroky, odhalenia a rozhodnutia facilitátora nemožno sfalšovať.
S akými útočníkmi počítame
- Naše vlastné servery, zlomyseľný insider alebo ktokoľvek, kto prenikne do nášho úložiska: získa zašifrované dáta a metadáta.
- Útočník v sieti: TLS všade; kľúč nikdy neprechádza sieťou.
- Server, ktorý podvrhne kľúče: ID nástenky je odvodené z verejného kľúča facilitátora a klienti overujú podpísanú hlavičku.
- Účastník, ktorý chce nakúkať alebo falšovať: skryté kartičky sú zapečatené pre facilitátora; operácie facilitátora vyžadujú jeho podpis; úpravy kartičky vyžadujú kľúč kartičky.
- Facilitátor, ktorý znova publikuje za autora offline: commitmenty mu bránia text zmeniť.
Mimo rozsahu, úprimne
- Ktokoľvek s odkazom pre účastníkov môže nástenku čítať. Riadením prístupu je samotný odkaz. Zdieľajte ho rovnako opatrne ako samotnú nástenku.
- Kompromitované zariadenie, škodlivé rozšírenie prehliadača alebo niekto, kto vám pozerá cez plece.
- Analýza prevádzky: server vidí časovanie, veľkosti a počty (pozri mapu dát).
- Odopretie služby zo strany servera: môže správy zahodiť alebo zdržať, ale nie ich prečítať či sfalšovať.
Kryptografia
Všetky primitíva pochádzajú z WebCrypto API prehliadača. Žiadna vlastná kryptografia, žiadne kryptografické knižnice tretích strán.
| Kľúč | Algoritmus | Použitie |
|---|---|---|
| K_board | AES-256-GCM, 96-bitový náhodný IV | Šifruje každú operáciu, snapshot a aktualizáciu prítomnosti. Doplnkové dáta viažu ID nástenky, typ operácie a ID operácie, takže zašifrované dáta nemožno prehrať do inej nástenky ani pozície. Existuje len vo fragmente odkazu #k=. |
| K_owner | Ed25519 | Autorita facilitátora. Podpisuje operácie facilitátora (krok, časovač, reflektor, šablóna, nastavenia, odkrytie hlasov, skrytie kartičky), hlavičku nástenky a snapshoty. Prísne rastúce počítadlo bráni opakovanému prehratiu. Len v odkaze facilitátora (&o=). |
| ID nástenky | SHA-256, prvých 80 bitov, base32 | Odvodené z verejného kľúča facilitátora, takže samotné ID dokazuje, ktorému kľúču nástenka patrí. Klienti odmietnu hlavičku, ktorej kľúč sa nezahešuje na toto ID. |
| K_fac | X25519 sealed box: efemérny X25519 + HKDF-SHA256 + AES-256-GCM | Skryté kartičky sa počas písania zapečatia pre verejný kľúč facilitátora. Otvoriť ich dokáže len odkaz facilitátora (&f=). |
| Kľúče kartičiek | Ed25519, jeden kľúč na kartičku | Drží ho len autor. Úpravy a odhalenie sú ním podpísané: pravosť bez identity. |
| Commitmenty | HMAC-SHA256 so 128-bitovou náhodnou soľou | Skrytá kartička zverejní commitment k svojmu obsahu. Pri odhalení sa zverejní obsah aj soľ a každý klient ich overí, takže text nikto nevymení. |
| Prítomnosť | AES-256-GCM pod K_board | Mená, avatary a indikátory písania sa šifrujú rovnako ako všetko ostatné. |
| Balík kľúčov | HKDF-SHA256 z PRF prístupového kľúča alebo z kódu na obnovenie, AES-256-GCM | Prihlásení facilitátori môžu synchronizovať kľúče k nástenkám medzi zariadeniami. Balík sa šifruje na zariadení; server ukladá len zašifrované dáta a zabalené kľúče. |
Podpisované správy sú doménovo oddelené (napríklad peel/sig/v1, peel/header/v1, peel/snap/v1), takže podpis na jeden účel nemožno použiť na iný.
Anonymita
- Operácie nenesú ID autora. Server nedokáže spojiť kartičku s osobou a predvolene to nedokáže ani facilitátor.
- Hlasy a reakcie sú viazané na náhodné ID platné pre jednu nástenku, ktoré nie je spojené s menom.
- Indikátory písania ukazujú, že niekto píše, nikdy čo.
- Režim s menami je výslovné nastavenie nástenky; meno autora potom cestuje vnútri zašifrovanej kartičky.
- Účastníci sa nikdy neprihlasujú, takže neexistuje účet, s ktorým by sa dalo čokoľvek prepojiť.
Mapa dát
Všetko, čo uchovávame, kde to je, kto to môže čítať a ako dlho to zostáva.
| Dáta | Kde | Kto ich môže čítať | Ako dlho |
|---|---|---|---|
| Kartičky, hlasy, reakcie, nálepky, akčné kroky, názov nástenky, názvy vlastných šablón | Úložisko Durable Object, zašifrované | Ľudia s odkazom na nástenku | Do vymazania nástenky |
| Obálka operácie: typ, sekvencia a čas na serveri, veľkosť, počítadlo facilitátora | Úložisko Durable Object | Peel | Do vymazania nástenky |
| Mená účastníkov, avatary, písanie | Preposielané zašifrované; v pamäti počas pripojenia | Ľudia s odkazom na nástenku | Počas pripojenia |
| Stav nástenky: krok, počet účastníkov a kartičiek, ID šablóny z katalógu, príznak zamknutia, čas vytvorenia a vypršania | Durable Object, D1; správy v Slacku/Teams, ak sú nainštalované | Peel; váš kanál v Slacku/Teams | Počas životnosti nástenky |
| Účet facilitátora: ID u poskytovateľa, meno, e-mail (ak je zdieľaný), prepojení poskytovatelia, dátum vytvorenia, relácia | D1 | Peel | Do vymazania účtu |
| Balík kľúčov a zabalené kľúče | D1, zašifrované | Len vy (prístupový kľúč alebo kód na obnovenie) | Do vymazania účtu |
| Plán, stav predplatného, ID zákazníka a predplatného v Paddle | D1; Paddle | Peel, Paddle | Podľa požiadaviek daňových predpisov |
| ID pracovného priestoru, kanála a správ v Slacku/Teams; token bota (šifrovaný AES-GCM) | D1 | Peel | Do odinštalovania |
| IP adresa | Edge Cloudflare, prechodne (doručenie, limity požiadaviek) | Cloudflare, obmedzovač požiadaviek Peelu | Neukladá sa v našich databázach |
| Denné počítadlá (vytvorené nástenky, dosiahnuté kroky) | D1 | Peel | Len agregovane, bez identifikátorov |
Čo náš server môže a čo nie
Môže
- Vidieť typy operácií, veľkosti, časovanie, krok, počet účastníkov a kartičiek, ID šablóny z katalógu a príznak zamknutia.
- Zahodiť, zdržať alebo odmietnuť doručiť operácie (odopretie služby).
- Vidieť IP adresy na okraji siete.
- Agregovane počítať nástenky a dosiahnuté kroky.
- Vymazať nástenku (vypršanie, nahlásenie zneužitia).
Nemôže
- Čítať text kartičiek, mená, názvy násteniek, názvy vlastných šablón, hlasy ani nálepky.
- Čítať skryté kartičky pred odhalením (a ani po ňom).
- Falšovať akcie facilitátora: vyžadujú jeho podpis.
- Podstrčiť vlastné kľúče: prezradí ho ID nástenky.
- Zmeniť odhalený text kartičky: prezradia ho commitmenty a podpisy kartičiek.
- Zistiť, kto napísal ktorú kartičku.
Ako pri každej webovej aplikácii dôverujete kódu, ktorý servírujeme. Túto plochu držíme malú: prísna Content Security Policy, script-src obmedzený na náš vlastný pôvod, žiadne skripty tretích strán a protokol je na požiadanie k dispozícii na revíziu.
Slack a Microsoft Teams
- Správy nesú odkaz na nástenku a metadáta (názov, krok, počty). Text kartičiek sa posiela len vtedy, keď facilitátor pošle zhrnutie a potvrdí to.
- Karta s pozvánkou obsahuje odkaz pre účastníkov vrátane kľúča. Ktokoľvek, kto môže čítať daný kanál, sa môže pripojiť, rovnako ako pri vložení odkazu.
- Náhľady odkazov ukazujú len krok a počty, nikdy obsah.
- Oprávnenia v Slacku:
commands,chat:write,links:read,links:write;users:readlen vtedy, keď tím zapne zmienky. - Tokeny botov sú v pokoji zašifrované (AES-GCM, kľúč uložený ako tajomstvo Workera). Podpisy požiadaviek Slacku a tokeny Bot Frameworku sa overujú pri každej požiadavke.
- Odinštalovaním aplikácie sa zastaví všetko odosielanie a vymažú sa jej tokeny.
Web a infraštruktúra
- Len Cloudflare: Pages, Workers, Durable Objects, D1, R2 a KV na účte 1801 Labs. Žiadne iné servery.
- TLS všade, HSTS a prísna Content Security Policy.
- Žiadne analytické SDK, žiadne reklamy, žiadne skripty tretích strán. Jedinou výnimkou je Paddle.js, načítaný len na stránke pokladne.
- Jeden cookie, len pre prihlásených facilitátorov:
peel_session, httpOnly, Secure, SameSite=Lax. - Hľadanie GIF-ov a médiá idú cez naše API, takže IP adresy účastníkov sa ku GIPHY nikdy nedostanú.
- Fonty a súbory hostujeme sami. Žiadne fonty z CDN, žiadne sledovacie pixely.
- Limity požiadaviek na IP adresu a na nástenku; hlásenia zneužitia a zamknutie facilitátorom.
Účty a uchovávanie dát
- Účastníci sa nikdy neautentifikujú. Facilitátori sa prihlasujú cez Google (alebo Entra ID cez Teams) len kvôli uchovaniu násteniek alebo plateným funkciám.
- Účet uchováva ID, meno a e-mail od poskytovateľa a zašifrovaný balík kľúčov odomykaný prístupovým kľúčom (WebAuthn PRF) alebo kódom na obnovenie. Prihlásenie dáva vlastníctvo, nie prístup k obsahu.
- Nárokovanie nástenky preukazuje vlastníctvo podpisom facilitátora. Kľúče k nástenkám sa nikdy neposielajú.
- Nástenky bez účtu sa mažú 60 dní po poslednej návšteve; každá návšteva lehotu vynuluje. Úložisko mažú alarmy Durable Objects.
- Vymazaním účtu sa vymažú relácie, balík kľúčov a vaša knižnica a nástenky opäť dostanú 60-dňovú lehotu.
Zodpovedné zverejňovanie
Niečo ste našli? Dajte nám vedieť ako prvým a budeme s vami spolupracovať. Prijatie hlásenia potvrdíme do troch pracovných dní.
- Dajte nám, prosím, primeraný čas na opravu (snažíme sa o 90 dní), než problém zverejníte.
- Testujte na vlastných nástenkách a účtoch. Nepristupujte k dátam iných ľudí a nezhoršujte prevádzku služby.
- Proti výskumu v dobrej viere, ktorý dodržiava tieto pravidlá, nepodnikneme právne kroky.
- Strojovo čitateľný kontakt:
/.well-known/security.txt.
Zákazníci s plánom Firma dostanú balík pre bezpečnostný audit (odpovede na dotazníky, subdodávatelia spracúvajúci dáta, toky dát). DPA · Ochrana súkromia