8 случайных цифр. 100,000,000 возможных комбинаций. Каждая цифра независима.
Числовой PIN-код — одна из простейших структур в комбинаторике. Каждая позиция содержит одну цифру от 0 до 9, выбранную независимо от всех остальных позиций. Таким образом, 8-значный PIN-код имеет 100,000,000 возможных значений, и по-настоящему случайный генератор присваивает каждому из них абсолютно одинаковую вероятность. Цифра на первой позиции ничего не говорит о цифре на второй. У PIN-кода нет внутренней логики, нет закономерности, нет структуры, которую можно было бы использовать.
Теория информации измеряет случайность в битах. Каждая десятичная цифра несёт log2(10) ≈ 3,322 бита энтропии, поэтому 8-значный PIN-код содержит 26.6 бит. Для сравнения: пароль из 16 символов, составленный из 95 печатных символов ASCII, обеспечивает примерно 105 бит. PIN-код намеренно проще, потому что опирается на принципиально иную модель безопасности: ограничение частоты попыток.
Банкомат допускает три последовательные неверные попытки, после чего забирает карту. Смартфон вводит нарастающие задержки после ошибок. При таких ограничениях перебор 100,000,000 комбинаций становится практически невыполнимым. Безопасность PIN-кода заключена в замке, а случайность не позволяет злоумышленнику угадывать разумно.
Четырёхзначный PIN-код берёт начало в 1967 году, когда шотландский изобретатель Джон Шеперд-Баррон разработал первый банкомат для банка Barclays в Лондоне. Его первоначальный проект предусматривал шесть цифр. Его жена Кэролайн протестировала прототип и убедила его, что четыре цифры — это всё, что она может надёжно запомнить под лёгким давлением очереди за спиной. Этот семейный разговор сформировал глобальный стандарт безопасности, который существует уже более пятидесяти лет. Четыре цифры по-прежнему остаются стандартом для банкоматов, экранов блокировки телефонов и платёжных терминалов по всему миру.
Ник Берри из DataGenetics проанализировал 3,4 миллиона утёкших четырёхзначных PIN-кодов и обнаружил тревожную концентрацию. Одна только последовательность 1234 составляла 10,7% всех PIN-кодов в выборке. Двадцать самых распространённых PIN-кодов покрывали 27% общей совокупности. Годы рождения в формате 19xx, повторяющиеся цифры (1111, 0000) и клавиатурные паттерны (2580 — средний столбец цифровой клавиатуры) доминировали в списке.
Злоумышленник, который первым делом попробует сотню самых распространённых PIN-кодов, может разблокировать примерно одну из трёх учётных записей с PIN-кодами, выбранными человеком. Случайно сгенерированный PIN-код полностью устраняет эту уязвимость. Каждое из 100,000,000 значений становится равновероятным, включая 1234 и 0000. Злоумышленник не получает преимущества от перебора популярных комбинаций, потому что PIN-код не был выбран склонным к шаблонам человеческим разумом.
Каждая цифра на этой странице генерируется с помощью crypto.getRandomValues() — Web Cryptography API, специфицированного W3C и встроенного в каждый современный браузер. Источником энтропии служат физические процессы аппаратного уровня вашего устройства: тепловой шум, электрические джиттеры и временны́е вариации, которые квантовая механика доказывает принципиально непредсказуемыми. Реализация использует выборку с отклонением для устранения смещения по модулю, гарантируя математически одинаковую вероятность для каждой цифры от 0 до 9.
PIN-код никогда не передаётся по сети. Он существует только в памяти вашего браузера и на вашем экране. Сервер доставил эту страницу и завершил работу. Ваше устройство создало секрет.
Генерация PIN-кодов — наглядная точка входа в комбинаторику. Спросите учеников: сколько существует четырёхзначных PIN-кодов? Большинство называет число значительно меньше 10 000. Формула 104 = 10 000 вводит возведение в степень как инструмент подсчёта. Затем добавьте ограничения: если первая цифра не может быть нулём, сколько остаётся? (9 000.) Если ни одна цифра не может повторяться? (10 × 9 × 8 × 7 = 5 040.) Эти ограничения последовательно сужают пространство, иллюстрируя разницу между размещениями с повторениями и без.
Для групповой работы попросите каждого ученика перейти на /pin/6 и сгенерировать шестизначный PIN-код. Спросите: какова вероятность того, что у двоих учеников из класса в 30 человек совпадёт PIN-код? Ответ (приблизительно 0,04%) удивляет учеников, ожидающих совпадений. Сравните это с парадоксом дней рождения, где 23 человека, выбирающие из всего 365 вариантов, преодолевают порог вероятности в 50%. Сравнение наглядно показывает, как размер пространства возможностей влияет на частоту совпадений. Инструмент не требует учётных записей и не хранит данные учеников.
Каждый PIN-код, сгенерированный на этой странице, остаётся внутри вашего браузера. Сервер доставляет шаблон страницы. Криптографический генератор случайных чисел вашего устройства создаёт каждую цифру. Ни один PIN-код не попадает в серверные журналы, аналитику или сетевые запросы. История генерации хранится в localStorage только на вашем устройстве.
Раздел «Поделиться» ниже передаёт URL инструмента, а не сгенерированный PIN-код. Отправка ссылки даёт получателю тот же генератор. Его устройство создаёт совершенно независимый результат из собственного источника энтропии. URL несёт инструмент. Ваше устройство несёт секрет.
URL полностью определяет длину PIN-кода:
Отправьте ссылку. Получатели сгенерируют собственный независимый PIN-код на своём устройстве.
Ежедневное вдохновение
Работы, отобранные жюри A' Design Award, представленные каждое утро.