Għat-timijiet tal-InfoSec u r-reviżuri tal-apps

Is-sigurtà f'Peel

Fil-qosor: il-kontenut tal-board jiġi encrypted fil-browser b'ċavetta li tinsab fil-fragment tal-link, għalhekk is-servers tagħna jaħżnu u jgħaddu ciphertext li ma jistgħux jaqraw. Hawn kif isir eżattament, u fejn huma l-limiti.

Sommarju

  • It-test tal-karti, l-ismijiet, it-titli tal-boards, il-voti u l-istickers huma encrypted b'AES-256-GCM taħt ċavetta tal-board iġġenerata fil-browser. Iċ-ċavetta tivvjaġġa fil-fragment tal-URL (#k=) u qatt ma tintbagħat lil server.
  • L-azzjonijiet tal-facilitator, il-header tal-board u s-snapshots huma ffirmati biċ-ċavetta Ed25519 tal-facilitator. L-ID tal-board huwa derivat minn dik iċ-ċavetta, għalhekk il-clients jindunaw b'sostituzzjoni taċ-ċavetta.
  • Il-karti moħbija huma ssiġillati għall-facilitator (X25519 sealed box) saż-żvelar, u marbuta b'commitments bis-salt biex it-test żvelat ma jkunx jista' jinbidel.
  • Anonimi b'default: l-operazzjonijiet ma jġorrux ID tal-awtur; il-voti u r-reazzjonijiet jużaw ID każwali għal kull board.
  • Il-parteċipanti qatt ma jawtentikaw. L-ebda SDK tal-analytics, l-ebda reklam, l-ebda script ta' partijiet terzi ħlief Paddle.js fil-paġna tal-checkout.
  • Cloudflare biss. Il-boards mhux mitluba jitħassru 60 jum wara l-aħħar żjara.

Kif tiċċirkola d-data

Il-fragment ta' URL (kull ma jiġi wara #) jiġi ġestit mill-browser u mhuwiex parti mit-talba HTTP. Peel ipoġġi ċ-ċavetta tal-board hemmhekk.

Fluss tad-data: iċ-ċavetta tinqara lokalment mil-link; ciphertext u metadata minima biss jaqsmu n-network.

Mudell tat-theddid

Niddisinjaw b'mod li server kompletament kompromess jew kurjuż, inkluż aħna, jitgħallem l-inqas possibbli dwar x'jgħid tim.

X'nipproteġu

  • It-test tal-karti, l-għażliet tal-GIFs u, fil-modalità b'ismijiet, l-isem tal-awtur.
  • L-ismijiet u l-avatars tal-parteċipanti, l-isem tal-board u t-titli tat-templates personalizzati.
  • Min ivvota jew irreaġixxa fuq xiex, u min kiteb liema karta.
  • L-integrità tar-retro: il-passi, iż-żvelar u d-deċiżjonijiet tal-facilitator ma jistgħux jiġu ffalsifikati.

L-avversarji li nikkunsidraw

  • Is-servers tagħna stess, insider malizzjuż, jew xi ħadd li jikser il-ħażna tagħna: jiksbu ciphertext u metadata.
  • Attakkant fuq in-network: TLS kullimkien; iċ-ċavetta qatt ma taqsam in-network.
  • Server li jibdel iċ-ċwievet: l-ID tal-board huwa derivat miċ-ċavetta pubblika tal-facilitator, u l-clients jivverifikaw il-header iffirmat.
  • Parteċipant li jrid jitlalla' jew jiffalsifika: il-karti moħbija huma ssiġillati għall-facilitator; l-operazzjonijiet tal-facilitator jeħtieġu l-firma tal-facilitator; l-editjar tal-karti jeħtieġ iċ-ċavetta tal-karta.
  • Facilitator li jerġa' jippubblika għal awtur offline: il-commitments iwaqqfuh milli jibdel it-test.

Barra mill-ambitu, b'onestà

  • Kulmin għandu l-link tal-parteċipanti jista' jaqra l-board. Il-link huwa l-kontroll tal-aċċess. Aqsmu bl-istess attenzjoni li tagħti lill-board innifsu.
  • Apparat kompromess, estensjoni malizzjuża tal-browser, jew xi ħadd li qed iħares minn fuq spallejk.
  • Analiżi tat-traffiku: is-server jara l-ħinijiet, id-daqsijiet u n-numri (ara l-mappa tad-data).
  • Denial of service mis-server: jista' jwaqqa' jew idewwem il-messaġġi, imma mhux jaqrahom jew jiffalsifikahom.

