24 Kata: Apa itu Identitas Kriptografi
Identitas kriptografi bukanlah kata sandi: tidak ada server yang menyimpannya dan tidak dapat dipulihkan. Penjelasan didaktis tentang mekanisme BIP39, mengapa tepat dua puluh empat kata, dan beban nyata apa yang dipikul oleh mereka yang memilikinya.
Perbedaan Antara Kata Sandi dan Identitas
Sebuah kata sandi, dalam model internet klasik, adalah bukti identitas. Pengguna memiliki identitas — nama, surel, nomor pelanggan — dan, untuk membuktikan kepada server bahwa dia adalah orang yang diakui, dia menyajikan kata sandi yang dibandingkan oleh server dengan sidik jari yang disimpan. Jika sidik jari cocok, server memberikan sesi. Jika kata sandi hilang, pengguna tetap pengguna yang sama; yang hilang adalah buktinya, dan terdapat prosedur pemulihan — email ke alamat terdaftar, pertanyaan keamanan — untuk memulihkannya.
Identitas kriptografik berfungsi dengan cara lain. Ia, pertama-tama, merupakan rahasia matematis yang lengkap pada dirinya sendiri, bukan kredensial yang dibandingkan seseorang dengan sidik jari yang disimpan. Tidak peduli di mana ia berada — di atas kertas, di perangkat, bahkan di server orang lain —: identitas ada karena matematikanya, bukan karena siapa yang memvalidasinya. Di sini muncul properti yang mirip dengan yang kita lihat di 'Apa sebenarnya SHA-256 itu': kepemilikan tidak dibuktikan dengan menunjukkan rahasia, tetapi dengan menggunakannya untuk menandatangani. Tanda tangan yang dihasilkan dengan cara ini dapat diverifikasi oleh siapa saja dengan nilai publik yang diturunkan secara matematis dari rahasia itu sendiri, tanpa perlu mengetahui rahasianya, dan tanpa mediasi pihak ketiga dalam verifikasi. Siapa yang memiliki rahasia, ia adalah identitas; siapa yang kehilangannya, ia berhenti menjadi identitas. Keputusannya bersifat kategoris: tidak ada seorang pun yang dapat dimintai untuk mengembalikan identitas Anda. Orang itu tidak ada, karena ia tidak pernah memilikinya sejak awal.
Apa yang Direpresentasikan oleh Dua Puluh Empat Kata
Identitas kriptografi biasanya direpresentasikan oleh rahasia matematis sebesar tiga puluh dua bita —dua ratus lima puluh enam bit. Sebuah angka yang sulit diingat dan lebih sulit lagi untuk dituliskan tanpa kesalahan. Industri kriptografi memecahkan masalah ini pada tahun 2013 dengan standar kecil dan elegan yang disebut BIP39: sebuah cara untuk merepresentasikan dua ratus lima puluh enam bit tersebut sebagai urutan dua puluh empat kata yang diambil dari daftar resmi dua ribu empat puluh delapan kata. Aritmetika di baliknya sangat pas; mereka yang ingin melihatnya secara detail dapat menemukannya di catatan samping.
Perhitungan tersebut bukan hiasan. Jika seseorang menuliskan dua puluh tiga kata dengan benar dan salah pada kata kedua puluh empat, checksum akan mendeteksinya: perangkat lunak akan memberi tahu mereka "urutan ini tidak valid". Jika seseorang menuliskan kedua puluh empat kata dengan benar, perangkat lunak akan menurunkan identitas yang sama tanpa ambiguitas. Pemilihan daftar kata juga disengaja: kata-kata dalam kosakata BIP39 pendek, berbeda satu sama lain, tanpa tanda diakritik, dipilih untuk meminimalkan kebingungan fonetik dan ejaan. Ini adalah kosakata yang dirancang untuk diingat, ditulis, dan didektekan oleh manusia tanpa kehilangan data.
Dari frasa ke kunci
Dua puluh empat kata tersebut bukanlah kunci kriptografi yang menandatangani pesan. Kata-kata itu adalah representasi yang dapat dipulihkan dari entropi asli yang, melalui proses deterministik yang disebut PBKDF2, diubah menjadi benih (seed) enam puluh empat byte. Dari benih itu diturunkan, juga secara deterministik, kunci kriptografi konkret yang digunakan pengguna: kunci pribadi untuk menandatangani dan kunci publik terkait yang dipublikasikan untuk memverifikasi tanda tangan. Mekanisme yang sama dalam sistem yang berbeda: mata uang kripto menggunakan kurva secp256k1; protokol Signal dan banyak sistem modern menggunakan Ed25519 pada kurva Curve25519. Untuk kurva konkret seperti Ed25519, standar BIP32 dan SLIP-0010 mengambil benih enam puluh empat byte itu dan menurunkan secara deterministik tiga puluh dua byte yang membentuk kunci tanda tangan efektif — tiga puluh dua byte yang sama dengan contoh kode di bagian selanjutnya dimulai.
Ini adalah cara standar di mana seluruh industri menyajikan mekanisme tersebut kepada pengguna —dompet mata uang kripto, pengelola identitas terdesentralisasi, Signal dalam bagian identitas persistennya, Solo2 di antaranya—: pengguna, dalam praktiknya, tidak pernah melihat benih atau kunci turunannya. Ia melihat dua puluh empat kata saat membuat identitasnya dan, secara opsional, mencatatnya di atas kertas. Kata-kata itu kemudian berpindah antar perangkatnya ketika ia ingin memigrasikan identitas: ia memasukkannya ke dalam aplikasi baru, aplikasi menurunkan benih yang sama, kunci yang sama, identitas yang sama. Ini adalah mekanisme yang portabel, solid secara kriptografi dan, dalam batas wajar, mudah diingat.
Cara menandatangani dengan kunci (sentuhan Zig)
Di Zig, setelah Anda memiliki benih tiga puluh dua byte yang diturunkan dari dua puluh empat kata, menandatangani pesan dengan Ed25519 hanya membutuhkan beberapa baris saja:
const std = @import("std");
const Ed25519 = std.crypto.sign.Ed25519;
// 'semilla' son los 32 bytes derivados de las 24 palabras.
const par = Ed25519.KeyPair.create(semilla);
// Firmar un mensaje con la clave privada:
const mensaje = "Este mensaje lo escribí yo.";
const firma = try par.sign(mensaje, null);
// Cualquiera con la clave pública del par puede verificar:
try Ed25519.Signature.verify(firma, mensaje, par.public_key);
Operasi penandatanganan menghasilkan enam puluh empat byte —disebut tanda tangan— yang hanya dapat dihasilkan dari kunci pribadi yang sesuai. Verifikasi bersifat publik: siapa pun dengan kunci publik dapat memeriksa apakah tanda tangan sesuai dengan pesan. Tanpa kunci pribadi, tidak ada yang bisa menghasilkan tanda tangan yang valid untuk pesan tersebut; dengan kunci publik, semua orang dapat mendeteksi apakah tanda tangan itu valid. Asimetri inilah yang memungkinkan penandatangan untuk membuktikan kepemilikan tanpa membagikan rahasianya.
Contoh sebelumnya adalah versi manual minimal. Dalam kode Solo2 yang sebenarnya, rangkaian ini melewati dua file, satu di JavaScript yang berada di browser pengguna dan merekonstruksi entropi dari dua puluh empat kata, satu lagi di Zig di dalam pustaka zcatcrypto yang mengambil entropi tersebut dan menurunkan kunci kriptografi spesifik. Dimulai dari sisi browser:
// solo2/web-app/js/lib/bip39.js
async function mnemonicToEntropy(mnemonic, lang) {
const validation = await validateMnemonic(mnemonic, lang);
if (!validation.valid) {
return { entropy: null, valid: false, error: validation.error };
}
const wordlist = WORDLISTS[lang || 'en'];
const words = mnemonic.trim().split(/\s+/);
// Cada palabra aporta 11 bits (su índice en la lista de 2048).
let bits = '';
for (let i = 0; i < words.length; i++) {
bits += wordlist.indexOf(words[i]).toString(2).padStart(11, '0');
}
// 24 palabras = 264 bits. Los primeros 256 son la entropía.
const entropyBytes = new Uint8Array(32);
for (let j = 0; j < 32; j++) {
entropyBytes[j] = parseInt(bits.slice(j * 8, (j + 1) * 8), 2);
}
return { entropy: entropyBytes, valid: true };
}
Tiga puluh dua byte entropi tersebut, bersama dengan tiga puluh dua byte lainnya yang diturunkan pada langkah yang sama, dikirim ke modul WebAssembly Zig yang menghasilkan kunci Ed25519 yang sebenarnya. Fungsi lengkapnya, dengan pembersihan memori akhirnya, muat dalam satu layar:
// zcatcrypto/wasm/bindings/identity.zig
const Ed25519 = std.crypto.sign.Ed25519;
const X25519 = std.crypto.dh.X25519;
export fn identity_generate() ?*IdentityHandle {
var seed: [64]u8 = undefined;
if (!common.getRandomBytes(&seed)) return null;
const handle = common.wasm_allocator.create(IdentityHandle) catch return null;
// Bytes 0..31: semilla determinista del par Ed25519 (firma).
const sign_kp = Ed25519.KeyPair.generateDeterministic(seed[0..32].*) catch {
common.wasm_allocator.destroy(handle);
return null;
};
handle.sign_secret = sign_kp.secret_key.toBytes();
handle.sign_public = sign_kp.public_key.toBytes();
// Bytes 32..63: secreto X25519 (para acordar claves de cifrado con el otro).
handle.exchange_secret = seed[32..64].*;
handle.exchange_public = X25519.recoverPublicKey(handle.exchange_secret) catch {
common.wasm_allocator.destroy(handle);
return null;
};
@memset(&seed, 0); // Borra la semilla de la memoria.
return handle;
}
Dua detail layak dicatat. Pertama: seed yang sama selalu menghasilkan pasangan kunci yang sama — hal inilah yang memungkinkan pemulihan identitas dengan memasukkan dua puluh empat kata ke dalam perangkat baru. Kedua: seed dihapus secara eksplisit dari memori pada baris terakhir. Setelah titik itu, bahkan fungsi itu sendiri tidak dapat merekonstruksi kunci; kata-kata pengguna akan menjadi satu-satunya sumber.
Sangat tepat untuk berhenti sejenak di sini, karena seluruh rangkaian dapat disalahartikan dalam pandangan sekilas dengan primitif lain dari ketiganya: hash. Ini bukan itu. Hash adalah fungsi unik yang mengompresi — banyak byte masuk, jejak pendek keluar, di situlah jalannya berakhir. Identitas kriptografi adalah pasangan matematika yang saling melengkapi: rahasia tetap ada dan menandatangani; rekan publiknya dipublikasikan dan memverifikasi. Di mana hash meruntuhkan informasi dalam satu arah, identitas membangun asimetri antara dua bagian. Hash membuktikan apa yang dikatakan; identitas membuktikan siapa yang mengatakannya.
Apa yang bukan merupakan frasa
Tiga kesalahpahaman umum perlu diluruskan. Frasa bukanlah kata sandi dalam arti yang sebenarnya: ia tidak dibandingkan dengan sidik jari yang disimpan di server; ia dimasukkan ke dalam perangkat pengguna untuk merekonstruksi identitas secara matematis. Frasa tidak dapat dipulihkan: jika hilang, tidak ada orang yang bisa dimintai bantuan; jika digandakan, identitasnya juga ikut digandakan. Frasa bukanlah kredensial yang dapat dipisahkan dari identitas: frasa adalah identitas. Siapa pun yang memilikinya dapat bertindak atas nama identitas tersebut, tanpa izin tambahan, tanpa proses otorisasi, tanpa kemungkinan pemulihan.
Properti ketiga inilah yang mengubah bobot masalah. Kata sandi yang hilang adalah gangguan administratif. Identitas kriptografik yang hilang adalah identitas itu sendiri. Kertas dengan frasa yang ditemukan oleh pihak ketiga bukanlah risiko pencurian akun: itu adalah penyerahan seluruh identitas. Janji sistem — bahwa tidak ada yang dapat mencabut identitas Anda atau memblokir Anda secara sewenang-wenang — datang bersama dengan tanggung jawab yang tak terpisahkan untuk menjadi satu-satunya penjaga atas sesuatu yang tidak dapat dipulihkan oleh siapa pun untuk Anda.
Janji dan bobot
Model identitas kriptografi biasanya disebut sebagai berdaulat sendiri —self-sovereign dalam literatur bahasa Inggris—. Pemilihan kata ini disengaja dan menggambarkan kondisinya dengan cukup akurat. Pengguna berdaulat atas identitasnya dalam arti yang hampir mirip dengan abad pertengahan: tidak ada raja, penerbit, atau otoritas pusat yang memberikannya; tidak satu pun dari mereka dapat menariknya kembali. Namun, seperti raja abad pertengahan, pengguna memikul seluruh konsekuensi dari kesalahannya: tidak ada bupati yang akan mengambil keputusan menggantikannya jika ia kehilangan segelnya.
Pilihan antara identitas yang dikelola oleh pihak ketiga dan identitas berdaulat sendiri tidak memiliki jawaban benar yang universal. Untuk akun forum yang tidak penting, identitas yang dikelola mungkin sebanding dengan risikonya. Namun untuk identitas profesional yang menandatangani dokumen yang mengikat secara hukum, untuk identitas ekonomi yang menjaga tabungan sendiri, untuk identitas komunikasi profesional dengan klien yang telah mempercayakan informasi sensitif, masalahnya berubah. Di sana pertanyaannya bukan lagi «apakah nyaman?» dan menjadi «siapa, selain saya, yang memiliki kekuasaan untuk bertindak atas nama saya, dan dalam keadaan apa?».
Di mana mekanisme ini muncul dalam sistem nyata
BIP39 lahir di dunia Bitcoin pada tahun 2013 dan menyebar dengan cepat ke seluruh ekosistem mata uang kripto: dompet serius mana pun saat ini menerima frasa BIP39 yang terdiri dari dua belas atau dua puluh empat kata sebagai cadangan identitas ekonomi pemiliknya. Di luar mata uang kripto, konsep dasar yang sama — pasangan kriptografi yang membuktikan kepengarangan tanpa perantara — muncul di sistem lain dengan sintaksis yang berbeda. Kunci SSH yang digunakan administrator sistem untuk mengakses server mereka adalah kasus klasik: kunci privat yang disimpan administrator di mesin mereka dan kunci publik yang disalin ke setiap server; tidak ada entitas yang sebanding dengan layanan terpusat yang mengintervensi. Protokol Signal menggunakan Ed25519 dengan materi kunci persisten pada perangkat; eIDAS Eropa, dalam bagian tanda tangan terkualifikasi, bertumpu pada prinsip kriptografi yang sama, dengan perbedaan bahwa kunci disimpan oleh penyedia layanan kepercayaan terkualifikasi, bukan oleh pengguna.
Solo2, platform penerbit publikasi ini, menggunakan frasa BIP39 dua puluh empat kata sebagai identitas setiap pengguna. Pengguna, saat membuat akun, melihat kata-kata tersebut sekali. Kata-kata itu tidak disimpan di server Solo2 mana pun atau milik siapa pun: jika pengguna mencatat dan menjaganya, mereka mempertahankan identitas mereka selamanya. Jika mereka kehilangannya, mereka kehilangannya. Ini adalah konsekuensi logis dari arsitektur tanpa operator di tengah: jika Solo2 dapat mengembalikan identitas kepada pengguna yang kehilangannya, ia juga dapat memberikannya kepada siapa pun yang menekan Solo2 untuk memberikannya.
Segel tanpa kanselir
Seorang raja abad pertengahan memerintah melalui segelnya, tetapi ia tidak memerintah hanya dengan itu: di belakangnya ada sebuah kanselir, ahli Taurat yang menyimpan catatan, sebuah istana yang mampu mengenali pemalsuan dan merekonstruksi, dengan saksi dan memori institusional, apa yang diragukan oleh segel yang hilang atau dicuri. Barangsiapa yang hari ini menjaga dua puluh empat kata memiliki segel itu dan tidak ada yang lain: tidak ada kanselir, tidak ada ahli Taurat, tidak ada memori institusional yang dapat menyelesaikan perselisihan atau memulihkan apa yang hilang. Kertas yang dilipat di laci, pelat logam yang diukir, amplop yang disegel dalam deposit notaris hanyalah upaya, buatan tangan dan tentu saja tidak lengkap, untuk membuat kanselir sendiri dengan alat-alat individu swasta.
Seorang raja tanpa kanselir memerintah persis seperti raja yang memilikinya —sampai hari ia kehilangan segelnya, dan pada hari itu ia berhenti memerintah tanpa ada orang yang tersisa untuk mengajukan banding.
Artikel ini menutup trio konseptual yang membuka siklus — hash, enkripsi, identitas —. Ketiga ide tersebut dibangun satu sama lain: hash memberikan sidik jari yang tidak dapat diubah, enkripsi memberikan kerahasiaan tanpa pihak ketiga yang tepercaya, identitas memberikan kepengarangan tanpa pihak ketiga yang memberikan. Ketiganya berbagi properti yang juga bukan ideologis: mereka mentransfer, dari pihak yang mengelola layanan ke pihak yang menggunakannya, kemampuan teknis yang secara tradisional berada di tangan operator. Mereka juga mentransfer tanggung jawab bersamanya. Berbicara jujur tentang salah satu dari ketiganya mengharuskan kita untuk juga berbicara tentang dua lainnya.
Sumber dan bacaan lebih lanjut
- Palatinus, M.; Rusnak, P.; Voisine, A.; Bowe, S. — BIP-0039: Mnemonic code for generating deterministic keys, proposal peningkatan Bitcoin tahun 2013. Standar de facto untuk frasa pemulihan dalam industri kripto.
- RFC 8032 — Edwards-Curve Digital Signature Algorithm (EdDSA), termasuk Ed25519. IETF, Januari 2017. Spesifikasi normatif dari skema tanda tangan yang digunakan di sebagian besar industri kontemporer.
- RFC 2898 — PKCS #5: Password-Based Cryptography Specification, versi 2.0. IETF, September 2000. Mendefinisikan algoritma PBKDF2 yang digunakan dalam derivasi BIP39 dari frasa ke seed.
- Regulasi (EU) 910/2014 (eIDAS) dan evolusinya oleh Regulasi (EU) 2024/1183 (eIDAS 2) — kerangka kerja Eropa untuk identitas elektronik dan tanda tangan terkualifikasi. Rezim yang berbeda dari kedaulatan mandiri, tetapi secara konseptual didukung oleh primitif kriptografi yang sama.
- Allen, C. — The Path to Self-Sovereign Identity (2016). Teks kanonik tentang prinsip dan komitmen model kedaulatan mandiri, sebelumnya tetapi relevan untuk memahami keluarga solusi kontemporer.