Неслучайный генератор случайных одноразовых кодов Тинькофф банка

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Совершая очередную транзакцию в моем любимом банке Тинькофф, получил уже привычное сообщение:


Никому не говорите код: 3131! Перевод с карты ****. Сумма ***.00 RUB

Если будут спрашивать — я вам его не говорил.


И снова взгляд зацепился за интересное совпадение цифр в «случайном» одноразовом коде (вспомнился Нео с чёрной кошкой). В итоге решил поднять всю историю сообщений, чтобы посмотреть, насколько случаен «случайный» одноразовый код и чем это может грозить.


В телефоне нашлось всего 234 таких сообщения за прошедший год. Все эти операции можно разделить на 2 типа: неслучайный код (190 штук) и случайный (42 штуки).


В категорию неслучайного кода относятся все операции покупки в интернете, операции перевода между своими картами. А на операции оплаты через мобильный банк, установку пин кода, вход в интернет банк, переводы третьим лицам приходят случайные коды.


Итак, были выбраны все неслучайные коды и отсортированы по возрастанию:


0200 0207 0207 0208 0301 0307 0308 0401 0602 0706 0802 0808 0809 0900 0901 0903 0905 1119 1315 1515 1516 1516 1610 1614 1712 1715 1715 1715 1812 1812 1818 1918 2121 2125 2128 2220 2226 2228 2321 2325 2325 2423 2429 2528 2621 2721 2723 2727 2826 2827 2926 2927 3131 3131 3134 3231 3234 3237 3335 3432 3437 3637 3734 3736 3831 3832 3930 3932 3937 3939 4140 4143 4149 4240 4243 4442 4443 4448 4546 4640 4640 4641 4641 4842 4843 4844 4941 4946 4948 5153 5154 5158 5250 5250 5350 5354 5355 5454 5455 5550 5556 5557 5557 5558 5559 5653 5653 5659 5755 5755 5852 5950 5954 5956 5957 5959 6160 6162 6168 6261 6267 6366 6368 6369 6567 6761 6861 6863 6867 6960 7273 7370 7379 7473 7473 7570 7578 7670 7673 7679 7771 7772 7773 7773 7778 7877 7971 8189 8388 8480 8581 8581 8583 8586 8587 8587 8688 8782 8785 8886 8887 8981 8982 8983 8984 9192 9193 9195 9197 9199 9394 9395 9492 9493 9496 9499 9595 9596 9693 9793 9794 9890 9895 9897 9897 9899 9899 9990 9993 9995


Как видно невооруженным глазом случайность этих кодов вызывает сомнения. В каждом коде 1 и 3 цифры совпадают, причем для выборки из 190 штук мы имеем 19 дублей кодов.
Посчитаем вероятность получения двух одинаковых чисел на первой и третьей позиции:


P = 0,1 * 0,1 * 10 = 0,1


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


Но вернемся к выборке. Какова вероятность получить 190 кодов подряд, в которых первая и третья цифры совпадают при равномерном распределении?


P = 0,1190


Таким образом четырехзначный код превращается в трехзначный.


Возможно в сообществе найдутся знатоки теории вероятности и смогут вытащить из этих данных больше информации, буду рад почитать в комментариях.


P.S. Возможно такая ситуация наблюдается только у меня и связана с алгоритмом генерации кодов на основании данных клиента, например. Прошу сообщество посмотреть, имеет ли данная проблема массовый характер.


UPD.: вторая цифра всегда больше 0. Таким образом остается 900 комбинаций

Источник: https://habr.com/ru/post/462071/


Интересные статьи

Интересные статьи

В 1984 году Голдрайх, Голдвассер и Микали в своей статье формализовали концепцию псевдослучайных функций и предложили реализацию PRF, основанную на псевдослучайном генера...
Часто от программистов PHP можно услышать: «О нет! Только не „Битрикс“!». Многие специалисты не хотят связываться фреймворком, считают его некрасивым и неудобным. Однако вакансий ...
Как жить и развиваться на проектах с историей. Что дает разработчику опыт работы c большой кодовой базой, и почему не нужно стремиться переписать все с нуля, если даже очень хочет...
В мире JVM про корутины знают в большей степени благодаря языку Kotlin и Project Loom. Хорошего описания принципа работы котлиновских корутин я не видел, а код библиотеки kotlin-coroutines соверш...
Возможность интеграции с «1С» — это ключевое преимущество «1С-Битрикс» для всех, кто профессионально занимается продажами в интернете, особенно для масштабных интернет-магазинов.