Audit 5 menit

Verifikasi enkripsi zero-knowledge Vaulted sendiri

Jangan percaya begitu saja pada alat keamanan — verifikasi sendiri. Empat pengujian browser, tanpa instalasi, lima menit.

Checklist 60 detik

Baca ini dulu sekilas. Panduan lengkap di bawah membahas setiap langkah secara mendalam.

  1. 1

    Buka DevTools → tab Network

    Di Vaulted, tekan Cmd+Option+I (macOS) atau F12 (Windows/Linux). Pindah ke tab Network dan filter berdasarkan Fetch/XHR.

  2. 2

    Buat rahasia dan periksa POST

    Ketik string canary yang mudah dikenali (mis. CANARY-12345) dan klik Create. Temukan permintaan POST /api/secrets. Buka tab Payload — kamu hanya akan melihat ciphertext (base64) dan iv. Cari body untuk canary-mu; itu tidak ada di sana.

  3. 3

    Periksa link berbagi

    Lihat link yang dihasilkan. Kunci dekripsi berada setelah # (URL fragment). Sesuai RFC 3986, browser tidak pernah mengirim fragment ke server — baik di baris permintaan, header, maupun referrer.

  4. 4

    Konfirmasi dekripsi berjalan di sisi klien

    Buka link di tab baru. Respons GET dari /api/secrets/[id] hanya mengembalikan ciphertext. Di panel Sources, cari crypto.subtle.decrypt — panggilan itu berjalan di browsermu, bukan di server kami.

Apa yang kamu verifikasi

Klaim Vaulted sangat spesifik: server tidak pernah melihat plaintext atau kunci enkripsimu. Itu dapat diuraikan menjadi empat properti yang bisa diamati:

  1. Plaintext tidak pernah muncul dalam permintaan jaringan apa pun.
  2. Kunci enkripsi tidak pernah muncul dalam permintaan jaringan apa pun.
  3. URL fragment (tempat kunci berada) tidak pernah sampai ke server.
  4. Data sisi server saja tidak dapat merekonstruksi rahasia.

Jika keempat hal itu terpenuhi, arsitektur ini adalah zero-knowledge secara konstruksi — tidak perlu bahasa pemasaran.

Pengujian 1Plaintext tidak pernah melewati jaringan

  1. Buka vaulted.fyi.
  2. Buka DevTools dan pindah ke tab Network. Filter berdasarkan Fetch/XHR.
  3. Ketik string yang mudah dikenali di kolom rahasia — misalnya CANARY-12345.
  4. Klik Create.

Kamu akan melihat satu POST ke /api/secrets. Klik dan lihat tab Payload.

Body berisi kolom ciphertext dan kolom iv. Keduanya adalah blob yang di-encode base64url. Cari payload untuk CANARY-12345 — itu tidak ada. Plaintext dienkripsi di browser sebelum permintaan dikirim.

Jika ingin lebih teliti, ubah throttling jaringan ke “Slow 3G” dan ulangi. Ciphertext masih terlihat seperti noise; plaintext masih tidak ada di mana-mana.

Pengujian 2Kunci juga tidak pernah melewati jaringan

Setelah membuat rahasia, Vaulted menampilkan link berbagi. Tampilannya seperti ini:

https://vaulted.fyi/s/abc123#dGhpcyBpcyBhIGtleQ
                              ^^^^^^^^^^^^^^^^^^^^
                              encryption key (base64url)

Bagian setelah # adalah URL fragment. Sesuai RFC 3986, browser memproses fragment secara lokal — fragment tidak pernah muncul di baris permintaan HTTP, header, atau referrer.

Untuk membuktikannya:

  1. Salin link berbagi.
  2. Buka di tab baru dengan tab Network DevTools terbuka.
  3. Temukan permintaan GET /s/abc123.
  4. Lihat tab Headers — URL permintaan lengkap, tanpa fragment.
  5. Lihat tab Request — tanpa fragment.
  6. Periksa document.referrer di halaman berikutnya — fragment dihapus.

