Splync использует два идентификатора для важных ID
В базе данных Splync каждый пользователь и проект имеют два идентификатора: 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 — быть простым, надежным и безопасным приложением для отслеживания бюджета. За видимым интерфейсом мы продолжаем совершенствовать нашу архитектуру, чтобы все оставалось плавным, безопасным и умным.