Які вони надійні паролі?

Мені подобається фіча у WordPress, у профілі користувача, що показує силу вказаного юзером пароля. Швидка і корисна перевірка “сили” паролю. Так, саме “сили”, а не лише довжини. Тобто не лише від довжини залежить “сила” паролю, а й від самого набору символів у ньому. Ось про що я.

Якраз недавно мав нагоду використати password strength meter з WP на одному комерційному проекті. Звичайно, вигляд цієї фічі повинен був бути дещо іншим. Але мене цікавив не вигляд, а сам скрипт перевірки “сили” вказаного паролю. Отож я доволі успішно покопався у нутрощах двигунця і виявив, що серцем цієї фічі є скрипт zxcvbn. Незвична назва цього скрипта очевидно позначає really easy-to-guess пароль, один з тих, що не рекомендують використовувати 🙂
Гаразд, то чим же цікавий цей скрипт? Загалом – його методом визначення чи “сильний” пароль чи ні. І, як виявляється, якийсь випадковий набір букв, цифр і спец. символів, навіть довжиною 7 символів, наприклад, зовсім не є “сильним”! Ви це знали? Я от не знав.

“Неправильні” паролі

Прийнято вважати, що “сильний” найкраще визначається ентропією, якщо детальніше – то це якраз і є якийсь випадковий набір букв, цифр і спец. символів. Найпростіший брут-форс аналіз призначений для таких випадків. Хоча у реальності люди ще й використовують патерни (слова зі словників, випадкові повтори типу qwerty, asdf або той же zxcvbn :), звичайні повтори aaaaaaa, послідовності типу abcdef або 654321). Числа і символи теж досить передбачувані: l33t це розмовне (3 як e, 0 як o, @ або 4 як a), роки, дати, поштові коди і т.п.
Отож, у підсумку згаданий брут-форс аналіз дає погану оцінку “сили” паролю. Найкраще подібну ситуацію описує відомий комікс від xkcd:
password_strength

“Правильні” паролі та zxcvbn

Ось ще порівняння як різні скрипти на різних сервісах оцінюють три варіанти паролів (станом на 03.04.2012):

password_strength_comparing

Звісно, zxcvbn вважає qwER43@! “слабким” тому, що це короткий патерн QWERTY. Звісно, що zxcvbn вважає пароль correcthorsebatterystaple надійнішим окрім всього іншого ще й тому, що він дуже довгий.

Бажаєте в режимі онлайн перевірити один зі своїх існуючих паролів – тоді вам наприклад сюди https://www.cygnius.net/snippets/passtest.html. Одразу дізнаєтесь час ймовірного злому вашого паролю, за попередньою оцінкою. Бажаю вам, щоб це були роки і десятиліття, ніж дні. 😉

Ти не менше, як ви вже мабуть зрозуміли, не варто обирати для себе важкі для запам’ятовування, “напів згенеровані” паролі, ще із спецсимволами у довільному порядку. Набагато краще взяти довший, але зрозумілий вам і такий, що легко запам’ятати. Хоча вибір всерівно за вами)

Бонус: як користуватись zxcvbn у проекті на WP

Найперше, ви повинні підключити цей скрипт на тій сторінці, де ви плануєте користуватись фічею “підказка сили паролю”. Додайте цей код у файл functions.php своєї теми:

function uni_scripts() { 
   wp_enqueue_script('user-profile');
   wp_enqueue_script("password-strength-meter");
}
add_action('wp_enqueue_scripts', 'uni_scripts');

Далі потрібно додати два текстових поля для введення паролю і його повтору і блок, що показуватиме нам інформацію про силу вибраного паролю:

<input type="password" name="subscriber_pass1" autocomplete="off" id="pass1" value="">
<input type="password" name="subscriber_pass1" autocomplete="off" id="pass2" value="">
<div id="pass-strength-result">Індикатор надійності</div>

Якщо не бажаєте додавати дод. код, то залиште id двох текстових блоків саме у такому вигляді.

