Keamanan di qub

Tanggal efektif: 23 September 2026 Versi: 1.1 — tinjauan akurasi implementasi


Untuk peneliti — referensi cepat:

Detail lengkap ada di §12 (Pengungkapan Terkoordinasi).


Tentang Kami

qub.social dioperasikan oleh VSPRY AUSTRALIA PTY LIMITED (ABN 41 631 026 330), Level 38, 71 Eagle Street, Brisbane QLD 4000, Australia. Acuan "qub", "kami", dan "milik kami" merujuk pada entitas tersebut.

Kontak keamanan: support@qub.social dengan awalan subjek [SECURITY].


1. Pendekatan Kami

qub adalah infrastruktur kepercayaan. Produk tidak berharga jika tidak aman, sehingga keamanan bukan fitur — ia adalah substratnya. Halaman ini menjelaskan, secara konkret, bagaimana kami menjaga tumpukan, data Anda, dan integritas konten tersegel.

Nilai komitmen temporal yang dapat diverifikasi tumbuh seiring makin banyak bagian internet dihasilkan mesin. Transaksi penyimpanan atau tambatan log transparansi yang terverifikasi dapat menetapkan bahwa ciphertext sudah ada paling lambat pada waktu bloknya; artefak tersegel secara terpisah membuktikan integritas konten, pengikatan putaran drand, dan tanda tangan kepenulisan apa pun. Pemisahan klaim-klaim tersebut menjadi standar yang menjadi tolok ukur halaman ini.

Kami tidak meminta Anda untuk memercayai kami. Kami merancang sehingga kepercayaan yang dibutuhkan dari kami sekecil mungkin, dan di mana kepercayaan diperlukan, kami menjelaskan dengan tepat apa yang dipercayai dan mengapa.

Tiga prinsip mendorong setiap keputusan desain:


2. Model Ancaman

2.1 Apa yang Kami Lindungi

2.2 Apa yang Tidak Dapat Kami Lindungi

Kami jujur tentang batas kami. qub tidak dapat bertahan terhadap:


3. Kriptografi Sisi-Klien

Dalam alur pesan peramban default, enkripsi konten terjadi sebelum permintaan unggah. Dua jalur eksplisit berbeda: Builder /api/v1/seal sengaja mengirim teks polos dan K yang dibuat pemanggil ke Worker untuk penyegelan dalam memori, sedangkan penyiapan/penandatanganan bersama pakta mengirim pakta terstruktur yang ditandatangani ke layanan agar artefak bilateral dapat difinalkan. Kedua pengecualian ini tidak boleh disalahartikan sebagai enkripsi ujung-ke-ujung pada jalur peramban.

3.1 Enkripsi Kunci-Waktu

qub menggunakan tlock — enkripsi berbasis identitas yang dikunci pada putaran beacon drand masa depan. Enkripsi berlangsung di peramban Anda menggunakan kunci publik jaringan drand; kunci dekripsi dirilis secara publik oleh jaringan drand hanya ketika putaran target tercapai. Tidak seorang pun, termasuk kami, dapat merekonstruksi kunci dekripsi terlebih dahulu.

Kami menargetkan rantai quicknet:

Kunci publik dan waktu genesis rantai quicknet dikompilasi ke dalam klien. Kami tidak mengambil parameter rantai pada runtime, sehingga simpul berbahaya tidak dapat mengganti rantai yang kami kontrol.

3.2 Enkripsi Simetris

Skema tlock membungkus kunci konten AES-256-GCM. AES-GCM menyediakan enkripsi terotentikasi: satu bit yang dibalik dalam ciphertext menyebabkan dekripsi gagal, alih-alih menghasilkan plaintext yang rusak secara diam-diam.

3.3 Serialisasi Kanonik

Struktur protokol diserialisasi menggunakan CBOR deterministik (RFC 8949 §4.2 core deterministic encoding). Dua implementasi yang mengodekan struktur logis yang sama menghasilkan CBOR identik. Muatan tersegel lengkap tidak deterministik: enkripsi tlock dan pembungkus luar menggunakan keacakan baru. Hash badan dihitung atas bita badan mentah, sedangkan pengodean kanonik membuat struktur bertanda tangan/wire di sekelilingnya tidak ambigu.

