DINOVEON.BLOG
Design

ДИЗАЙН КОДА ПОДТВЕРЖДЕНИЯ. КОГДА БЕЗОПАСНОСТЬ КОНФЛИКТУЕТ С УДОБСТВОМ ИСПОЛЬЗОВАНИЯ

Банки и другие сервисы используют коды подтверждения для защиты от мошенников. Обычно код выглядит как число из 4–6 цифр, которое приходит по СМС или пуш-оповещением. В этой заметке я расскажу об удобстве и безопасности разных вариантов и какой вариант мы применили с нашим постоянным клиентом в сфере микрокредитования FINMOLL.

Какие бывают коды

Дизайн кода подтверждения — классическая проблема, когда кажется, что безопасность конфликтует с удобством использования. Безопасники хотят сделать код как можно длиннее, чтобы злодей не смог его подобрать. А продуктовые ребята наоборот, хотят коды покороче, чтобы человеку было проще запомнить.

Код подтверждения

Я попросил участников чата «UX TW» прислать примеры кодов подтверждения от разных сервисов. Всего в выборку попало 30 сервисов, вот статистика:
  • 45% сервисов используют коды из 6 цифр
  • 41% используют 4 цифры
  • 14% используют 5 цифр

Какой длины кода достаточно

Если у вас в компании есть безопасник — наверняка он ответит «шесть цифр и никак не меньше». 6 цифр — это 1 миллион комбинаций. Если дать злодею возможность беспрепятственно вводить коды каждую секунду, ему потребуется 11 дней, чтобы угадать.
Понятно, что беспрепятственно вводить коды никто не даст: сервисы ограничивают количество ошибочных попыток (а ещё время жизни кода и как часто можно генерить новые коды). Поэтому 6 цифр — это неоправданно много.
Код из 4 цифр даёт 10 тысяч комбинаций. Если разрешить 3 попытки ввода, шанс угадать составит 0,03%. Другими словами, злоумышленнику придётся попытать счастья с 3300 человек, прежде чем у него что-то получится. Не слишком интересный расклад для злодея ツ

Правда ли, что цифры в коде повторяются

Это довольно распространённая точка зрения. Хочется думать: родной банк так заботится о твоём удобстве, что генерит коды с повторяющимися цифрами — чтобы легче было запомнить:
  • 134571
  • 85651
  • 6411
В большинстве случаев это заблуждение. Чем длинее код, тем больше вероятность, что цифры в нём повторятся сами собой, без всяких усилий сервиса. Например, для кода из 4 цифр вероятность повторения хотя бы одной цифры — 50%. А для кода из 6 цифр — уже 85%.

Код с повтором

Ради интереса я взял сервисы, по которым собрал больше всего данных, и проверил, какова доля кодов с повторами в цифрах. У большинства распределение получилось несмещённое, то есть специально они одинаковые цифры не генерят.
Единственное исключение — «Тиньков»: у него 65% кодов с повторами против ожидаемых 50%.

Что, если всегда генерить код с повторами

Допустим, наш супер-дружественный сервис решил генерить 4-значные коды, в которых хотя бы одна цифра повторяется. Это примерно 5000 комбинаций — всего в два раза меньше, чем на «обычном» 4-значном коде.
Шанс угадать такой код на 3 попытках — 0,06% или 1650 бесплодных злодейских заходов. Как по мне, вполне надёжно. Хотя ваш безопасник будет против, конечно.

Результат исследования и принятие решения

Итоговый вариант для наших клиентов позволил незаметно улучшить опыт пользователя.



Резюмирую:

  • Никогда, никогда, никогда не делайте коды длиннее 6 цифр.
  • 4-значный код — хороший баланс между удобством и безопасностью.
  • Попробуйте генерить коды с повторами, пользователям понравится.
А ещё, пишите код в начале сообщения.