Splync Gunakan Dua Pengenal untuk ID Sensitif
Dalam pangkalan data Splync, setiap pengguna — dan setiap projek — dikenal pasti dengan dua ID berbeza: UUID dan integer auto-increment.
Integer auto-increment ialah yang paling biasa dikenali — ia hanya penghitung: 1, 2, 3, dan seterusnya. Splync menggunakan integer ini dalam pangkalan data pelayan untuk menyusun hampir setiap jadual kerana ia mudah, cepat, dan cekap untuk penyambungan. Namun, kami tidak pernah mendedahkan nombor dalaman ini kepada aplikasi. Contohnya, jika anda adalah pengguna ke-42 yang mendaftar, ID dalaman anda dalam pangkalan data ialah 42. Tetapi aplikasi iOS anda tidak akan melihat "42." Sebaliknya, aplikasi menggunakan UUID untuk mewakili anda. Kami guna pendekatan yang sama untuk projek — ID projek mungkin "7" dalam pangkalan data, tetapi aplikasi sentiasa merujuknya menggunakan UUID panjang.
Apa Itu UUID
UUID bermaksud Universally Unique Identifier. Splync menggunakan UUID versi 4, varian 1, sesuai dengan RFC 4122 — salah satu standard yang paling diterima secara meluas. Ia adalah rentetan yang dijana secara rawak, yang kelihatan seperti 949ca11c-a6ed-48a3-b40a-fa9727494917. UUID biasanya ditulis sebagai 32 aksara heksadesimal yang dibahagikan kepada lima bahagian dipisahkan oleh sengkang. Ia direka untuk unik secara global, bermaksud ia tidak akan bertembung walaupun merentasi pelayan atau pangkalan data yang berbeza. Secara matematik, terdapat kira-kira 16^32 = 2^128 kombinasi yang mungkin. Walau bagaimanapun, kerana enam bit dikhaskan untuk menunjukkan varian dan versi, jumlah keseluruhan UUID versi-4, varian-1 yang berbeza adalah kira-kira 2^122, atau kira-kira 5.3 x 10^36 — satu nombor yang sangat besar menjamin keunikan praktikal.
Betapa Kecilnya 1 / 5,300,000,000,000,000,000,000,000,000,000,000,000
Setiap pasangan UUIDv4 mempunyai kira-kira 1 dalam 5.3 × 10^36 peluang untuk sepadan. Angka itu sangat kecil sehingga hampir tidak wujud dalam imaginasi manusia. Untuk membayangkannya, bayangkan melempar 47 dadu sekaligus. Peluang mendapatkan semua satu — setiap dadu menunjukkan “1” — adalah kira-kira 1 dalam 6^47, atau lebih kurang 1 dalam 3.7 × 10^36. Itu adalah magnitud yang sama dengan pertembungan UUID. Sekarang, bayangkan setiap orang di Bumi — kira-kira lapan bilion kita — melemparkan 47 dadu tersebut setiap milisaat selama satu trilion tahun. Itu kira-kira 2.5 × 10^32 percubaan keseluruhan. Walaupun selepas semua itu, peluang seseorang, di mana-mana, mendapatkan 47 satu sekaligus masih hanya satu dalam sepuluh ribu. Itulah betapa mustahilnya untuk dua UUIDv4 bertembung. Ia bukan "jarang." Ia amat tidak masuk akal — jenis kebetulan yang boleh membuat ahli matematik menjatuhkan kopi mereka dan memeriksa alam semesta untuk kesilapan.
Adakah Mudah Menghasilkan UUID
Pada pandangan pertama, menghasilkan UUID mungkin kelihatan mudah — lagipun, ia hanya rentetan alfanumerik yang kelihatan rawak. Tetapi cuba menulis sendiri dengan pen dan kertas. Anda boleh menulis 36 aksara, tentu, tetapi jika anda ulangi latihan ini ribuan kali, pola yang jelas akan muncul. Mungkin anda gemar nombor tertentu seperti 3 atau 8, dan jarang menggunakan huruf seperti x. Komputer dapat mengesan kecenderungan tersebut dengan serta-merta. Penggodam jahat boleh menganalisis tabiat anda dan mengecilkan rentetan "rahsia" rawak anda dalam satu hari. Kemudian, bagaimana jika anda juga beralih kepada komputer dan memanggil rand(), fungsi rawak klasik, untuk menghasilkan setiap digit. Itu lebih baik — tetapi tidak cukup baik. Banyak penjana nombor "rawak" dalam persekitaran pengaturcaraan biasa adalah pseudorandom, bermaksud mereka mengikuti urutan matematik yang boleh diramal bermula dari benih dalaman, yang biasanya berdasarkan masa sistem. Jika seseorang menemui atau meneka benih itu, mereka boleh menghasilkan semula setiap nilai yang pernah dihasilkan oleh penjana anda.
Seberapa Rawak Sempurna UUID
Keacakan sempurna sebenarnya tidak wujud — seperti dadu sempurna tidak wujud, atau balingan dadu yang betul-betul rawak tidak wujud. Setiap proses fizikal atau digital mengikuti beberapa peraturan asas. Namun, ahli matematik dan jurutera telah menghabiskan dekad merancang algoritma yang mendekati keacakan sebenar. Apabila Splync mencipta UUID versi-4 yang baru, ia tidak sekadar "memilih nombor secara rawak" seperti melempar dadu. Ia bertanya kepada sistem operasi untuk jejak kecil ketidakpastian — contohnya, saat tepat CPU anda menyelesaikan satu tugas, bunyi elektrik lemah dalam perkakasan, atau turun naik masa latar belakang dalam memori. Fragmen entropi ini dikumpulkan dan dicampurkan ke dalam 128 bit data — satu urutan panjang sifar dan satu. Hasilnya ialah kod yang hampir mustahil diteka atau diulang oleh pengguna aplikasi atau penggodam jahat yang berpotensi.
Pendekatan Pengenal Dua Kali Splync
Splync menggunakan UUID untuk pengenal sensitif seperti ID pengguna dan ID projek, kerana ianya sangat rawak dan selamat.
Pada masa yang sama, dalam pelayannya, Splync menukar UUID tersebut ke integer auto-increment untuk carian yang lebih cepat dan analisis pada set data besar. Pendekatan pengenal dua kali ini mencapai keseimbangan antara keselamatan dan kemudahan — privasi luaran dengan prestasi dalaman. Matlamat Splync adalah untuk menjadi aplikasi pengesanan bajet yang bebas tekanan, ringkas, dan selamat. Di sebalik UI yang kelihatan, kami terus memperhalusi seni bina kami untuk memastikan semuanya berjalan lancar, selamat, dan bijak secara senyap.