Kami menulis encoder CBOR dengan tangan untuk implementasi klien dan server daripada mengandalkan library serialisasi generik — persyaratannya adalah ketepatan, bukan ergonomi, dan tes properti berjalan di kedua implementasi untuk memverifikasi bahwa mereka sepakat.

Tes regresi menegaskan bahwa format wire kanonik tidak berisi urutan byte merek-qub di luar kunci bidang qub_id primitif-protokol. Format wire sengaja agnostik-merek — pembaca yang sesuai (kami atau pihak ketiga) dapat merender qub apa pun dari penyimpanan permanen, terlepas dari penerapan mana yang menyegelnya. Tes adalah tripwire yang mencegah perubahan masa depan dari secara tidak sengaja memanggang referensi merek ke dalam byte yang, setelah di penyimpanan permanen, tidak dapat ditulis ulang.

3.4 Pencirian Badan dan Integritas Pra-Pengungkapan

Setiap muatan tersegel membawa hash SHA3-256 dari bita badan mentahnya. Hash terikat ke qub_id dan, ketika penandatanganan kepenulisan diaktifkan, ke input tanda tangan V2. Pembaca menghitungnya ulang setelah dekripsi dan menolak jika tidak cocok.

Pengenal konten 32-byte qub_id diturunkan dari preimage 108-byte yang mencakup versi protokol, jenis konten, cap waktu pembuatan dan pembukaan kunci, cap waktu hasil opsional (atau sentinel nolnya), putaran drand target, hash badan, dan SHA3-256 dari judul opsional yang dinormalisasi NFC. Gateway atau CDN tidak dapat mengubah bidang terikat mana pun secara konsisten sambil tetap lolos penurunan ulang. Judul dibatasi pada 100 titik kode NFC dan ditolak jika mengandung kelas titik kode bermusuhan/kontrol bersama (termasuk override bidi, karakter lebar-nol, blok tag, BOM, C0, C1, dan DEL).

3.5 Penandatanganan (ML-DSA-65)

Penandatanganan kepenulisan menggunakan ML-DSA-65 (FIPS 204), skema tanda tangan pasca-kuantum yang distandarkan NIST. Kami sengaja memilih primitif pasca-kuantum untuk penandatanganan karena konten tersegel bersifat permanen: tanda tangan yang diverifikasi hari ini harus tetap diverifikasi puluhan tahun dari sekarang, termasuk setelah komputer kuantum berskala besar menjadi praktis.

Kunci penandatanganan dihasilkan di peramban. Rahasia lokal dibungkus dengan kunci WebCrypto yang tidak dapat diekstrak sebelum disimpan di IndexedDB. Jika fitur pemulihan lintas-perangkat yang tercakup akun digunakan, blob kunci portabel terenkripsi AEAD disimpan di sisi server; ciphertext kunci rahasianya terikat ke id akun yang tidak dapat diubah, dan layanan memvalidasi amplop publik tetapi tidak dapat mendekripsi materi rahasia. Bita kunci privat mentah tidak dikirim ke server. Kunci publik dan catatan atestasi disimpan untuk verifikasi dan tampilan identitas.

Dekripsi tlock dalam peramban yang sama berlaku di dalam sematan qub: ketika qub tersegel dirender melalui <qub-embed> pada halaman pihak ketiga, dekripsi masih terjadi di iframe sematan di peramban pembaca. Sematan tidak mengubah model kepercayaan — plaintext tidak pernah didekripsi di server qub.

3.6 Atribusi Publik — Opt-In