Kunci yang dibutuhkan penerima untuk mendekripsi rahasia ada di URL, tetapi tetap di browsernya. Server melihat GET /s/abc123 dan tidak lebih dari itu.

Pengujian 3Server saja tidak bisa mendekripsi

Buka terminal dan curl rahasia secara langsung:

curl https://vaulted.fyi/api/secrets/abc123

Kamu akan mendapatkan JSON yang berisi ciphertext dan iv. Itulah seluruh state sisi server untuk rahasiamu.

Sekarang coba pahami. Tanpa kunci dari URL fragment, kamu tidak bisa. AES-256-GCM dengan kunci acak yang dihasilkan dengan benar secara praktis tidak dapat dibedakan dari noise acak. Dump database penuh dari server Vaulted hanya akan menghasilkan ini — blob terenkripsi dan metadata.

Inilah definisi literal zero-knowledge: server menyimpan data yang tidak bisa dibacanya.

Pengujian 4Enkripsi terjadi di JavaScript yang bisa kamu lihat

Vaulted menggunakan Web Crypto API, yang merupakan primitif browser — tidak ada WASM yang diobfuskasi atau modul native yang menyembunyikan proses tersebut. Kamu bisa menyaksikan enkripsi terjadi.

  1. Di DevTools, buka tab Sources.
  2. Cari crypto.subtle.encrypt (gunakan Cmd+Option+F untuk pencarian global).
  3. Pasang breakpoint pada baris yang memanggil crypto.subtle.encrypt.
  4. Picu pembuatan rahasia baru.
  5. Breakpoint terpicu. Periksa argumennya: kamu akan melihat plaintext-mu sebagai Uint8Array, kunci AES-GCM, dan IV acak yang baru.
  6. Langkahi panggilan tersebut. Hasilnya adalah ciphertext yang dikirim.

Kamu sekarang menyaksikan plaintext menjadi ciphertext, di browsermu, sebelum permintaan jaringan apa pun. Tidak ada jalur lain yang bisa dilalui data tersebut.

Apa yang ini buktikan

  • Tidak ada plaintext yang meninggalkan browser. Pengujian 1.
  • Tidak ada kunci yang meninggalkan browser. Pengujian 2.
  • Server tidak bisa mendekripsi dengan apa yang disimpannya. Pengujian 3.
  • Enkripsi nyata dan terjadi di sisi klien. Pengujian 4.

Itulah seluruh klaim zero-knowledge, didemonstrasikan pada sistem produksi yang berjalan dalam lima menit.

Apa yang ini tidak buktikan

Verifikasi adalah pekerjaan yang jujur — ada baiknya bersikap jelas tentang batasannya.

  • Pengujian membuktikan perilaku saat ini. Perubahan kode di masa depan bisa merusak properti ini. Jika kamu membutuhkan jaminan berkelanjutan, berlangganan changelog dan jalankan ulang pengujian secara berkala.
  • Pengujian tidak melindungi dari perangkatmu sendiri. Keylogger atau ekstensi browser berbahaya dapat membaca plaintext setelah dekripsi. Itu di luar kendali aplikasi web mana pun.
  • Pengujian mengasumsikan JavaScript yang kamu jalankan adalah JavaScript yang disajikan Vaulted. Penyerang yang menargetkan dan berhasil mengkompromikan CDN dapat menyajikan bundle berbeda ke satu pengguna. Subresource Integrity dan reproducible build mengurangi risiko ini; lihat threat model kami untuk detail lengkap.

Lebih lanjut

Jika ingin menggali lebih dalam:

Argumen terkuat untuk alat keamanan bukan pemasarannya. Melainkan bahwa kamu bisa membongkarnya dan memastikan alat tersebut melakukan apa yang dikatakannya. Vaulted dibangun agar kamu bisa melakukan itu.

Pertanyaan yang sering diajukan

Ada pertanyaan atau menemukan sesuatu yang aneh? Email [email protected] — kami mempublikasikan kebijakan pengungkapan yang bertanggung jawab dan merespons dalam 48 jam.