Несмотря на важную роль PIN-кодов в мировой инфраструктуре, до сих пор не проводилось академических исследований о том, как, собственно, люди выбирают PIN-коды.

Исследователи из университета Кембриджа Sören Preibusch и Ross Anderson исправили ситуацию, опубликовав первый в мире количественный анализ сложности угадывания 4-циферного банковского PIN-кода.

Используя данные об утечках паролей из небанковских источников и онлайн анкетирование, учёные выяснили, что к выбору PIN-кодов пользователи относятся гораздо серьёзнее, чем к выбору паролей для веб-сайтов: большинство кодов содержат практически случайный набор цифр. Тем не менее, среди исходных данных присутствуют и простые комбинации, и дни рождения, — то есть, при некотором везении злоумышленник может просто угадать заветный код.

Отправной точкой исследования был набор 4-циферных последовательностей в паролях из базы RockYou (1.7 млн), и базы из 200 тысяч PIN-кодов от программы блокировки экрана iPhone (базу предоставил разработчик приложения Daniel Amitay). В графиках, построенных по этим данным, проступают интересные закономерности — даты, года, повторяющиеся цифры, и даже PIN-коды, заканчивающиеся на 69. На основе этих наблюдений учёные построили линейную регрессионную модель, которая оценивает популярность каждого PIN-кода в зависимости от 25 факторов, — например, является ли код датой в формате ДДММ, является ли он возрастающей последовательностью, и так далее. Этим общим условиям соответствуют 79% и 93% PIN-кодов в каждом из наборов.

Итак, пользователи выбирают 4-циферные коды на основе всего нескольких простых факторов. Если бы так выбирались и банковские PIN-коды, 8-9% из них можно было бы угадать всего за три попытки! Но, конечно, к банковским кодам люди относятся гораздо внимательнее. Ввиду отсутствия сколько-нибудь большого набора настоящих банковских данных, исследователи опросили более 1300 человек, чтобы оценить, насколько реальные PIN-коды отличаются от уже рассмотренных. Учитывая специфику исследования, у респондентов спрашивали не о самих кодах, а только о их соответствии какому-либо из вышеназванных факторов (возрастание, формат ДДММ, и т.д.).

Оказалось, что люди действительно гораздо тщательнее выбирают банковские PIN-коды. Примерно четверть опрошенных используют случайный PIN, сгенерированный банком. Более трети выбирают свой PIN-код, используя старый номер телефона, номер студенческого билета, или другой набор цифр, который выглядит случайным. Согласно полученным результатам, 64% владельцев карт используют псевдослучайный PIN-код, — это гораздо больше, чем 23-27% в предыдущих экспериментах с не-банковскими кодами. Ещё 5% используют цифровой паттерн (например, 4545), а 9% предпочитают паттерн на клавиатуре (например, 2684). В целом, злоумышленник с шестью попытками (три с банкоматом и три с платёжным терминалом) имеет меньше 2% шансов угадать PIN-код чужой карты.

ФакторПримерRockYouiPhoneОпрос
Даты
ДДММ23115.261.383.07
ДМГГ38769.266.465.54
ММДД112310.009.353.66
ММГГ06830.670.200.94
ГГГГ198433.397.124.95
Итого58.5724.5122.76
Клавиатурный паттерн
смежные63511.524.99
квадрат14250.010.58
углы97130.191.06
крест82460.170.88
диагональная линия15900.101.36
горизонтальная линия59870.341.42
слово56830.708.39
вертикальная линия85200.064.28
Итого3.0922.978.96
Цифровой паттерн
заканчивается на 6968690.350.57
только цифры 0-320003.492.72
только цифры 0-651554.665.96
повторяющиеся пары25252.314.11
одинаковые цифры66660.406.67
убывающая последовательность32100.130.29
возрастающая последовательность45673.834.52
Итого15.1624.854.60
Случайный набор цифр 23.1727.6763.68