Kriptografija

Il-primittivi kollha ġejjin mill-API WebCrypto tal-browser. L-ebda kriptografija personalizzata, l-ebda librerija kriptografika ta' partijiet terzi.

ĊavettaAlgoritmuUżata għal
K_boardAES-256-GCM, IV każwali ta' 96 bitJagħmel encryption ta' kull operazzjoni, snapshot u aġġornament tal-preżenza. Id-data addizzjonali torbot l-ID tal-board, it-tip tal-operazzjoni u l-ID tal-operazzjoni, sabiex iċ-ciphertext ma jkunx jista' jerġa' jintuża f'board jew slot ieħor. Jinsab biss fil-fragment tal-link #k=.
K_ownerEd25519L-awtorità tal-facilitator. Tiffirma l-operazzjonijiet tal-facilitator (pass, timer, spotlight, template, settings, il-ftuħ tal-voti, il-ħabi ta' karta), il-header tal-board u s-snapshots. Counter li dejjem jiżdied jimblokka r-replay. Tinsab biss fil-link tal-facilitator (&o=).
ID tal-boardSHA-256, l-ewwel 80 bit, base32Derivat miċ-ċavetta pubblika tal-facilitator, għalhekk l-ID innifsu jipprova liema ċavetta għandha l-board. Il-clients jirrifjutaw header li ċ-ċavetta tiegħu ma tagħtix l-ID meta ssirilha hash.
K_facX25519 sealed box: X25519 effimeru + HKDF-SHA256 + AES-256-GCMIl-karti moħbija jiġu ssiġillati għaċ-ċavetta pubblika tal-facilitator waqt li n-nies jiktbu. Il-link tal-facilitator biss (&f=) jista' jiftaħhom.
Ċwievet tal-kartiEd25519, ċavetta waħda għal kull kartaJinżammu biss mill-awtur. L-editjar u ż-żvelar jiġu ffirmati biha: awtentiċità mingħajr identità.
CommitmentsHMAC-SHA256 b'salt każwali ta' 128 bitKarta moħbija tippubblika commitment għall-kontenut tagħha. Fiż-żvelar, il-kontenut u s-salt jiġu ppubblikati u kull client jivverifikahom, għalhekk ħadd ma jista' jibdel it-test.
PreżenzaAES-256-GCM taħt K_boardL-ismijiet, l-avatars u l-indikaturi tat-tajping huma encrypted bħal kull ħaġa oħra.
Bundle taċ-ċwievetHKDF-SHA256 mill-PRF tal-passkey jew mill-kodiċi ta' rkupru, AES-256-GCMIl-facilitators li jkunu dħlu fil-kont jistgħu jissinkronizzaw iċ-ċwievet tal-boards bejn apparati. Il-bundle jiġi encrypted fuq l-apparat; is-server jaħżen biss ciphertext u ċwievet imgeżwra.

Il-messaġġi tal-firem huma separati skont id-dominju (pereżempju peel/sig/v1, peel/header/v1, peel/snap/v1) sabiex firma għal skop wieħed ma tkunx tista' terġa' tintuża għal skop ieħor.

Karti moħbija u ż-żvelar

  1. Waqt il-kitba, il-browser tal-awtur jissiġilla l-karta għaċ-ċavetta X25519 tal-facilitator u jippubblika commitment bis-salt. It-test ċar jibqa' fuq l-apparat tal-awtur.
  2. Il-parteċipanti l-oħra jaraw karta moħbija: ma jistgħux jiddekriptawha, u lanqas is-server ma jista'.
  3. Il-browser tal-facilitator jista' jiftaħ il-karti ssiġillati (il-preview “👁 int biss”).
  4. Fiż-żvelar, kull awtur jerġa' jippubblika l-karta encrypted b'K_board, iffirmata biċ-ċavetta tal-karta, flimkien mas-salt.
  5. Jekk awtur ikun offline, il-facilitator jerġa' jippubblikaha minfloku. Kull client jivverifika l-commitment, għalhekk it-test irid jaqbel ma' dak li kiteb l-awtur.

Peress li l-facilitator jista' teknikament jara minn qabel, kull board juri tikketta “il-facilitator jista' jara minn qabel” lil kulħadd waqt li l-karti huma moħbija. Mhuwiex setting li jista' jinħeba.

Anonimità

  • L-operazzjonijiet ma jġorrux ID tal-awtur. Is-server ma jistax jorbot karta ma' persuna, u b'default lanqas il-facilitator ma jista'.
  • Il-voti u r-reazzjonijiet huma marbuta ma' ID każwali għal kull board li mhuwiex marbut ma' isem.
  • L-indikaturi tat-tajping juru li xi ħadd qed jikteb, qatt x'qed jikteb.
  • Il-modalità b'ismijiet hija setting espliċitu tal-board; f'dak il-każ, l-isem tal-awtur jivvjaġġa ġewwa l-karta encrypted.
  • Il-parteċipanti qatt ma jidħlu f'kont, għalhekk m'hemm l-ebda kont x'jiġi korrelat.

Mappa tad-data

Kull ma nżommu, fejn jinsab, min jista' jaqrah u kemm jibqa'.

DataFejnMin jista' jaqrahaMiżmuma
Karti, voti, reazzjonijiet, stickers, azzjonijiet, isem il-board, titli ta' templates personalizzatiĦażna tad-Durable Object, bħala ciphertextMin għandu l-link tal-boardSakemm jitħassar il-board
Envelope tal-operazzjoni: tip, sekwenza u ħin tas-server, daqs, counter tal-facilitatorĦażna tad-Durable ObjectPeelSakemm jitħassar il-board
Ismijiet tal-parteċipanti, avatars, tajpingMgħoddija bħala ciphertext; miżmuma fil-memorja waqt il-konnessjoniMin għandu l-link tal-boardWaqt il-konnessjoni
Status tal-board: pass, numru ta' parteċipanti u karti, ID tat-template mill-katalgu, flag tas-sakkar, ħinijiet tal-ħolqien u tal-iskadenzaDurable Object, D1; messaġġi ta' Slack/Teams jekk installatiPeel; il-channel tiegħek ta' Slack/TeamsIl-ħajja tal-board
Kont tal-facilitator: ID tal-provider, isem, email jekk kondiviża, providers marbuta, data tal-ħolqien, sessjoniD1PeelSakemm tħassar il-kont
Bundle taċ-ċwievet u ċwievet imgeżwraD1, bħala ciphertextInt biss (passkey jew kodiċi ta' rkupru)Sakemm tħassar il-kont
Pjan, status tal-abbonament, IDs tal-klijent u tal-abbonament ta' PaddleD1; PaddlePeel, PaddleKif teħtieġ il-liġi tat-taxxa
IDs tal-workspace, tal-channel u tal-messaġġi ta' Slack/Teams; token tal-bot (encrypted b'AES-GCM)D1PeelSakemm titneħħa l-installazzjoni
Indirizz IPEdge ta' Cloudflare, b'mod temporanju (konsenja, rate limits)Cloudflare, ir-rate limiter ta' PeelMhux maħżun fid-databases tagħna
Counters ta' kuljum (boards maħluqa, passi milħuqa)D1PeelAggregati biss, mingħajr identifikaturi

X'jista' u x'ma jistax jagħmel is-server tagħna

Jista'

  • Jara t-tipi tal-operazzjonijiet, id-daqsijiet, il-ħinijiet, il-pass, in-numru ta' parteċipanti u karti, l-ID tat-template mill-katalgu u l-flag tas-sakkar.
  • Iwaqqa', idewwem jew jirrifjuta li jwassal operazzjonijiet (denial of service).
  • Jara l-indirizzi IP fil-edge tan-network.
  • Jgħodd il-boards u l-passi milħuqa, b'mod aggregat.
  • Iħassar board (skadenza, rapporti ta' abbuż).

Ma jistax

  • Jaqra t-test tal-karti, l-ismijiet, it-titli tal-boards, it-titli tat-templates personalizzati, il-voti jew l-istickers.
  • Jaqra l-karti moħbija qabel iż-żvelar (lanqas wara).
  • Jiffalsifika azzjonijiet tal-facilitator: jeħtieġu l-firma tal-facilitator.
  • Ipoġġi ċ-ċwievet tiegħu minflok: l-ID tal-board jikxfu.
  • Jibdel it-test żvelat ta' karta: il-commitments u l-firem tal-karti jikxfuh.
  • Jgħid min kiteb liema karta.

Bħal kull web app, qed tafda l-kodiċi li nservu. Inżommu dik is-superfiċje żgħira: Content Security Policy stretta, script-src limitat għall-oriġini tagħna, l-ebda script ta' partijiet terzi, u l-protokoll huwa miftuħ għal reviżjoni fuq talba.

Slack u Microsoft Teams

  • Il-messaġġi jġorru l-link tal-board u metadata (titlu, pass, numri). It-test tal-karti jintbagħat biss meta l-facilitator jibgħat sommarju u jikkonfermah.
  • Il-karta Join fiha l-link tal-parteċipanti, li jinkludi ċ-ċavetta. Kulmin jista' jaqra dak il-channel jista' jingħaqad, eżatt bħallikieku twaħħal link hemmhekk.
  • Il-previews tal-links (unfurls) juru biss il-pass u n-numri, qatt il-kontenut.
  • Scopes ta' Slack: commands, chat:write, links:read, links:write; users:read biss meta tim jixgħel il-mentions.
  • It-tokens tal-bots huma encrypted meta maħżuna (AES-GCM, iċ-ċavetta tinżamm bħala secret tal-Worker). Il-firem tat-talbiet ta' Slack u t-tokens tal-Bot Framework jiġu vverifikati f'kull talba.
  • Meta titneħħa l-app, jieqaf kull messaġġ u t-tokens tagħha jitħassru.

Web u infrastruttura

  • Cloudflare biss: Pages, Workers, Durable Objects, D1, R2 u KV fuq il-kont ta' 1801 Labs. L-ebda server ieħor.
  • TLS kullimkien, HSTS, u Content Security Policy stretta.
  • L-ebda SDK tal-analytics, l-ebda reklam, l-ebda script ta' partijiet terzi. L-unika eċċezzjoni hija Paddle.js, li jitgħabba biss fil-paġna tal-checkout.
  • Cookie waħda, għall-facilitators li jkunu dħlu fil-kont biss: peel_session, httpOnly, Secure, SameSite=Lax.
  • It-tfittxija tal-GIFs u l-midja jgħaddu mill-API tagħna, għalhekk l-indirizzi IP tal-parteċipanti qatt ma jaslu għand GIPHY.
  • Il-fonts u l-assets huma self-hosted. L-ebda font minn CDN, l-ebda tracking pixel.
  • Rate limits għal kull IP u għal kull board; rapporti ta' abbuż u sakkar mill-facilitator.

Kontijiet u żamma tad-data

  • Il-parteċipanti qatt ma jawtentikaw. Il-facilitators jidħlu b'Google (jew b'Entra ID permezz ta' Teams) biss biex iżommu l-boards jew jużaw features bi ħlas.
  • Kont jaħżen ID, l-isem u l-email mingħand il-provider, u bundle ta' ċwievet encrypted li jinfetaħ b'passkey (WebAuthn PRF) jew b'kodiċi ta' rkupru. Id-dħul fil-kont jagħti s-sjieda, mhux aċċess għall-kontenut.
  • Meta jintalab board, is-sjieda tiġi ppruvata b'firma tal-facilitator. Iċ-ċwievet tal-board qatt ma jintbagħtu.
  • Il-boards mingħajr kont jitħassru 60 jum wara l-aħħar żjara; kull żjara terġa' tibda l-għadd. L-alarms tad-Durable Objects iħassru l-ħażna.
  • It-tħassir tal-kont iħassar is-sessjonijiet, il-bundle taċ-ċwievet u l-librerija tiegħek, u jerġa' jagħti lill-boards tiegħek l-iskadenza ta' 60 jum.

Żvelar responsabbli

Sibt xi ħaġa? Għidilna l-ewwel u naħdmu miegħek. Nikkonfermaw ir-rapporti fi żmien tlett ijiem tax-xogħol.

[email protected]

  • Jekk jogħġbok agħtina żmien raġonevoli (l-għan tagħna huwa 90 jum) biex nirranġaw qabel ma tiżvela.
  • Ittestja bil-boards u l-kontijiet tiegħek. Taċċessax data ta' ħaddieħor u tnaqqasx il-kwalità tas-servizz.
  • Ma nieħdux azzjoni legali għal riċerka in bona fede li ssegwi dawn ir-regoli.
  • Kuntatt li jinqara mill-magni: /.well-known/security.txt.

Il-klijenti tal-pjan Kumpanija jieħdu pakkett għar-reviżjoni tas-sigurtà (tweġibiet għall-kwestjonarji, sub-proċessuri, flussi tad-data). DPA · Privatezza