Keselamatan di qub
Tarikh berkuat kuasa: 23 September 2026 Versi: 1.1 — semakan ketepatan pelaksanaan
Untuk penyelidik — rujukan ringkas:
- Ke mana untuk menghantar laporan: support@qub.social dengan awalan subjek
[SECURITY].- Apa yang perlu disertakan: kerentanan, langkah untuk menghasilkan semula, dan sebarang bukti konsep.
- Respons kami: kami mengakui penerimaan dalam tempoh 3 hari bekerja dan berhasrat menghantar pembaikan dalam tempoh 90 hari.
- Safe Harbor: kami tidak akan mengejar tindakan undang-undang terhadap penyelidikan suci hati yang mengikut peraturan dalam §12 (tiada akses kepada data yang bukan milik anda, tiada penurunan perkhidmatan, tiada pengekalan data yang diperoleh melebihi yang diperlukan untuk menunjukkan isu, beri kami tetingkap pendedahan yang munasabah).
Butiran penuh terdapat dalam §12 (Pendedahan Diselaras).
Siapa Kami
qub.social dikendalikan oleh VSPRY AUSTRALIA PTY LIMITED (ABN 41 631 026 330), Level 38, 71 Eagle Street, Brisbane QLD 4000, Australia. Rujukan kepada "qub", "kami", "kita", dan "kami punya" bermaksud entiti tersebut.
Hubungan keselamatan: support@qub.social dengan awalan subjek [SECURITY].
1. Pendekatan Kami
qub ialah infrastruktur kepercayaan. Produk tidak bernilai jika ia tidak selamat, jadi keselamatan bukan ciri — ia adalah substrat. Halaman ini menerangkan, dalam istilah konkrit, bagaimana kami menjaga timbunan kami, data anda, dan integriti kandungan yang dimeterai.
Nilai komitmen temporal yang boleh disahkan meningkat apabila semakin banyak kandungan internet dijana mesin. Transaksi storan atau labuh log ketelusan yang disahkan boleh membuktikan bahawa teks sifer telah wujud selewat-lewatnya pada masa bloknya; artifak yang dimeterai pula membuktikan integriti kandungan, pengikatan pusingan drand, dan sebarang tandatangan kepengarangan. Membezakan dakwaan ini ialah piawaian yang digunakan pada halaman ini.
Kami tidak meminta anda mempercayai kami. Kami mereka bentuk supaya kepercayaan yang diperlukan daripada kami sekecil mungkin, dan di mana kepercayaan diperlukan kami menjelaskan dengan tepat apa yang dipercayai dan mengapa.
Tiga prinsip mendorong setiap keputusan reka bentuk:
- Minimumkan apa yang pelayan boleh lihat. Dalam aliran mesej pelayar lalai, teks biasa dan kunci pembungkus kekal pada peranti anda. Pemeteraian Builder sisi pelayan, penandatanganan bersama perjanjian, dan pemulihan yang didayakan secara nyata mempunyai sempadan kepercayaan yang berbeza, seperti yang diterangkan di bawah. Apabila kami memegang metadata, kami mengehadkannya kepada apa yang diperlukan oleh ciri yang dipilih.
- Buat kompromi terkandung secara tempatan. Pelanggaran mana-mana satu komponen (pelayan kami, pembekal emel, nod drand) tidak sepatutnya mendedahkan kandungan dimeterai yang belum mencapai masa pendedahannya.
- Buat protokol boleh diaudit. Artifak yang dimeterai boleh disahkan hujung ke hujung dengan kriptografi awam. Anda tidak perlu mempercayai qub perkhidmatan untuk mengesahkan qub artifak.
2. Model Ancaman
2.1 Apa Yang Kami Lindungi Terhadap
- Penyerang yang memperoleh akses baca kepada data sisi pelayan kami yang disimpan sebelum masa pendedahan. Dalam aliran pelayar peribadi lalai, mereka memperoleh metadata dan bait dibungkus yang legap, bukan teks biasa atau K. Perlindungan ini tidak terpakai kepada K yang disimpan secara nyata untuk pemulihan, penghantaran awam/tanpa pembungkus selepas pusingan drandnya, atau teks biasa yang dibekalkan sementara kepada aliran Builder
/api/v1/sealdan perjanjian. - Penyerang yang memintas trafik antara pelayar anda dan infrastruktur kami. TLS ditamatkan di pinggir CDN kami; muatan dimeterai sudah disulitkan sebelum penghantaran.
- Penyerang yang mengusik muatan yang disimpan. Pengesahan pembungkus luar (jika ada), penyahkodan berkanun, cincangan badan, penerbitan semula
qub_id, pengikatan pusingan, dan tandatangan pilihan menyebabkan pengusikan gagal disahkan; pembaca enggan memaparkannya. - Penyerang yang cuba mengikat emel pengarang palsu kepada kunci penandatanganan. Atestasi emel memerlukan pemilikan kedua-dua kunci penandatanganan peribadi dan kod sekali guna yang dihantar ke peti masuk emel.
- Pengendali beacon drand yang dikompromi. Rangkaian drand menggunakan tandatangan BLS ambang merentas beberapa pengendali bebas; minoriti tidak boleh memalsukan tandatangan pelepasan awal.
2.2 Apa Yang Kami Tidak Boleh Lindungi Terhadap
Kami jujur tentang had kami. qub tidak boleh mempertahankan terhadap:
- Kompromi peranti anda sebelum anda memeterai. Keylogger tempatan, sambungan pelayar berniat jahat, atau akses fizikal kepada peranti yang tidak dikunci boleh menangkap teks biasa pada titik gubahan.
- Keruntuhan ambang drand. Beberapa organisasi bebas menjalankan rangkaian drand secara khusus untuk menjadikan ini sukar, tetapi ia tidak mustahil secara kriptografi: jika cukup pengendali bersubahat, mereka boleh memperoleh kunci kunci masa lebih awal.
- Sifat pelepasan salinan yang sah. qub awam/tanpa pembungkus boleh dinyahsulit selepas pusingan drandnya. qub peribadi/dibungkus juga memerlukan K; sesiapa yang memperoleh bait tersimpan dan K boleh menyahsulitnya selepas pusingan itu. Rekod storan kekal dan log berlabuh tidak boleh ditarik balik hanya dengan membuangnya daripada permukaan produk qub.
- Adversari global yang memecahkan kriptografi asas (AES-GCM, andaian gandingan BLS12-381, SHA3-256, ML-DSA-65). Jika primitif ini jatuh, ekosistem kriptografi pada umumnya mempunyai masalah yang lebih besar.
3. Kriptografi Sisi Klien
Dalam aliran mesej pelayar lalai, penyulitan kandungan berlaku sebelum permintaan muat naik. Dua laluan nyata berbeza: Builder /api/v1/seal sengaja menghantar teks biasa dan K yang dijana pemanggil kepada Worker untuk pemeteraian dalam memori, manakala pementasan/penandatanganan bersama perjanjian menghantar perjanjian berstruktur yang ditandatangani kepada perkhidmatan supaya artifak dwihala dapat dimuktamadkan. Kedua-dua pengecualian ini tidak boleh disamakan dengan penyulitan hujung ke hujung laluan pelayar.
3.1 Penyulitan Kunci Masa
qub menggunakan tlock — penyulitan berasaskan identiti yang berkunci kepada pusingan beacon drand masa depan. Penyulitan berlanjutan dalam pelayar anda menggunakan kunci awam rangkaian drand; kunci penyahsulitan dilepaskan secara awam oleh rangkaian drand hanya apabila pusingan sasaran dicapai. Tiada sesiapa, termasuk kami, boleh membina semula kunci penyahsulitan terlebih dahulu.
Kami menyasarkan rantaian quicknet:
- Tempoh pusingan 3 saat
- Mod tidak berantai (setiap pusingan adalah bebas)
- Tandatangan BLS12-381 G1
- Hash rantaian
52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971
Kunci awam dan masa genesis rantaian quicknet dikompilkan ke dalam klien. Kami tidak mengambil parameter rantaian pada masa runtime, jadi nod berniat jahat tidak boleh menggantikan rantaian yang kami kawal.
3.2 Penyulitan Simetri
Skema tlock membungkus kunci kandungan AES-256-GCM. AES-GCM menyediakan penyulitan disahkan: satu bit dibalikkan dalam ciphertext menyebabkan penyahsulitan gagal, bukannya menghasilkan teks biasa yang rosak senyap.
3.3 Pensirilan Berkanun
Struktur protokol disirikan menggunakan CBOR deterministik (RFC 8949 §4.2 pengekodan deterministik teras). Dua pelaksanaan yang mengekod struktur logik yang sama menghasilkan CBOR yang sama. Muatan dimeterai lengkap tidak deterministik: penyulitan tlock dan pembungkus luar menggunakan kerawakan baharu. Cincangan badan dikira daripada bait badan mentah, manakala pengekodan berkanun menjadikan struktur bertandatangan dan wayar tidak samar.
Kami menulis pengekod CBOR dengan tangan untuk pelaksanaan klien dan pelayan kami daripada bergantung pada perpustakaan pensirilan generik — keperluannya ialah ketepatan, bukan ergonomik, dan ujian harta berjalan dalam kedua-dua pelaksanaan untuk mengesahkan ia bersetuju.
Ujian regresi menegaskan format wayar berkanun tidak mengandungi urutan bait berjenama qub melebihi kunci medan qub_id primitif protokol. Format wayar adalah sengaja agnostik jenama — mana-mana pembaca yang mematuhi (kami atau pihak ketiga) boleh merender mana-mana qub dari storan kekal, tidak kira penyebaran mana yang memeteraikannya. Ujian ialah penanda kepelangan yang mencegah perubahan masa depan daripada secara tidak sengaja membakar rujukan jenama ke dalam bait yang, sebaik sahaja dalam storan kekal, tidak boleh ditulis semula.
3.4 Pencincangan Badan dan Integriti Pra-Pendedahan
Setiap muatan dimeterai membawa cincangan SHA3-256 bait badan mentahnya. Cincangan terikat kepada qub_id dan, apabila penandatanganan kepengarangan didayakan, kepada input tandatangan V2. Pembaca mengiranya semula selepas penyahsulitan dan menolak ketidakpadanan.
Pengecam kandungan 32-bait qub_id diterbitkan daripada praimej 108-bait yang merangkumi versi protokol, jenis kandungan, cap masa cipta dan buka kunci, cap masa keputusan pilihan (atau sentinel sifarnya), pusingan drand sasaran, cincangan badan, dan SHA3-256 tajuk pilihan yang dinormalkan kepada NFC. Gateway atau CDN tidak boleh mengubah mana-mana medan terikat secara konsisten dan masih melepasi penerbitan semula. Tajuk dihadkan kepada 100 titik kod NFC dan ditolak jika mengandungi kelas titik kod bermusuhan/kawalan yang dikongsi (termasuk penggantian arah bidi, aksara lebar sifar, blok tag, BOM, C0, C1, dan DEL).
3.5 Penandatanganan (ML-DSA-65)
Penandatanganan kepengarangan menggunakan ML-DSA-65 (FIPS 204), skema tandatangan pasca-kuantum standard NIST. Kami dengan sengaja memilih primitif pasca-kuantum untuk penandatanganan kerana kandungan dimeterai adalah kekal: tandatangan yang mengesahkan hari ini mesti masih mengesahkan beberapa dekad dari sekarang, termasuk selepas komputer kuantum berskala besar menjadi praktikal.
Kunci penandatanganan dijana dalam pelayar. Rahsia tempatan dibungkus di bawah kunci WebCrypto yang tidak boleh diekstrak sebelum disimpan dalam IndexedDB. Jika ciri pemulihan merentas peranti berskop akaun digunakan, blob kunci mudah alih yang disulitkan AEAD disimpan di sisi pelayan; teks sifer kunci rahsianya terikat kepada id akaun yang tidak berubah, dan perkhidmatan mengesahkan sampul awam tetapi tidak boleh menyahsulit bahan rahsia. Bait kunci peribadi mentah tidak dihantar kepada pelayan. Kunci awam dan rekod atestasi disimpan untuk pengesahan serta paparan identiti.
Penyahsulitan tlock dalam pelayar yang sama terpakai di dalam sematan qub: apabila qub yang dimeterai dirender melalui <qub-embed> pada halaman pihak ketiga, penyahsulitan masih berlaku dalam iframe sematan dalam pelayar pembaca. Sematan tidak mengubah model kepercayaan — teks biasa tidak pernah dinyahsulit pada pelayan qub.
3.6 Atribusi Awam — Pilih Masuk
qub yang dimeterai tidak membawa penunjuk pada rantaian kepada penciptanya kecuali pencipta memilih secara eksplisit untuk melampirkan satu. Apabila anda memeterai qub, aplikasi rujukan mengeluarkan tag storan Author (cap jari heksadesimal 64 aksara kunci awam penandatanganan anda) hanya apabila "Atribusi awam" diaktifkan pada langkah pemilih tarikh. Dengan togol dimatikan — lalai — tiada tag Author ditulis dan qub tidak diatribusi dalam storan kekal: tiada apa-apa dalam storan yang memautkan muat naik kepada handle anda, emel anda, atau qub anda yang lain. Dengan togol dihidupkan, cap jari diselesaikan kepada @handle anda melalui rantaian atestasi dalam §6.3 / §10 dan hitung mundur pembaca menunjukkan "Dimeterai oleh @{handle}" sebelum pendedahan.
Ini adalah perlindungan sengaja terhadap risiko pengenumerasi yang tag Author sentiasa-aktif akan cipta: pihak ketiga yang mempelajari cap jari pencipta sebaliknya boleh menggeledah storan kekal dengan tag dan membina semula keluaran sejarah penuh pencipta itu. Atribusi pilih masuk menutup saluran tersebut — hanya qub yang pencipta dengan eksplisit pilih untuk diatribusi muncul di bawah cap jari dalam storan kekal.
Halaman profil /u/{handle} ialah kad identiti-disahkan — handle, nama paparan + URL pilihan, pil "emel disahkan" (tiada alamat), dan bentuk pendek cap jari kriptografi. Ia tidak menyenaraikan qub pencipta. Pengunjung yang ingin melihat qub tertentu daripada pencipta mengikuti URL penghantaran qub itu secara langsung.
3.7 Pembalut Penyulitan Luar
Walaupun selepas penyahsulitan kunci masa menjadi mungkin secara matematik—sebaik sahaja tandatangan drand bagi pusingan terikat diterbitkan—lapisan kunci masa berkanun sahaja akan membolehkan pengindeks menyahsulit qub yang boleh ditemui secara pukal. Penghantaran peribadi menutup saluran itu dengan lapisan simetri tambahan di sekeliling bait disulitkan kunci masa (Protokol §13). Penghantaran awam sengaja meninggalkan pembungkus supaya pautan pemberitahuan, sematan, dan penemuan boleh berfungsi tanpa fragmen rahsia.
Pembalut menggunakan AES-256-GCM, sifer disahkan standard NIST, dengan kunci 256-bit K baharu yang dijana per qub oleh CSPRNG pelayar anda. K terikat kepada qub_id qub sebagai data tambahan disahkan, jadi kunci dari satu qub tidak boleh diguna semula untuk menyahsulit qub yang berbeza.
K tidak pernah sampai ke pelayan kami dalam aliran pelayar peribadi lalai. Ia dikodkan ke dalam fragmen URL pautan kongsi (https://qub.social/c/<tx_id>#<base64url(K)>). Pelayar tidak menghantar fragmen URL kepada pelayan—RFC 3986 meletakkan fragmen di luar permintaan—maka qub.social, gateway storan, CDN, dan pemantauan permintaan tidak dapat melihat K dalam aliran itu. OuterWrapper yang disimpan ialah CBOR berstruktur yang boleh dikenali, tetapi medan teks sifernya yang disahkan menyembunyikan struktur dalaman SealedQub dan tidak boleh dibuka tanpa K.
Akibat bersih:
- qub.social tidak boleh menyahsulit pemeteraian pelayar peribadi lalai daripada data tersimpan sahaja. Kompromi stor data mencapai teks sifer legap tanpa K. qub awam dan qub dengan pemulihan didayakan mempunyai pendedahan berbeza secara reka bentuk.
- Kehilangan fragmen tidak boleh dipulihkan tanpa saluran pemulihan yang dipilih masuk. Jika anda menyimpan pautan peribadi tanpa fragmen dan tidak mendayakan pemulihan, qub tidak boleh dibaca melalui pautan itu. Aliran pemeteraian memaparkan pendedahan nyata "simpan URL ini" atas sebab tersebut.
- Pemulihan pilih masuk. Apabila anda memilih masuk ke emel kitaran hayat pencipta untuk qub DAN emel sepadan dengan identiti anda yang disahkan, kami menerima K dengan muat naik, menyimpan URL penghantaran penuh pada rekod sejarah dimeterai identiti anda, dan menggunakannya sebagai pautan dalam emel pengesahan pemeteraian. Tukar ganti ini — saluran pemulihan sisi pelayan sebagai pertukaran untuk beberapa ketulenan hujung ke hujung — terlibat hanya pada pilih masuk eksplisit dan hanya untuk qub itu. Pendirian lalai ialah penghancuran krip.
Titik akhir /api/v1/seal sisi pelayan Worker (digunakan oleh agen AI dan pemanggil API lain) memerlukan pemanggil menjana K dengan CSPRNG, mengekalkannya secara tempatan, dan membekalkannya sebagai wrapper_key_b64url. Worker semestinya melihat kedua-dua teks biasa dan K dalam memori pada laluan yang dipercayai secara eksplisit ini, tetapi tidak mengekalkan kedua-duanya. Idempotency-Key yang wajib menghalang respons yang hilang daripada mencipta qub kedua yang dikenakan bil, manakala K yang dikekalkan pemanggil boleh digabungkan dengan URL tanpa-fragmen yang dimainkan semula. Ini berbeza daripada laluan pelayar lalai, di mana K tidak pernah sampai ke Worker melainkan pencipta secara eksplisit mendayakan pemulihan.
4. Pengangkutan dan Pinggir
4.1 TLS
Trafik pelayar ke qub disajikan melalui HTTPS di pinggir Cloudflare. Respons menetapkan HTTP Strict Transport Security (max-age=63072000; includeSubDomains; preload). Versi TLS dan suite sifer tepat yang dirundingkan dikawal oleh konfigurasi pinggir aktif dan bukannya ditegaskan oleh kod aplikasi. Kami tidak mendedahkan pelayan asal yang boleh dicapai secara berasingan.
4.2 Keselamatan Kandungan
Klien yang dikompilkan disajikan dengan header jenis kandungan dan cache yang ketat. Shell SPA ialah satu asal. Kami tidak menyemat skrip pihak ketiga untuk analitik atau pengiklanan. Dua sentuhan pihak ketiga dalam produk kedua-duanya berskop sempit: aliran pembelian meninggalkan SPA sepenuhnya dengan pengalihan halaman penuh ke pembayaran yang dihoskan Stripe (https://checkout.stripe.com/…) — UI Stripe tidak pernah dilaksanakan dalam asal kami dan kami tidak pernah melihat data kad — dan aliran pemeteraian memuatkan widget Turnstile Cloudflare, alternatif CAPTCHA yang memelihara kerahsiaan yang Cloudflare render di dalam iframe sandboxnya sendiri. Tiada pihak boleh membaca seluruh halaman.
iframe sematan qub (disajikan dari qub.social/embed/{tx_id} dan dimuatkan ke laman pihak ketiga oleh embed.js) membawa Content-Security-Policynya sendiri. Senarai izin connect-srcnya ialah 'self', https://qub.social, https://arweave.net, https://ar-io.dev, https://permagate.io, https://api.drand.sh, dan https://drand.cloudflare.com. iframe berjalan dengan sandbox="allow-scripts allow-top-navigation-by-user-activation" (bukan allow-same-origin): halaman hos tidak boleh membaca DOMnya, dan ia tidak boleh menavigasi hos kecuali selepas tindakan pengguna.
4.3 CORS dan Skop Ambil
Klien pelayar membuat permintaan ambil hanya kepada:
- API kami sendiri (
api.qub.socialdan persamaan persediaan) - Gateway storan (baca sahaja, untuk mendapatkan bait peribadi-dibungkus atau awam-tanpa-pembungkus — §3.6)
- Titik akhir beacon drand (baca sahaja, untuk tandatangan pusingan masa pendedahan)
Destinasi sematan dikuatkuasakan oleh CSPnya. Destinasi yang dimaksudkan bagi SPA utama ditetapkan dalam kod dan konfigurasi serta diuji oleh semakan pelayar dan integrasi; Subresource Integrity bukan kawalan destinasi rangkaian.
Sematan mengambil bait tersimpan melalui asal qub/storan dalam senarai izin, menyahbungkus muatan peribadi dalam pelayar menggunakan K daripada fragmen URLnya, dan mengambil tandatangan pusingan masa pendedahan daripada dua asal drand yang dibenarkan. SPA utama menggunakan set sandaran empat titik akhir dalam config/drand-endpoints.json (drand.cloudflare.com, api.drand.sh, api2.drand.sh, dan api3.drand.sh) supaya gangguan satu titik akhir tidak menghalang pendedahan. CSP sematan menolak sambungan di luar senarai nyatanya.
5. Infrastruktur Sisi Pelayan
5.1 Pinggir Serverless
API kami berjalan sepenuhnya pada runtime serverless terurus di pinggir. Tiada VM, tiada bekas, dan tiada proses pelayan berterusan yang kami pentadbir. Ini secara dramatik mengurangkan permukaan serangan yang kami bertanggungjawab: kami tidak menjalankan OS, pelayan web, atau runtime aplikasi yang kami mesti tampal.
Middleware CORS awam yang berasingan digunakan Access-Control-Allow-Origin: * kepada set laluan yang dilaksanakan berikut: /embed.js, /embed/v1.js, segala-galanya di bawah /embed/; /api/v1/telemetry; /api/v1/openapi.json; segala-galanya di bawah /api/v1/qub/ (termasuk bait, metadata, bukti, penglibatan, notifikasi, dan subrute push); segala-galanya di bawah /api/v1/log/; pengendalian awam carian di bawah /api/v1/handle/; dan avatar awam membaca di bawah /api/v1/identity/avatar/. Permit preflightnya GET, POST, dan OPTIONS dengan Content-Type header permintaan. Permukaan berasaskan awalan ini lebih luas daripada hanya panggilan yang dibuat oleh embed pada masa ini, jadi setiap pengendali di bawah awalan tersebut mesti terus menguatkuasakan pengesahan, pengesahan identiti, had kadar, dan kawalan penyalahgunaan sendiri. Laluan API lain mengekalkan polisi CORS qub.social-terhad.
5.2 Storan
- Stor metadata dan penyelarasan memegang rekod identiti dan atestasi, kelayakan dan rujukan pengebilan, rekod kunci API, entri senarai sekatan, sesi, keadaan idempotensi, baris gilir, serta keadaan had kadar / keserentakan. Keperluan ketekalan yang berbeza menggunakan KV, D1, dan Durable Objects dan bukannya satu stor universal.
- Stor objek kami juga ialah substrat ketahanan. Ia memegang bait qub dibungkus atau tanpa pembungkus yang tepat seperti yang diperakui muat naik, daun log ketelusan dan nod Merkle berkoordinat, bahan labuh, log peristiwa berstruktur, serta cache respons/metadata.
- Storan awam kekal memegang labuh log ketelusan dan, untuk laluan T3 atau penerbitan tertunda, transaksi qub individu. Kami tidak mengendalikan rangkaian itu. Muatan pelayar peribadi kekal legap di sana melainkan pemegang turut memiliki K; muatan awam/tanpa pembungkus sengaja tidak mempunyai lapisan keupayaan pautan tambahan itu.
Aliran mesej pelayar lalai tidak menyimpan teks biasa pada infrastruktur qub. Builder /api/v1/seal mengendalikan teks biasa dan K dalam memori tetapi tidak menyimpan kedua-duanya. Pementasan perjanjian semestinya menyimpan perjanjian berstruktur bertandatangan sehingga ia ditandatangani bersama, ditarik balik, atau tamat tempoh. Pemulihan pilih masuk menyimpan keupayaan penghantaran (pautan penuh yang mengandungi fragmen) supaya ia boleh dipulihkan kemudian. Oleh itu, kami tidak menggambarkan seluruh peringkat storan sebagai “metadata sahaja.”
5.3 Rahsia
Rahsia (dompet penandatanganan, token pembekal, dan kunci HMAC) dibekalkan melalui pengikatan rahsia/persekitaran platform dan bukannya kawalan sumber. Komponen runtime hanya menerima pengikatan yang diperlukannya. Prosedur putaran dan pertindihan adalah khusus komponen; kami tidak mendakwa satu mekanisme putaran automatik atau teraudit yang universal.
5.4 Pengelogan dan Telemetri
Log JSON berstruktur ditulis pada setiap permintaan API dengan ID korelasi didedahkan dalam header respons X-Request-Id. Telemetri klien adalah tanpa nama — tiada pengecam peranti, tiada alamat IP, tiada pratonton kandungan. Peristiwa ditampung dalam ingatan dan dilepaskan atas dasar usaha terbaik; pelepasan yang gagal dibuang, tidak dicuba semula. Telemetri direka untuk boleh dilumpuhkan pada lapisan rangkaian tanpa menjejaskan produk.
6. Pengesahan
6.1 Daftar Masuk Pautan Magik
Daftar masuk menggunakan token guna sekali yang ditandatangani HMAC dan dihantar ke peti masuk e-mel anda. Pautan sah selama 15 minit dan penebusan dituntut secara atom supaya penggunaan serentak atau ulangan gagal secara tertutup. Selepas berjaya, pelayar menerima kuki legap __Host-qub_session dengan atribut Secure, HttpOnly, SameSite=Strict, dan Path=/.
Sesi mempunyai had melahu 30 hari dan had mutlak 90 hari, berputar selepas 24 jam, dan hanya menerima generasi sebelumnya yang segera untuk tempoh tenggang respons hilang selama 120 saat. Mutasi akaun sensitif memerlukan pengesahan dalam 10 minit sebelumnya. Rahsia penandatanganan HMAC ialah pengikatan platform; bacaan metadata sahaja tidak dengan sendirinya membolehkan token sah dicipta.
6.2 Kunci API (Tier Pembangun)
Kunci API pembangun menggunakan awalan qub_sk_ untuk pengecaman dan kebolehgrepan mudah. Setiap kunci:
- Terikat kepada akaun, skop, dan senarai izin CIDR IP pilihan
- Ditunjukkan dalam bentuk mentah sekali sahaja; rekod kekal menyimpan cincangan SHA-256nya, bukan rahsia pembawa
- Boleh diputar dengan pemetaan tempoh tenggang satu jam yang menyelesaikan kunci lama kepada penggantinya
- Mempunyai keadaan kuota dan had kadar yang bebas
- Tidak pernah dilogkan secara penuh; log merekodkan hanya pengecam kunci
Titik akhir pengurusan kunci pentadbir dijaga di belakang kelayakan pentadbir berasingan.
6.3 Atestasi Emel (Penandatanganan Kepengarangan)
Mengikat alamat emel kepada kunci penandatanganan memerlukan:
- Pemilikan kunci penandatanganan peribadi (anda menandatangani cabaran)
- Pemilikan peti masuk emel (anda memasukkan kod 6 digit yang dihantar melalui emel)
Salah satu sahaja tidak mencukupi. Pembatalan ialah rekod ditandatangani pada akaun anda sendiri dan berkuat kuasa dengan serta-merta; pembaca yang mengambil atestasi melihat keadaan dibatalkan dan paparkan dengan sewajarnya.
7. Pembayaran
Kemasukan kad dan pemprosesan berjalan dalam pembayaran yang dihoskan Stripe. Kami tidak pernah menerima nombor kad, tarikh luput, atau CVC. Kami menyimpan pengecam pelanggan dan langganan Stripe, keadaan langganan, serta data tempoh pada rekod kelayakan/kunci API supaya akses, pembaharuan, pemeteran, pembatalan, dan bayaran balik boleh diselaraskan. Pernyataan kerahsiaan dan keselamatan Stripe mengawal pengendalian data pembayaran tersebut.
Titik akhir pemeteraian merentas-semak rekod kelayakan terhadap pengecam peranti dan, untuk pengguna yang mendaftar masuk, terhadap identiti yang dipautkan. Kelayakan tidak boleh diguna semula merentas peranti tanpa pengguna secara eksplisit memulihkannya melalui daftar masuk pautan magik.
8. Rintangan Penyalahgunaan
8.1 Pengesanan Bot
Aliran pemeteraian dijaga oleh alternatif CAPTCHA yang memelihara kerahsiaan yang tidak menggunakan kuki untuk penjejakan dan tidak menjadikan cap jari untuk pengiklanan. Cabaran yang gagal ditolak oleh Worker pinggir kami sebelum sebarang pemprosesan sisi pemeteraian berlaku.
8.2 Pengehadan Kadar
Had kadar dikuatkuasakan pada beberapa lapisan:
- Had per-IP dan per-kunci pada titik akhir pemeteraian, baca, dan auth
- Had per-emel pada permintaan pautan magik (mencegah banjir peti mel)
- Had per-rakan pada emel jemputan perjanjian (sepuluh per alamat penerima per hari UTC, mitigasi geganti spam utama; perjanjian yang jujur hampir tidak pernah menghampiri had)
- Had per-IP pada penyerahan telemetri
Kaunter dan tuntutan atom diedarkan merentas KV, Durable Objects, dan pengikatan had kadar platform mengikut keperluan ketekalan endpoint. Permintaan yang dihadkan kadar mengembalikan 429; endpoint yang boleh mengira tetingkap cuba semula menyertakan Retry-After.
8.3 Penyederhanaan Kandungan
Laluan muat naik pelayar lalai tidak dapat mengimbas badan: ia hanya menerima artifak yang disegel oleh klien. Pembina /api/v1/seal laluan melihat teks jelas secara sementara, dan peringkat perjanjian memegang terma berstruktur sehingga pemeteraian, tetapi pengecualian kepercayaan itu tidak menukar laluan muat naik biasa yang buta bait menjadi pengimbas kandungan. Moderasi operasi adalah satu senarai tolak di lapisan penonton: qub yang disenarai hitam ditolak oleh penonton kami tanpa mengira sama ada muatan yang disimpan masih boleh dicapai. Penyediaan senarai larangan tidak menarik balik bait tahan lama, entri log ketelusan, atau data rangkaian kekal yang telah diterbitkan.
Laporan penyalahgunaan dihadkan kadar menggunakan cincangan sehala IP pelapor; kami tidak menyimpan IP dalam bentuk jelas untuk tujuan ini.
9. Rantaian Bekalan dan Integriti Binaan
9.1 Penyematan Rantaian Alat
Versi pengkompil dan runtime disematkan dalam konfigurasi repositori dan kebergantungan diselesaikan melalui fail kunci yang dikomited. CI menyemak kesegaran fail terjana dan invarian sensitif kebolehulangan. Kami tidak membuat dakwaan lebih kuat bahawa setiap binaan bersih adalah sama bait demi bait pada semua mesin yang disokong.
9.2 Lint dan Analisis Statik
Workspace mengaktifkan kumpulan lint terketat kami pada tahap deny. CI menganggap setiap amaran — termasuk amaran pautan dokumentasi — sebagai kegagalan binaan. Ini adalah sengaja: kami menggunakan ketegasan lint sebagai penanda kepelangan untuk regresi halus.
9.3 Pintu CI
Aliran kerja CI meliputi pemformatan dan lint ketat; ujian Rust, WASM/pelayar, Worker, sematan, dan API; semakan jenis; liputan kod; semakan mutasi/invarian; analisis statik kebergantungan dan aliran kerja; semakan kunci, liputan, hanyutan, dan titik kod bermusuhan i18n; kesegaran dokumentasi/API/pangkalan pengetahuan terjana; inventori dokumen dan semakan pautan dalaman; belanjawan helaian gaya dan bundle; serta pengesahan OpenAPI. Sesetengah kerja mutasi yang mahal dijadualkan dan bukannya dijalankan pada setiap tolakan.
Satu rangkuman ci yang diperlukan kekal merah jika mana-mana kerja diperlukan gagal. Aliran kerja cawangan dilindungi dan penyebaran menggunakan keputusan itu dan bukannya menggandakan pintu keselamatan yang lebih kecil.
9.4 Ujian Mutasi
Kerja mingguan menjalankan ujian mutasi terhadap modul tulen kritikal keselamatan: pencincangan, CBOR berkanun, pemeteraian, buka kunci, newtype format wayar, pengesahan jenis protokol, dan ruang nama handle. Ujian mutasi menjawab "adakah suite ujian kami menangkap kod yang salah dengan halus?" — jika pelaksanaan yang dimutasi masih lulus semua ujian, kami tahu kami mempunyai jurang liputan ujian dan menanganinya.
9.5 Hook Git
Hook tempatan (pre-commit, pre-push) mencerminkan pintu CI supaya regresi ditangkap sebelum meninggalkan mesin pembangun. Hook dipasang melalui skrip repo; ia tidak dipintas dalam aliran kerja kami dan CI ialah pintu berwibawa jika ia dilangkau.
10. Pengujian
Kod kritikal keselamatan membawa tiga jenis ujian:
- Ujian unit mengesahkan tingkah laku yang dijangka pada input yang diketahui, termasuk vektor ujian yang diperoleh daripada spesifikasi protokol.
- Ujian harta menjana beribu-ribu input sembarangan dan menegaskan invarian: perjalanan ulang-alik CBOR berkanun, perjalanan ulang-alik pengesahan tandatangan, predikat pengikatan emel, determinisme pengakuan perjanjian.
- Ujian silang-pelaksanaan mengesahkan bahawa pelaksanaan klien dan pelayan kami bersetuju bait demi bait pada pengekodan berkanun. Ini menangkap penyimpangan antara kedua-dua pelaksanaan sebelum ia mencapai pengeluaran.
11. Higien Cawangan dan Pengeluaran
Cawangan ciri hanya memajukan staging melalui pull request Pintu 1: ci diperlukan berwarna hijau, tiada permintaan perubahan yang belum diselesaikan, tiada konflik gabungan, dan pokok semakan yang bersih; gabungan menggunakan squash dan cawangan dipadam. main hanya maju melalui pull request Pintu 2 staging → main dan mengekalkan keturunan dengan commit gabungan. Tolakan terus ke cawangan bukan aliran kerja keluaran.
Penyebaran persediaan dan pengeluaran dicetuskan daripada keadaan cawangan staging dan main yang dilindungi selepas CI. Kod pull request dan kelayakan fork tidak menerima rahsia penyebaran.
Rahsia yang digunakan dalam aliran kerja penyebaran diskopkan kepada persekitaran penyebaran oleh platform CI kami. Ia tidak tersedia kepada aliran kerja pull-request daripada forks.
12. Pendedahan Diselaras
Jika anda percaya anda telah menemui kerentanan keselamatan dalam qub, kami ingin mendengarnya dengan cepat dan kami komited mengendalikan laporan secara profesional.
- Emel
support@qub.socialdengan awalan subjek[SECURITY]. - Huraikan kerentanan, langkah-langkah untuk menghasilkan semula, dan sebarang bukti konsep.
- Beri kami tetingkap pendedahan yang munasabah (biasanya 90 hari) sebelum keluar awam.
- Jangan akses data yang bukan milik anda, merendahkan perkhidmatan untuk pengguna lain, atau menyimpan data yang diperoleh semasa penyelidikan melebihi yang diperlukan untuk menunjukkan isu.
Kami mengakui penerimaan dalam tempoh tiga hari bekerja dan terus memberitahu anda apabila kami menyiasat. Dengan persetujuan anda, kami menghargai pelapor dalam nota keluaran.
12.1 Safe Harbor
Jika penyelidikan anda mengikut peraturan di atas (siasatan suci hati, tiada bahaya kepada pengguna lain atau perkhidmatan, tetingkap pendedahan munasabah), kami tidak akan mengejar tindakan undang-undang terhadap anda, dan kami tidak akan meminta penguatkuasaan undang-undang untuk berbuat demikian. Kami menganggap kerja anda sebagai pengujian dibenarkan dan kami lebih suka anda menemui pepijat daripada orang lain.
Safe Harbor ini terpakai pada:
- Penyelidikan pada perkhidmatan qub.social langsung (bukan pada pengikat ujian yang kami terbitkan untuk tujuan tersebut).
- Kejuruteraan terbalik binari yang diterbitkan dan crate qub-core / qub-app sumber terbuka kami.
- Mana-mana kelas kerentanan — protokol, aplikasi, infrastruktur, rantaian bekalan — yang menjejaskan qub.
Ia tidak terpakai pada kejuruteraan sosial ahli pasukan qub, ujian penolakan perkhidmatan, atau mengakses data pengguna lain melebihi yang diperlukan untuk menunjukkan isu. Jika anda tidak pasti sama ada sesuatu berada dalam Safe Harbor, tanya dahulu menggunakan awalan subjek [SECURITY] yang sama.
13. Had Jujur
Keselamatan ialah amalan, bukan keadaan. Beberapa had wajar dinamakan secara langsung:
- Kami pasukan kecil. Kedalaman semakan kami tidak sepadan dengan fungsi keselamatan aplikasi khusus korporat besar. Kami mengimbangi dengan pintu automatik yang ketat dan permukaan serangan minimum, tetapi kami tidak mendakwa tidak boleh salah.
- Kekekalan bahagian belakang storan kami ialah pintu sehala. Jika kesilapan menyebabkan kandungan dimeterai menjadi boleh dinyahsulit lebih awal daripada yang dimaksudkan, kami tidak boleh membatalkannya. Kami menganggap aliran pemeteraian dengan kehatian-hatian yang setimpal.
- Rangkaian drand ialah kebergantungan luaran. Kegagalan bencana drand akan menjejaskan tingkah laku pendedahan setiap qub. Kami memantau kesihatan drand dan mempunyai dokumentasi luar jangka untuk migrasi rantaian jika diperlukan. Untuk tarikh buka kunci lebih daripada 2 tahun, modal pengesahan masa pemeteraian menunjukkan pendedahan eksplisit: qub jangka panjang bergantung pada ketahanan rantaian drand, dan migrasi rantaian drand masa depan mungkin memerlukan langkah pemulihan untuk membuka qub. Untuk tarikh buka kunci lebih daripada 5 tahun, anda mesti menanda kotak tambahan mengesahkan anda telah membaca dan menerima risiko ini sebelum pemeteraian diteruskan.
- Primitif kriptografi yang kami bergantung adalah standard dan disemak secara meluas, tetapi kriptografi berkembang. Apabila kami mempunyai pilihan (penandatanganan pasca-kuantum, penyulitan disahkan), kami memilih pilihan yang lebih konservatif.
14. Perubahan Halaman Ini
Perubahan material dinyatakan dengan mengemas kini tarikh berkuat kuasa di bahagian atas. Apabila perubahan mencerminkan peningkatan keselamatan konkrit, kami menerangkannya secara ringkas dalam log perubahan awam. Apabila perubahan mencerminkan penjelasan polisi, kami menerangkan apa yang berubah dan mengapa.
Untuk soalan tentang apa-apa pada halaman ini, emel support@qub.social dengan awalan subjek [SECURITY].
15. Log Perubahan
| Versi | Tarikh berkuat kuasa | Ringkasan |
|---|---|---|
| 1.1 | 23 September 2026 | Menyelaraskan dakwaan kriptografi, mod penghantaran, storan, CSP, sesi, kunci API, pembayaran, CI, dan aliran kerja keluaran dengan sistem yang dilaksanakan. |
| 1.0 | 2 Mei 2026 | Penerbitan awal. |