qub yang tersegel tidak membawa penunjuk on-chain ke pembuatnya kecuali pembuat secara eksplisit memilih untuk melampirkannya. Ketika Anda menyegel qub, aplikasi referensi mengeluarkan tag penyimpanan Author (sidik jari hex 64 karakter dari kunci publik penandatanganan Anda) hanya ketika "Atribusi publik" diaktifkan pada langkah pemilih tanggal. Dengan toggle mati — default — tidak ada tag Author yang ditulis dan qub tidak teratribusi di penyimpanan permanen: tidak ada di penyimpanan yang menautkan unggahan ke handle Anda, email Anda, atau qub Anda lainnya. Dengan toggle aktif, sidik jari diselesaikan ke @handle Anda melalui rantai atestasi di §6.3 / §10 dan hitung mundur pembaca menampilkan "Disegel oleh @{handle}" sebelum pengungkapan.

Ini adalah penjaga yang disengaja terhadap risiko enumerasi yang akan diciptakan oleh tag Author yang selalu aktif: pihak ketiga yang mempelajari sidik jari pembuat dapat sebaliknya menelusuri penyimpanan permanen dengan tag dan merekonstruksi seluruh keluaran historis pembuat tersebut. Atribusi opsi-aktif menutup saluran itu — hanya qub yang secara eksplisit dipilih pembuat untuk diatribusikan yang muncul di bawah sidik jari di penyimpanan permanen.

Halaman profil /u/{handle} adalah kartu identitas terverifikasi — handle, nama tampilan + URL opsional, lencana "email terverifikasi" (tanpa alamat), dan bentuk pendek sidik jari kriptografi. Ia tidak mencantumkan qub seorang pembuat. Pengunjung yang ingin melihat qub tertentu dari pembuat mengikuti URL pengiriman qub itu secara langsung.

3.7 Pembungkus Enkripsi Luar

Bahkan setelah dekripsi kunci-waktu secara matematis mungkin—setelah tanda tangan drand untuk putaran terikat diterbitkan—lapisan kunci-waktu kanonik saja akan memungkinkan pengindeks mendekripsi qub yang dapat ditemukan secara massal. Pengiriman privat menutup saluran itu dengan lapisan simetris tambahan di sekeliling bita terenkripsi kunci-waktu (Protokol §13). Pengiriman publik sengaja menghilangkan pembungkus agar tautan notifikasi, sematan, dan penemuan dapat berfungsi tanpa fragmen rahasia.

Pembungkus menggunakan AES-256-GCM, sandi terotentikasi standar NIST, dengan kunci K 256-bit segar yang dihasilkan per qub oleh CSPRNG peramban Anda. K terikat ke qub_id qub sebagai data tambahan terotentikasi, sehingga kunci dari satu qub tidak dapat digunakan kembali untuk mendekripsi qub yang berbeda.

