Какие бывают коды
Дизайн кода подтверждения — классическая проблема, когда кажется, что безопасность конфликтует с удобством использования. Безопасники хотят сделать код как можно длиннее, чтобы злодей не смог его подобрать. А продуктовые ребята наоборот, хотят коды покороче, чтобы человеку было проще запомнить.![Код подтверждения](https://antonz.ru/security-code/code-google.png)
Я попросил участников чата «UX TW» прислать примеры кодов подтверждения от разных сервисов. Всего в выборку попало 30 сервисов, вот статистика:
- 45% сервисов используют коды из 6 цифр
- 41% используют 4 цифры
- 14% используют 5 цифр
Какой длины кода достаточно
Если у вас в компании есть безопасник — наверняка он ответит «шесть цифр и никак не меньше». 6 цифр — это 1 миллион комбинаций. Если дать злодею возможность беспрепятственно вводить коды каждую секунду, ему потребуется 11 дней, чтобы угадать.Понятно, что беспрепятственно вводить коды никто не даст: сервисы ограничивают количество ошибочных попыток (а ещё время жизни кода и как часто можно генерить новые коды). Поэтому 6 цифр — это неоправданно много.
Код из 4 цифр даёт 10 тысяч комбинаций. Если разрешить 3 попытки ввода, шанс угадать составит 0,03%. Другими словами, злоумышленнику придётся попытать счастья с 3300 человек, прежде чем у него что-то получится. Не слишком интересный расклад для злодея ツ
Правда ли, что цифры в коде повторяются
Это довольно распространённая точка зрения. Хочется думать: родной банк так заботится о твоём удобстве, что генерит коды с повторяющимися цифрами — чтобы легче было запомнить:- 134571
- 85651
- 6411
![Код с повтором](https://antonz.ru/security-code/code-tinkoff.png)
Ради интереса я взял сервисы, по которым собрал больше всего данных, и проверил, какова доля кодов с повторами в цифрах. У большинства распределение получилось несмещённое, то есть специально они одинаковые цифры не генерят.
Единственное исключение — «Тиньков»: у него 65% кодов с повторами против ожидаемых 50%.
Что, если всегда генерить код с повторами
Допустим, наш супер-дружественный сервис решил генерить 4-значные коды, в которых хотя бы одна цифра повторяется. Это примерно 5000 комбинаций — всего в два раза меньше, чем на «обычном» 4-значном коде.Шанс угадать такой код на 3 попытках — 0,06% или 1650 бесплодных злодейских заходов. Как по мне, вполне надёжно. Хотя ваш безопасник будет против, конечно.
Результат исследования и принятие решения
Итоговый вариант для наших клиентов позволил незаметно улучшить опыт пользователя.![](https://static.tildacdn.com/tild6564-3931-4861-b631-326533613537/__2022-12-28_134609.png)
Резюмирую:
- Никогда, никогда, никогда не делайте коды длиннее 6 цифр.
- 4-значный код — хороший баланс между удобством и безопасностью.
- Попробуйте генерить коды с повторами, пользователям понравится.