Ось код, що можна вставити одразу після текстових полів чи після форми, що містить ці поля. Власне, це текст для індикатора “сили” паролю. Він спрацьовуватиме при одразу при заповненні полів. Сам текст урл-кодований і це російська версія 🙂

<script type="text/javascript">
	try{document.getElementById('user_pass').focus();}catch(e){}
	if(typeof wpOnload=='function')wpOnload();
</script>
<script type='text/javascript'>
/* <![CDATA[ */
var pwsL10n = {
    "empty":"\u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438",
    "short":"\u041e\u0447\u0435\u043d\u044c \u0441\u043b\u0430\u0431\u044b\u0439",
    "bad":"\u0421\u043b\u0430\u0431\u044b\u0439",
    "good":"\u0421\u0440\u0435\u0434\u043d\u0438\u0439",
    "strong":"\u041d\u0430\u0434\u0451\u0436\u043d\u044b\u0439",
    "mismatch":"\u041d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435"};
/* ]]> */
</script>

Фінальний акорд – перевірка паролю з доп. zxcvbn. Наведу приклад сабміту довільної форми, де є два вищезгадані текстові поля.

$('#some-form-id').submit(function(event){
	    event.preventDefault();
	    var this_form = $(this);
            pass1 = this_form.find('input[name="subscriber_pass1"]').val();
            pass2 = this_form.find('input[name="subscriber_pass2"]').val();
	    error = false;

	var blacklist = [ 'user_login', 'first_name', 'last_name', 'nickname', 'display_name', 'email', 'url', 'description', 'weblog_title', 'admin_email' ];
        result = zxcvbn( pass1, blacklist );

        //мін. 1, макс. 5... 3 - це слабкий, 4 - середній, 5 - чудовий
        if ( result.score < 3 ) {
            error = true;
        } 

	if (error) {
	   //do something on error		
	} else {
           //do something
	}
});

Тут є перевірка паролю і оцінка. У прикладі, якщо пароль по результатам перевірки набере менше 3 очок, то буде помилка.

У тексті частково використано матеріали https://tech.dropbox.com/2012/04/zxcvbn-realistic-password-strength-estimation/

Безкоштовний плагін Uni Send Content to Yandex Webmaster

Безкоштовний плагін Uni Send Content to Yandex Webmaster

Два шлюзи для Easy Digital Downloads + бонус: міні-плагін, що додає додаткові поля у форму чекауту

Два шлюзи для Easy Digital Downloads + бонус: міні-плагін, що додає додаткові поля у форму чекауту

Новіший допис

There are 4 comments

  1. Taras

    crack time (display): centuries

    fuck yeah

    p.s. хоча пароль цей записани в блокноті, в голові важко втримати=))

    1. Akceptor

      Раз уже почалася дискусія, то лишу лінк на свою статтю: http://akceptor.org/lajfhak-yak-zberihaty-paroli/
      До автора: як бачиш, люди записують пароль у блокнотик, у явному вигляді. Мабуть і сайт, до якого цей пароль, теж вказано. Бпезпека – це не просто складний і довгий пароль, а легкість його відтворення. Вірніше, легкість відтворення відносно простоти підбору або отримання іншим способом (підглянути у блокноті, вкрасти з дропбокса чи флешки)

      1. Віталій Кійко

        Ну я всіма частинами свого тіла за те, щоб пароль був легкозапам’ятовуваний і тому не було потреби записувати його у блокнотику. Власне, у статті якраз про це – ми часто ускладнюємо життя собі і навпаки – полегшуємо зловмисникам. Треба робити навпаки! 🙂

        1. Akceptor

          Прикол у тому, що ти кажеш про один пароль. А я про десятки і сотні.
          ВК, фейсбук, Г+, твіттер, лінкед, гітхаб, яндекс, вебмані, пейпел, амазон, ще якась пошта, блоги і форуми, хостинги, дропбокс, скайп акаунт. Не можна один пароль на всі сервіси використовувати. А паролів типу horseeatmyliver ти багато не придумаєш, плюс багато які сервіси хочуть обов’язково букви у різному регістрі, цифри і спецсимволи. Як це запам”ятаєш?

Надіслати коментар