Splync використовує два ідентифікатори для чутливих ID
У базі даних Splync кожен користувач — і кожен проєкт — ідентифікуються двома різними ID: UUID та автоінкрементованим числом. Автоінкрементоване число — це знайомий багатьом лічильник: 1, 2, 3 і так далі. Splync використовує ці числа у внутрішній базі даних сервера для організації майже всіх таблиць, оскільки вони прості, швидкі та ефективні для з’єднань. Однак ми ніколи не показуємо ці внутрішні номери в додатку. Наприклад, якщо ви були 42-м користувачем, який зареєструвався, ваш внутрішній ID у базі даних буде 42. Але ваш iOS-додаток ніколи не побачить це "42". Замість цього додаток використовує UUID для вашої ідентифікації. Ми застосовуємо такий самий підхід до проєктів — ID проєкту може бути "7" у базі даних, але додаток завжди посилається на нього за допомогою довгого UUID.
Що таке UUID
UUID означає Універсально Унікальний Ідентифікатор. Splync використовує UUID версії 4, варіанту 1, що відповідає RFC 4122 — одному з найпоширеніших стандартів. Це випадковий рядок, який виглядає як 949ca11c-a6ed-48a3-b40a-fa9727494917. Зазвичай UUID записується як 32 шістнадцяткові символи, розділені на п’ять частин, розділених дефісами. Він розроблений, щоб бути глобально унікальним, тобто не буде збігів навіть на різних серверах або базах даних. Математично існує близько 16^32 = 2^128 можливих комбінацій. Проте, оскільки шість біт зарезервовано для вказівки варіанту та версії, загальна кількість унікальних UUID версії 4, варіанту 1 приблизно дорівнює 2^122, або близько 5,3 x 10^36 — астрономічно велике число, яке забезпечує практичну унікальність.
Наскільки малим є 1 / 5,300,000,000,000,000,000,000,000,000,000,000,000
Кожна пара UUIDv4 має шанс збігу приблизно 1 на 5,3 × 10^36. Це число настільки мале, що його майже неможливо уявити. Уявіть, що ви кидаєте 47 кісток одночасно. Ймовірність отримати всі одиниці — кожна кістка показує "1" — це приблизно 1 з 6^47, або близько 1 з 3,7 × 10^36. Це та ж сама величина, що й зіткнення UUID. А тепер уявіть, що кожна людина на Землі — близько восьми мільярдів нас — кидає ті 47 кісток кожну мілісекунду протягом трильйона років. Це близько 2,5 × 10^32 загальних спроб. Навіть після цього всього ймовірність того, що хтось, десь, отримає 47 одиниць одночасно, все ще буде тільки один до десяти тисяч. Ось наскільки малоймовірним є збіг двох UUIDv4. Це не "рідкість". Це космічно абсурдно — така випадковість, що змусить математиків упустити каву і перевірити всесвіт на наявність помилок.
Чи легко згенерувати UUID
На перший погляд може здатися, що генерація UUID проста — зрештою, це просто випадковий на вигляд альфанумеричний рядок. Але спробуйте написати його самостійно ручкою на папері. Ви можете записати 36 символів, звичайно, але якщо повторите цю вправу тисячі разів, з'являться чіткі закономірності. Можливо, ви надаєте перевагу певним цифрам, таким як 3 або 8, і рідко використовуєте літери, такі як x. Комп’ютер може миттєво виявити ці упередження. Зловмисний хакер міг би проаналізувати ваші звички і звузити ваше "випадкове" секретне число протягом дня. А що, якщо ви також звернетеся до комп’ютера і викличете rand(), класичну випадкову функцію, для генерації кожної цифри. Це краще — але недостатньо добре. Багато "випадкових" генераторів чисел у поширених програмних середовищах є псевдовипадковими, тобто вони слідують передбачуваній математичній послідовності, починаючи з внутрішнього насіння, яке зазвичай базується на системному часі. Якщо хтось виявить або вгадає це насіння, він зможе відтворити кожне значення, яке ваш генератор колись створив.
Наскільки досконало випадковий UUID
Ідеальної випадковості не існує — так само, як не існує ідеального кубика або ідеального випадкового кидка кістками. Кожний фізичний або цифровий процес слідує певним основним правилам. Проте, математики та інженери десятиліттями розробляли алгоритми, які наблизилися якомога ближче до справжньої випадковості. Коли Splync створює новий UUID версії 4, він не просто "вибирає числа випадковим чином", як кидання кісток. Він звертається до операційної системи за крихітними відбитками непередбачуваності — наприклад, точним моментом, коли ваш процесор завершує завдання, слабким електричним шумом всередині обладнання або незначними коливаннями часу у пам’яті. Ці фрагменти ентропії збираються та змішуються у 128 біт даних — довгу послідовність одиниць та нулів. Результат — це код, який практично неможливо вгадати або повторити для користувачів додатка чи потенційних зловмисників.
Підхід Splync з подвійним ідентифікатором
Splync використовує UUID для чутливих ідентифікаторів, таких як ID користувачів та проєктів, оскільки вони надзвичайно випадкові та безпечні. Водночас, всередині сервера, Splync перетворює ці UUID у автоінкрементовані числа для швидшого пошуку та аналітики великих наборів даних. Цей підхід з подвійним ідентифікатором досягає балансу між безпекою та зручністю — зовнішньою конфіденційністю з внутрішньою продуктивністю. Ціль Splync — бути простим та безпечним додатком для відстеження бюджету без стресу. За видимим інтерфейсом ми продовжуємо вдосконалювати нашу архітектуру, щоб все залишалося гладким, безпечним і розумно непомітним.