Всё бы хорошо, но, к сожалению, существенная часть опрошенных (23%) выбирает PIN-код в виде даты, — и почти треть из них использует дату своего рождения. Это существенно меняет дело, ведь почти все (99%) респонденты ответили, что хранят в бумажнике с банковскими картами различные удостоверения личности, на которых эта дата напечатана. Если злоумышленник знает день рождения владельца карты, то при грамотном подходе вероятность угадывания PIN-кода взлетает до 9%.

100 самых популярных PIN-кодов

0000, 0101-0103, 0110, 0111, 0123, 0202, 0303, 0404, 0505, 0606, 0707, 0808, 0909, 1010, 1101-1103, 1110-1112, 1123, 1201-1203, 1210-1212, 1234, 1956-2015, 2222, 2229, 2580, 3333, 4444, 5252, 5683, 6666, 7465, 7667.

P.S. На практике, разумеется, злоумышленнику гораздо проще подсмотреть ваш PIN-код, чем угадывать его. Но и от подглядывания можно защититься — даже, казалось бы, в безвыходном положении:

Калькулятор ниже предназначен для генерации всех сочетаний из n по m элементов.
Число таких сочетаний, как можно рассчитать с помощью калькулятора Элементы комбинаторики. Перестановки, размещения, сочетания .

Описание алгоритма генерации под калькулятором.

Алгоритм

Комбинации генерируются в лексикографическом порядке. Алгоритм работает с порядковыми индексами элементов множества.
Рассмотрим алгоритм на примере.
Для простоты изложения рассмотрим множество из пяти элементов, индексы в котором начинаются с 1, а именно, 1 2 3 4 5.
Требуется сгенерировать все комбинации размера m = 3.
Сначала инициализуется первая комбинация заданного размера m — индексы в порядке возрастания
1 2 3
Далее проверяется последний элемент, т. е. i = 3. Если его значение меньше n — m + i, то он инкрементируется на 1.
1 2 4
Снова проверяется последний элемент, и опять он инкрементируется.
1 2 5
Теперь значение элемента равно максимально возможному: n — m + i = 5 — 3 + 3 = 5, проверяется предыдущий элемент с i = 2.
Если его значение меньше n — m + i, то он инкрементируется на 1, а для всех следующих за ним элементов значение приравнивается к значению предыдущего элемента плюс 1.
1 (2+1)3 (3+1)4 = 1 3 4
Далее снова идет проверка для i = 3.
1 3 5
Затем — проверка для i = 2.
1 4 5
Потом наступает очередь i = 1.
(1+1)2 (2+1)3 (3+1)4 = 2 3 4
И далее,
2 3 5
2 4 5
3 4 5 — последнее сочетание, так как все его элементы равны n — m + i.

Друзья! Раз уж есть у меня этот мертвый блокнот, использую-ка я его для того, чтобы задать вам задачку, над которой вчера билось три физика, два экономиста, один политеховский и один гуманитарий. Мы сломали себе весь мозг и у нас постоянно получаются разные результаты. Может быть, среди вас есть программисты и математические гении, к тому же, задачка вообще школьная и очень легкая, у нас просто не выводится формула. Потому что мы бросили занятия точными науками и вместо этого зачем-то пишем книги и рисуем картины. Простите.

Мне выдали новую банковскую карточку и я, как водится, играючи угадала ее пин-код. Но не подряд. В смысле, допустим, пин-код был 8794, а я назвала 9748. То есть, я триумфально угадала все цифры , которое содержались в данном четырехзначном числе. Ну да, не само число , а просто его составляющие у гадала. Но цифры-то все верные! ПРИМЕЧАНИЕ — я действовала наугад, то есть, мне не надо было расставить уже известные числа в нужном порядке, я просто действовала в духе: вот тут есть неизвестные мне четыре цифры, и я считаю, что среди них могут быть 9, 7, 4 и 8, а порядок их не важен. Мы тут же задались вопросом, сколько у меня вообще было вариантов (наверное, чтобы понять, насколько это круто, что я вот взяла и угадала). То есть, из скольких комбинаций четырех цифр мне нужно было выбирать? И тут, натурально, начался ад. У нас весь вечер взрывалась голова, и у всех, в итоге, вышли абсолютно разные варианты ответа! Я даже начала выписывать все эти комбинации в блокнот подряд по мере возрастания, но на четырех сотнях поняла, что их больше четырех сотен (во всяком случае, это опровергло ответ физика Трэша, который уверял меня, что комбинаций четыре сотни, но все равно это не совсем однозначно) — и сдалась.