K tidak pernah mencapai server kami dalam alur peramban privat default. K dienkode ke dalam fragmen URL tautan bagikan (https://qub.social/c/<tx_id>#<base64url(K)>). Peramban tidak mengirimkan fragmen URL ke server—RFC 3986 menempatkan fragmen di luar permintaan—sehingga qub.social, gateway penyimpanan, CDN, dan pemantauan permintaan tidak dapat melihat K dalam alur tersebut. OuterWrapper yang tersimpan adalah CBOR terstruktur yang dapat dikenali, tetapi field ciphertext terautentikasinya menyembunyikan struktur SealedQub dalam dan tidak dapat dibuka tanpa K.

Konsekuensi bersih:

Endpoint /api/v1/seal sisi-server Worker (digunakan oleh agen AI dan penelepon API lainnya) mengharuskan penelepon menghasilkan K dengan CSPRNG, menyimpannya secara lokal, dan menyediakannya sebagai wrapper_key_b64url. Worker mau tidak mau melihat baik plaintext maupun K di memori pada jalur yang secara eksplisit tepercaya ini, tetapi tidak menyimpan keduanya. Idempotency-Key yang wajib mencegah respons yang hilang menciptakan qub kedua yang tertagih, sementara K yang disimpan penelepon dapat digabungkan dengan URL tanpa-fragmen yang diputar ulang. Ini berbeda dari jalur peramban default, di mana K tidak pernah mencapai Worker kecuali pembuat secara eksplisit mengaktifkan pemulihan.


4. Transport dan Edge

4.1 TLS

Lalu lintas peramban ke qub disajikan melalui HTTPS di edge Cloudflare. Respons menetapkan HTTP Strict Transport Security (max-age=63072000; includeSubDomains; preload). Versi TLS dan rangkaian sandi yang dinegosiasikan ditentukan oleh konfigurasi edge aktif, bukan diklaim oleh kode aplikasi. Kami tidak mengekspos server origin yang dapat dijangkau secara terpisah.

4.2 Keamanan Konten

Klien yang dikompilasi disajikan dengan header content-type dan cache yang ketat. Shell SPA adalah satu origin. Kami tidak menyematkan skrip pihak ketiga untuk analitik atau iklan. Dua titik sentuh pihak ketiga dalam produk keduanya sempit cakupannya: alur pembelian meninggalkan SPA sepenuhnya dengan pengalihan halaman penuh ke pembayaran yang dihosting Stripe (https://checkout.stripe.com/…) — UI Stripe tidak pernah dieksekusi dalam origin kami dan kami tidak pernah melihat data kartu — dan alur penyegelan memuat widget Turnstile Cloudflare, alternatif CAPTCHA yang menjaga privasi yang Cloudflare render di dalam iframe sandbox-nya sendiri. Tidak ada pihak yang dapat membaca sisa halaman.

iframe sematan qub (disajikan dari qub.social/embed/{tx_id} dan dimuat ke situs pihak ketiga oleh embed.js) membawa Content-Security-Policy-nya sendiri. Daftar izin connect-src-nya adalah '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 host tidak dapat membaca DOM-nya, dan iframe tidak dapat menavigasi host kecuali setelah tindakan pengguna.

4.3 CORS dan Lingkup Fetch

Klien peramban membuat permintaan fetch hanya ke:

Tujuan sematan diberlakukan oleh CSP-nya. Tujuan yang dimaksudkan untuk SPA utama ditetapkan dalam kode dan konfigurasi serta dijalankan oleh pemeriksaan peramban dan integrasi; Subresource Integrity bukan kontrol tujuan jaringan.

Sematan mengambil bita tersimpan melalui origin qub/penyimpanan yang diizinkan, membuka bungkus muatan privat di peramban menggunakan K dari fragmen URL-nya, dan mengambil tanda tangan putaran waktu pengungkapan dari dua origin drand yang diizinkan. SPA utama menggunakan set fallback empat endpoint di config/drand-endpoints.json (drand.cloudflare.com, api.drand.sh, api2.drand.sh, dan api3.drand.sh) agar gangguan satu endpoint tidak memblokir pengungkapan. CSP sematan menolak koneksi di luar daftar eksplisitnya.


5. Infrastruktur Sisi-Server

5.1 Edge Serverless

API kami berjalan sepenuhnya pada runtime serverless terkelola di edge. Tidak ada VM, tidak ada container, dan tidak ada proses server persisten yang kami kelola. Ini secara dramatis mengurangi permukaan serangan yang menjadi tanggung jawab kami: kami tidak menjalankan OS, server web, atau runtime aplikasi yang harus kami tambal.

Middleware public-CORS terpisah diterapkan Access-Control-Allow-Origin: * ke set jalur yang diterapkan berikut: /embed.js, /embed/v1.js, semuanya di bawah /embed/; /api/v1/telemetry; /api/v1/openapi.json; semuanya di bawah /api/v1/qub/ (termasuk bytes, metadata, bukti, keterlibatan, notifikasi, dan subrute push); semuanya di bawah /api/v1/log/; tangani pencarian publik di bawah /api/v1/handle/; dan avatar publik membaca di bawah /api/v1/identity/avatar/. Izin penerbangan awalnya GET, POST, dan OPTIONS dengan Content-Type header permintaan. Permukaan berbasis awalan ini lebih luas daripada hanya panggilan yang saat ini dilakukan oleh embed, jadi setiap penangan di bawah awalan tersebut harus terus menegakkan validasi, otentikasi, batasan tingkat, dan kontrol penyalahgunaan mereka sendiri. Jalur API lainnya mempertahankan kebijakan CORS qub.social-restricted.

5.2 Penyimpanan

Alur pesan peramban default tidak menyimpan teks polos secara persisten di infrastruktur qub. Builder /api/v1/seal menangani teks polos dan K dalam memori tetapi tidak menyimpan keduanya. Penyiapan pakta harus menyimpan pakta terstruktur yang ditandatangani hingga ditandatangani bersama, ditarik kembali, atau kedaluwarsa. Pemulihan opt-in menyimpan kapabilitas pengiriman (tautan lengkap yang memuat fragmen) agar dapat dipulihkan kemudian. Karena itu, kami tidak menggambarkan seluruh tingkat penyimpanan sebagai "hanya metadata".

5.3 Rahasia

Rahasia (dompet penandatanganan, token penyedia, dan kunci HMAC) diberikan melalui binding rahasia/lingkungan platform, bukan kontrol sumber. Komponen runtime hanya menerima binding yang diperlukannya. Prosedur rotasi dan masa tumpang tindih bersifat khusus per komponen; kami tidak mengklaim satu mekanisme rotasi universal yang otomatis atau diaudit.

5.4 Pencatatan dan Telemetri

Log JSON terstruktur ditulis pada setiap permintaan API dengan ID korelasi yang dimunculkan di header respons X-Request-Id. Telemetri klien bersifat anonim — tidak ada pengenal perangkat, tidak ada alamat IP, tidak ada pratinjau konten. Peristiwa disangga dalam memori dan di-flush atas dasar best-effort; flush yang gagal dibuang, tidak dicoba ulang. Telemetri dirancang agar dapat dinonaktifkan pada lapisan jaringan tanpa memengaruhi produk.


6. Autentikasi

6.1 Masuk Magic-Link

Masuk menggunakan token sekali pakai yang ditandatangani HMAC dan dikirim ke kotak masuk email Anda. Tautan valid selama 15 menit dan penebusan diklaim secara atomik sehingga penggunaan serentak atau pemutaran ulang ditolak secara aman. Jika berhasil, peramban menerima cookie buram __Host-qub_session dengan atribut Secure, HttpOnly, SameSite=Strict, dan Path=/.

Sesi memiliki batas tidak aktif 30 hari dan batas absolut 90 hari, dirotasi setelah 24 jam, dan hanya menerima generasi tepat sebelumnya selama masa tenggang 120 detik untuk respons yang hilang. Mutasi akun sensitif memerlukan autentikasi dalam 10 menit terakhir. Rahasia penandatanganan HMAC merupakan binding platform; akses baca metadata saja tidak dapat mencetak token valid.

6.2 Kunci API (Tingkat Pengembang)

Kunci API pengembang menggunakan awalan qub_sk_ untuk pengenalan mudah dan kemampuan grep. Setiap kunci:

Endpoint manajemen kunci admin dijaga di belakang kredensial admin terpisah.

6.3 Atestasi Email (Penandatanganan Kepenulisan)

Mengikat alamat email ke kunci penandatanganan memerlukan:

  1. Kepemilikan kunci penandatanganan privat (Anda menandatangani tantangan)
  2. Kepemilikan kotak masuk email (Anda memasukkan kode 6 digit yang dikirim melalui email)

Salah satu saja tidak cukup. Pencabutan adalah catatan ditandatangani pada akun Anda sendiri dan berlaku segera; pembaca yang mengambil atestasi melihat status yang dicabut dan menampilkannya sesuai.


7. Pembayaran

Entri dan pemrosesan kartu berjalan di dalam checkout yang dihosting Stripe. Kami tidak pernah menerima nomor kartu, tanggal kedaluwarsa, atau CVC. Kami menyimpan pengenal pelanggan dan langganan Stripe, status langganan, serta data periode pada catatan hak/kunci API agar akses, perpanjangan, pengukuran, pembatalan, dan pengembalian dana dapat direkonsiliasi. Pernyataan privasi dan keamanan Stripe mengatur penanganan data pembayaran oleh Stripe.

Endpoint penyegelan memeriksa silang catatan hak terhadap pengenal perangkat dan, untuk pengguna yang masuk, terhadap identitas tertaut. Hak tidak dapat digunakan kembali di seluruh perangkat tanpa pengguna secara eksplisit memulihkannya melalui masuk magic-link.


8. Ketahanan terhadap Penyalahgunaan

8.1 Deteksi Bot

Alur penyegelan dijaga oleh alternatif CAPTCHA yang menjaga privasi yang tidak menggunakan cookie untuk pelacakan dan tidak mengambil sidik jari untuk iklan. Tantangan yang gagal ditolak oleh Worker edge kami sebelum pemrosesan sisi-segel apa pun terjadi.

8.2 Pembatasan Laju

Batas laju diberlakukan di beberapa lapisan:

Penghitung dan klaim atomik tersebar di KV, Durable Objects, dan binding batas laju platform sesuai kebutuhan konsistensi endpoint. Permintaan yang dibatasi laju mengembalikan 429; endpoint yang dapat menghitung jendela coba ulang menyertakan Retry-After.

8.3 Moderasi Konten

Rute unggah browser default tidak dapat memindai tubuh: ia hanya menerima artefak yang disegel oleh klien. Pembuat /api/v1/seal rute melihat teks biasa secara sementara, dan penataan pakta menahan istilah yang terstruktur hingga finalisasi, tetapi pengecualian kepercayaan itu tidak mengubah jalur unggah buta-bait umum menjadi pemindai konten. Moderasi operasional adalah sebuah daftar-tolak di lapisan pemirsa: qub yang masuk daftar penolakan ditolak oleh pemirsa kami terlepas dari apakah muatan yang disimpan tetap dapat diakses. Pembuangan dari daftar penolakan tidak mencabut byte yang tahan lama, entri log transparansi, atau data jaringan permanen yang sudah diterbitkan.

Laporan penyalahgunaan dibatasi laju menggunakan hash satu arah dari IP pelapor; kami tidak menyimpan IP dalam teks polos untuk tujuan ini.


9. Rantai Pasokan dan Integritas Build

9.1 Penyematan Toolchain

Versi compiler dan runtime disematkan dalam konfigurasi repositori, dan dependensi diselesaikan melalui lockfile yang dikomit. CI memeriksa kesegaran berkas yang dihasilkan dan invarian yang sensitif terhadap reproduktibilitas. Kami tidak membuat klaim yang lebih kuat bahwa setiap build bersih identik bit demi bit di semua mesin yang didukung.

9.2 Lint dan Analisis Statis

Workspace mengaktifkan kelompok lint paling ketat kami pada tingkat deny. CI memperlakukan setiap peringatan — termasuk peringatan tautan dokumentasi — sebagai kegagalan build. Ini disengaja: kami menggunakan ketelitian lint sebagai tripwire untuk regresi yang halus.

9.3 Gerbang CI

Alur kerja CI mencakup pemformatan dan lint ketat; pengujian Rust, WASM/peramban, Worker, sematan, dan API; pemeriksaan tipe; cakupan kode; pemeriksaan mutasi/invarian; analisis statis dependensi dan alur kerja; pemeriksaan kunci, cakupan, drift, dan titik kode bermusuhan i18n; kesegaran dokumen/API/basis pengetahuan yang dihasilkan; inventaris dokumen dan pemeriksaan tautan internal; anggaran stylesheet dan bundel; serta validasi OpenAPI. Beberapa pekerjaan mutasi yang mahal dijadwalkan, bukan dijalankan pada setiap push.

Satu rangkuman wajib ci tetap merah jika ada pekerjaan wajib yang gagal. Alur kerja cabang terlindungi dan deploy menggunakan hasil tersebut alih-alih menggandakan gerbang keamanan yang lebih kecil.

9.4 Pengujian Mutasi

Pekerjaan mingguan menjalankan pengujian mutasi terhadap modul murni kritis-keamanan: pencirian, CBOR kanonik, seal, unlock, newtype format-wire, validator tipe protokol, dan namespace handle. Pengujian mutasi menjawab "apakah suite tes kami menangkap kode yang salah secara halus?" — jika implementasi yang dimutasi masih lulus semua tes, kami tahu kami memiliki celah cakupan tes dan menanganinya.

9.5 Git Hook

Hook lokal (pre-commit, pre-push) mencerminkan gerbang CI sehingga regresi tertangkap sebelum meninggalkan mesin pengembang. Hook dipasang melalui skrip repo; mereka tidak dilewati dalam alur kerja kami dan CI adalah gerbang otoritatif jika mereka dilewati.


10. Pengujian

Kode kritis-keamanan membawa tiga jenis tes:


11. Kebersihan Cabang dan Rilis

Cabang fitur hanya memajukan staging melalui pull request Gerbang 1: ci wajib hijau, tidak ada permintaan perubahan yang belum diselesaikan, tidak ada konflik penggabungan, dan tree yang ditinjau bersih; penggabungannya menggunakan squash lalu cabang dihapus. main hanya maju melalui pull request Gerbang 2 staging → main dan mempertahankan ancestry dengan merge commit. Push cabang langsung bukan alur kerja rilis.

Deploy staging dan produksi dipicu dari status cabang terlindungi staging dan main yang sesuai setelah CI. Kode pull request dan kredensial fork tidak menerima rahasia deploy.

Rahasia yang digunakan dalam alur kerja deploy dicakupkan ke lingkungan deploy oleh platform CI kami. Mereka tidak tersedia untuk alur kerja pull-request dari fork.


12. Pengungkapan Terkoordinasi

Jika Anda yakin telah menemukan kerentanan keamanan di qub, kami ingin mendengarnya dengan cepat dan kami berkomitmen untuk menangani laporan secara profesional.

Kami mengakui penerimaan dalam tiga hari kerja dan terus memberi tahu Anda saat kami menyelidikinya. Dengan persetujuan Anda, kami memberi kredit kepada pelapor dalam catatan rilis.

12.1 Safe Harbor

Jika penelitian Anda mengikuti aturan di atas (investigasi iktikad baik, tanpa bahaya kepada pengguna lain atau layanan, jendela pengungkapan yang wajar), kami tidak akan mengajukan tindakan hukum terhadap Anda, dan kami tidak akan meminta penegakan hukum untuk melakukannya. Kami memperlakukan pekerjaan Anda sebagai pengujian yang diotorisasi dan kami lebih suka Anda menemukan bug daripada orang lain.

Safe Harbor ini berlaku untuk:

Tidak berlaku untuk rekayasa sosial anggota tim qub, uji penolakan layanan, atau mengakses data pengguna lain di luar yang diperlukan untuk menunjukkan masalah. Jika Anda tidak yakin apakah sesuatu berada dalam Safe Harbor, tanyakan terlebih dahulu menggunakan awalan subjek [SECURITY] yang sama.


13. Batasan yang Jujur

Keamanan adalah praktik, bukan keadaan. Beberapa batasan layak disebutkan secara langsung:


14. Perubahan pada Halaman Ini

Perubahan material dicatat dengan memperbarui tanggal efektif di bagian atas. Di mana perubahan mencerminkan peningkatan keamanan konkret, kami menjelaskannya secara singkat dalam changelog publik. Di mana perubahan mencerminkan klarifikasi kebijakan, kami menjelaskan apa yang berubah dan mengapa.

Untuk pertanyaan tentang apa pun di halaman ini, kirim email ke support@qub.social dengan awalan subjek [SECURITY].


15. Catatan Perubahan

Versi Tanggal efektif Ringkasan
1.1 23 September 2026 Menyelaraskan klaim kriptografi, mode pengiriman, penyimpanan, CSP, sesi, kunci API, pembayaran, CI, dan alur kerja rilis dengan sistem yang diimplementasikan.
1.0 2 Mei 2026 Publikasi awal.