Informācijas drošības komandām un lietotņu recenzentiem
Drošība Peel
Īsumā: tāfeles saturs tiek šifrēts pārlūkā ar atslēgu, kas atrodas saites fragmentā, tāpēc mūsu serveri glabā un pārsūta šifrētu tekstu, ko nespēj izlasīt. Lūk, kā tieši tas notiek un kur ir robežas.
Kopsavilkums
- Kartīšu teksts, vārdi, tāfeļu nosaukumi, balsis un uzlīmes tiek šifrētas ar AES-256-GCM, izmantojot pārlūkā ģenerētu tāfeles atslēgu. Atslēga ceļo URL fragmentā (
#k=) un nekad netiek sūtīta serverim. - Fasilitatora darbības, tāfeles galvene un momentuzņēmumi tiek parakstīti ar fasilitatora Ed25519 atslēgu. Tāfeles ID tiek atvasināts no šīs atslēgas, tāpēc klienti pamana atslēgas aizstāšanu.
- Paslēptās kartītes līdz atklāšanai ir aizzīmogotas fasilitatoram (X25519 sealed box) un piesaistītas sālītām saistībām (commitments), tāpēc atklāto tekstu nevar apmainīt.
- Anonīmi pēc noklusējuma: operācijās nav autora ID; balsis un reakcijas izmanto katrai tāfelei atsevišķu nejaušu ID.
- Dalībnieki nekad neautentificējas. Nav analītikas SDK, reklāmu vai trešo pušu skriptu, izņemot Paddle.js norēķinu lapā.
- Tikai Cloudflare. Nepieprasītas tāfeles tiek dzēstas 60 dienas pēc pēdējā apmeklējuma.
Kā plūst dati
URL fragmentu (visu, kas ir aiz #) apstrādā pārlūks, un tas nav HTTP pieprasījuma daļa. Tieši tur Peel ievieto tāfeles atslēgu.
Apdraudējumu modelis
Mēs projektējam tā, lai pilnībā kompromitēts vai ziņkārīgs serveris, arī mēs paši, uzzinātu pēc iespējas mazāk par to, ko komanda saka.
Ko mēs aizsargājam
- Kartīšu tekstu, izvēlētos GIF un, režīmā ar vārdiem, autora vārdu.
- Dalībnieku vārdus un avatarus, tāfeles nosaukumu un pielāgoto veidņu nosaukumus.
- Kurš par ko balsoja vai reaģēja un kurš uzrakstīja kuru kartīti.
- Retro integritāti: posmus, atklāšanas un fasilitatora lēmumus nevar viltot.
Pretinieki, ko ņemam vērā
- Mūsu pašu serveri, ļaunprātīgs iekšējais darbinieks vai kāds, kas uzlauž mūsu krātuvi: viņi iegūst šifrētu tekstu un metadatus.
- Uzbrucējs tīklā: TLS visur; atslēga nekad nešķērso tīklu.
- Serveris, kas apmaina atslēgas: tāfeles ID tiek atvasināts no fasilitatora publiskās atslēgas, un klienti pārbauda parakstīto galveni.
- Dalībnieks, kurš grib palūrēt vai viltot: paslēptās kartītes ir aizzīmogotas fasilitatoram; fasilitatora operācijām vajadzīgs fasilitatora paraksts; kartīšu labojumiem vajadzīga kartītes atslēga.
- Fasilitators, kurš publicē atkārtoti bezsaistē esoša autora vietā: saistības neļauj mainīt tekstu.
Ārpus tvēruma, godīgi
- Ikviens, kuram ir dalībnieka saite, var lasīt tāfeli. Saite ir piekļuves kontrole. Kopīgo to tāpat kā pašu tāfeli.
- Kompromitēta ierīce, ļaunprātīgs pārlūka paplašinājums vai kāds, kas skatās pār plecu.
- Datplūsmas analīze: serveris redz laikus, izmērus un skaitus (skatīt datu karti).
- Servera izraisīts pakalpojuma atteikums: tas var nomest vai aizkavēt ziņojumus, bet ne izlasīt vai viltot tos.
Kriptogrāfija
Visi primitīvi nāk no pārlūka WebCrypto API. Nekādas pašdarinātas kriptogrāfijas, nekādu trešo pušu kriptobibliotēku.
| Atslēga | Algoritms | Lietojums |
|---|---|---|
| K_board | AES-256-GCM, 96 bitu nejaušs IV | Šifrē katru operāciju, momentuzņēmumu un klātbūtnes atjauninājumu. Papildu dati piesaista tāfeles ID, operācijas tipu un operācijas ID, tāpēc šifrētu tekstu nevar atkārtoti izmantot citā tāfelē vai vietā. Atrodas tikai saites fragmentā #k=. |
| K_owner | Ed25519 | Fasilitatora pilnvaras. Paraksta fasilitatora operācijas (posms, taimeris, izcelšana, veidne, iestatījumi, balsu atvēršana, kartītes paslēpšana), tāfeles galveni un momentuzņēmumus. Stingri augošs skaitītājs novērš atkārtošanas uzbrukumus. Tikai fasilitatora saitē (&o=). |
| Tāfeles ID | SHA-256, pirmie 80 biti, base32 | Atvasināts no fasilitatora publiskās atslēgas, tāpēc pats ID pierāda, kurai atslēgai pieder tāfele. Klienti noraida galveni, kuras atslēgas jaucējvērtība neatbilst ID. |
| K_fac | X25519 sealed box: efemerā X25519 + HKDF-SHA256 + AES-256-GCM | Kamēr cilvēki raksta, paslēptās kartītes tiek aizzīmogotas ar fasilitatora publisko atslēgu. Atvērt tās var tikai fasilitatora saite (&f=). |
| Kartīšu atslēgas | Ed25519, viena atslēga katrai kartītei | Pieder tikai autoram. Ar to tiek parakstīti labojumi un atklāšana: autentiskums bez identitātes. |
| Saistības (commitments) | HMAC-SHA256 ar 128 bitu nejaušu sāli | Paslēpta kartīte publicē saistību par savu saturu. Atklāšanā saturs un sāls tiek publicēti, un katrs klients tos pārbauda, tāpēc neviens nevar apmainīt tekstu. |
| Klātbūtne | AES-256-GCM ar K_board | Vārdi, avatari un rakstīšanas indikatori tiek šifrēti tāpat kā viss pārējais. |
| Atslēgu komplekts | HKDF-SHA256 no piekļuves atslēgas PRF vai atkopšanas koda, AES-256-GCM | Pieslēgušies fasilitatori var sinhronizēt tāfeļu atslēgas starp ierīcēm. Komplekts tiek šifrēts ierīcē; serveris glabā tikai šifrētu tekstu un ietītās atslēgas. |
Parakstāmie ziņojumi ir nodalīti pa domēniem (piemēram, peel/sig/v1, peel/header/v1, peel/snap/v1), tāpēc vienam nolūkam izveidotu parakstu nevar atkārtoti izmantot citam.
Anonimitāte
- Operācijās nav autora ID. Serveris nevar sasaistīt kartīti ar cilvēku, un pēc noklusējuma to nevar arī fasilitators.
- Balsis un reakcijas ir piesaistītas nejaušam katras tāfeles ID, kas nav saistīts ar vārdu.
- Rakstīšanas indikatori parāda, ka kāds raksta, bet nekad ne to, ko.
- Režīms ar vārdiem ir skaidri izvēlēts tāfeles iestatījums; tad autora vārds ceļo šifrētās kartītes iekšpusē.
- Dalībnieki nekad nepieslēdzas, tāpēc nav konta, ko sasaistīt.
Datu karte
Viss, ko mēs glabājam, kur tas atrodas, kas to var lasīt un cik ilgi tas tiek glabāts.
| Dati | Kur | Var lasīt | Glabāšanas ilgums |
|---|---|---|---|
| Kartītes, balsis, reakcijas, uzlīmes, uzdevumi, tāfeles nosaukums, pielāgoto veidņu nosaukumi | Durable Object krātuve, kā šifrēts teksts | Cilvēki, kuriem ir tāfeles saite | Līdz tāfeles dzēšanai |
| Operācijas apvalks: tips, servera secības numurs un laiks, izmērs, fasilitatora skaitītājs | Durable Object krātuve | Peel | Līdz tāfeles dzēšanai |
| Dalībnieku vārdi, avatari, rakstīšana | Pārsūtīts kā šifrēts teksts; savienojuma laikā glabājas atmiņā | Cilvēki, kuriem ir tāfeles saite | Savienojuma laikā |
| Tāfeles statuss: posms, dalībnieku un kartīšu skaits, kataloga veidnes ID, aizslēgšanas karodziņš, izveides un derīguma beigu laiks | Durable Object, D1; Slack/Teams ziņas, ja instalēts | Peel; tavs Slack/Teams kanāls | Tāfeles dzīves laikā |
| Fasilitatora konts: pakalpojuma sniedzēja ID, vārds, e-pasts (ja kopīgots), saistītie pakalpojumu sniedzēji, izveides datums, sesija | D1 | Peel | Līdz konta dzēšanai |
| Atslēgu komplekts un ietītās atslēgas | D1, kā šifrēts teksts | Tikai tu (piekļuves atslēga vai atkopšanas kods) | Līdz konta dzēšanai |
| Plāns, abonementa statuss, Paddle klienta un abonementa ID | D1; Paddle | Peel, Paddle | Tik ilgi, cik to prasa nodokļu likumi |
| Slack/Teams darbvietas, kanāla un ziņu ID; bota marķieris (šifrēts ar AES-GCM) | D1 | Peel | Līdz atinstalēšanai |
| IP adrese | Cloudflare tīkla malā, īslaicīgi (piegādei, pieprasījumu ierobežošanai) | Cloudflare, Peel pieprasījumu ierobežotājs | Netiek glabāta mūsu datubāzēs |
| Dienas skaitītāji (izveidotās tāfeles, sasniegtie posmi) | D1 | Peel | Tikai apkopoti, bez identifikatoriem |
Ko mūsu serveris var un ko nevar
Tas var
- Redzēt operāciju tipus, izmērus, laikus, posmu, dalībnieku un kartīšu skaitu, kataloga veidnes ID un aizslēgšanas karodziņu.
- Nomest, aizkavēt vai atteikties piegādāt operācijas (pakalpojuma atteikums).
- Redzēt IP adreses tīkla malā.
- Apkopoti skaitīt tāfeles un sasniegtos posmus.
- Dzēst tāfeli (derīguma beigas, ziņojumi par ļaunprātīgu izmantošanu).
Tas nevar
- Izlasīt kartīšu tekstu, vārdus, tāfeļu nosaukumus, pielāgoto veidņu nosaukumus, balsis vai uzlīmes.
- Izlasīt paslēptās kartītes pirms atklāšanas (un arī pēc tās ne).
- Viltot fasilitatora darbības: tām vajadzīgs fasilitatora paraksts.
- Iemainīt savas atslēgas: tāfeles ID to atklātu.
- Mainīt kartītes atklāto tekstu: saistības un kartīšu paraksti to atklātu.
- Noteikt, kurš uzrakstīja kuru kartīti.
Tāpat kā ar jebkuru tīmekļa lietotni, tu uzticies kodam, ko mēs pasniedzam. Mēs šo virsmu turam mazu: stingra satura drošības politika (CSP), script-src ierobežots ar mūsu pašu izcelsmi, nekādu trešo pušu skriptu, un protokolu pēc pieprasījuma var pārskatīt.
Slack un Microsoft Teams
- Ziņās ir tāfeles saite un metadati (nosaukums, posms, skaiti). Kartīšu teksts tiek sūtīts tikai tad, kad fasilitators publicē kopsavilkumu un to apstiprina.
- Pievienošanās kartītē ir dalībnieka saite, kas ietver atslēgu. Ikviens, kurš var lasīt šo kanālu, var pievienoties, tāpat kā tad, ja saite tur būtu ielīmēta.
- Saišu priekšskatījumi rāda tikai posmu un skaitus, nekad saturu.
- Slack tvērumi:
commands,chat:write,links:read,links:write;users:readtikai tad, ja komanda ieslēdz pieminējumus. - Botu marķieri glabāšanā ir šifrēti (AES-GCM, atslēga glabājas kā Worker noslēpums). Slack pieprasījumu paraksti un Bot Framework marķieri tiek pārbaudīti katram pieprasījumam.
- Atinstalējot lietotni, visa publicēšana tiek apturēta un tās marķieri tiek dzēsti.
Tīmeklis un infrastruktūra
- Tikai Cloudflare: Pages, Workers, Durable Objects, D1, R2 un KV 1801 Labs kontā. Nekādu citu serveru.
- TLS visur, HSTS un stingra satura drošības politika.
- Nav analītikas SDK, reklāmu vai trešo pušu skriptu. Vienīgais izņēmums ir Paddle.js, kas tiek ielādēts tikai norēķinu lapā.
- Viena sīkdatne, tikai pieslēgušamies fasilitatoriem:
peel_session, httpOnly, Secure, SameSite=Lax. - GIF meklēšana un multivide iet caur mūsu API, tāpēc dalībnieku IP adreses nekad nesasniedz GIPHY.
- Fonti un resursi tiek mitināti pašu serveros. Nekādu CDN fontu, nekādu izsekošanas pikseļu.
- Pieprasījumu ierobežojumi katrai IP adresei un katrai tāfelei; ziņojumi par ļaunprātīgu izmantošanu un fasilitatora aizslēgs.
Konti un datu glabāšana
- Dalībnieki nekad neautentificējas. Fasilitatori pieslēdzas ar Google (vai ar Entra ID caur Teams) tikai tāpēc, lai saglabātu tāfeles vai izmantotu maksas funkcijas.
- Kontā tiek glabāts ID, pakalpojuma sniedzēja nodotais vārds un e-pasts, kā arī šifrēts atslēgu komplekts, ko atslēdz piekļuves atslēga (WebAuthn PRF) vai atkopšanas kods. Pieslēgšanās dod īpašumtiesības, nevis piekļuvi saturam.
- Pieprasot tāfeli, īpašumtiesības tiek pierādītas ar fasilitatora parakstu. Tāfeļu atslēgas nekad netiek sūtītas.
- Tāfeles bez konta tiek dzēstas 60 dienas pēc pēdējā apmeklējuma; katrs apmeklējums atskaiti sāk no jauna. Krātuvi dzēš Durable Object trauksmes (alarms).
- Dzēšot kontu, tiek dzēstas sesijas, atslēgu komplekts un tava bibliotēka, un tavām tāfelēm atkal tiek piemērots 60 dienu derīgums.
Atbildīga ievainojamību atklāšana
Atradi kaut ko? Vispirms pastāsti mums, un mēs strādāsim kopā ar tevi. Ziņojumu saņemšanu apstiprinām trīs darba dienu laikā.
- Lūdzu, dod mums saprātīgu laiku (mūsu mērķis ir 90 dienas) problēmas novēršanai pirms publiskošanas.
- Testē ar savām tāfelēm un kontiem. Nepiekļūsti citu cilvēku datiem un nepasliktini pakalpojuma darbību.
- Mēs neuzsāksim tiesvedību pret labticīgu izpēti, kas ievēro šos noteikumus.
- Mašīnlasāma kontaktinformācija:
/.well-known/security.txt.
Company plāna klienti saņem drošības pārskata paketi (atbildes uz anketām, apakšapstrādātāji, datu plūsmas). DPA · Privātums