Собственно, суть вопроса. Какова вероятность угадывания (в любом порядке) четырех чисел, содержащихся в четырехзначном числе?

Или нет, переформулируем (я гуманитарий, простите, хотя к математике всегда питала огромную слабость), чтобы было яснее и четче. Сколько не повторяющихся комбинаций цифр содержится в ряду порядковых числительных от 0 до 9999? (пожалуйста, не путайте это с вопросом "сколько комбинаций не повторяющихся цифр"!! ! цифры могут повторяться! в смысле, 2233 и 3322 — это в данном случае одна и та же комбинация!!).

Или еще конкретнее. Мне нужно четыре раза угадать одну цифру из десяти. Но не подряд.

Ну или еще как-нибудь. В общем, нужно узнать, сколько у меня было вариантов числовой комбинации, из которой складывался пин-код карточки. Помогите, люди добрые! Только, пожалуйста, помогая, не начинайте сразу писать, что вариантов этих 9999 (вчера такое всем приходило в голову поначалу), потому что это же глупости — ведь в том ракурсе, который нас волнует, число 1234, число 3421, число 4312 и так далее являются одним и тем же! Ну и да, цифры же могут повторяться, ведь бывает пин-код 1111 или там, например, 0007. Можно представить вместо пин-кода номер машины. Допустим, какова вероятность угадать все однозначные цифры, из которых складывается номер машины? Или, чтобы вообще убрать теорию вероятности — из скольких числовых комбинаций мне нужно было выбрать одну?

Пожалуйста, подкрепите свои ответы и рассуждения какими-нибудь точными формулами, потому что мы вчера и так чуть не свихнулись. Заранее всем большое спасибо!

Ответ

Проверено экспертом

PascalABC.NET 3.4.0, сборка 1672 от 10.06.2018
Внимание! Если программа не работает, обновите версию!

begin
for var i:=1 to 6 do
for var j:=1 to 6 do
if i<>j then
for var k:=1 to 6 do
if (i<>k) and (j<>k) then
for var l:=1 to 6 do
if (i<>l) and (j<>l) and (k<>l) then Write(i,j,k,l,’ ‘)
end.

Xakep #246. Учиться, учиться, учиться!

Не секрет, что пользователи выбирают числовые пароли, используя характерные паттерны. В случае четырёхзначного PIN-кода очень часто указывается день рождения или год рождения.

До настоящего момента все исследования в этой области были фрагментарными, на основе относительно небольших выборок данных. Американская компания Data Genetics несколько дней назад опубликовала наиболее полный и масштабный статистический анализ PIN-кодов, использовав все доступные базы данных с паролями и отфильтровав их по цифровым комбинациям от 0000 до 9999. Общая база после применения фильтра составила 3,4 миллиона PIN-кодов.

Анализ позволил выявить несколько интересных фактов. Самым популярным PIN-кодом является 1234, его устанавливают почти 11% пользователей. На втором месте идёт 1111 (6%).

Частота№ 1123410,713%№ 211116,016%№ 300001,881%№ 412121,197%№ 577770,745%№ 610040,616%№ 720000,613%№ 844440,526%№ 922220,516%№ 1069690,512%№ 1199990,451%№ 1233330,419%№ 1355550,395%№ 1466660,391%№ 1511220,366%№ 1613130,304%№ 1788880,303%№ 1843210,293%№ 1920010,290%№ 2010100,285%

Двадцатка самых популярных комбинаций покрывает 26,83% всех паролей, хотя при нормальном статистическом распределении она составляла бы всего 0,2%. На следующей диаграмме показана кумулятивная частотность использования паролей.

Интересно также посмотреть на список самых редких PIN-кодов по всей базе.