Насколько надежны ваши пароли? Вдруг они не так хороши, как вы считаете?

Пароль – это главный барьер, который мешает злоумышленникам получить ваши данные в сети. Чтобы не подвергать риску кражи данных, нужно создавать пароли, которые могут помешать хакерам.

Насколько надежны ваши пароли? Вдруг они не так хороши, как вы считаете?

Напомним, каким основным инструментарием владеют злоумышленники:

  • Перебор по словарю (автоматическая комбинация слов из словаря часто используемых словосочетаний),

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

  • Брутфорс-атака (автоматический перебор всех возможных комбинаций символов до тех пор, пока не найдется пароль),
  • И т.д.

Подробнее остановимся на последнем.

У брутфорс-алгоритмов вызывает трудности работа с длинными паролями, а вот короткие чаще всего можно подобрать за несколько часов!

Чтобы проверить насколько надежен пароль, предлагаем вам небольшую простую программу на python, которую легко можно самостоятельно улучшить.

Для работы программы нам понадобится библиотека re.

import re

Создаем функцию с двумя входными параметрами – паролем и печатью (необходимостью подробной печати по каждому из тестов). Также изначально объявляем основную переменную результата – rs.

def password_stregth(pwd: str, prnt: bool): rs = 0 …

Пароль длины меньше 8 считается слабым (-10), обычный пароль имеет длину от 8 до 12 символов (+1), а хороший пароль имеет длину от 12 символов (+2).

… if len(pwd)<8: if prnt == True: print('Тест 1. Длина пароля: маленькая (-10)') rs -= 10 elif len(pwd)<12: if prnt == True: print('Тест 1. Длина пароля: обычная (0)') else: if prnt == True: print('Тест 1. Длина пароля: хорошая (+1)') rs += 1 …

С помощью регулярных выражений мы можем проверить наличие в пароле строчных латинских букв – если они есть, то плюс 1 балл, если нет, то минус 1 балл.

… if not re.search(r'[a-z]', pwd): if prnt == True: print('Тест 2. Латиница (строчная): отсутствует (-1)') rs -= 1 else: if prnt == True: print('Тест 2. Латиница (строчная): присутствует (+1)') rs += 1 …

По аналогии с предыдущим фрагментом, делаем заглавную латиницу, строчную и заглавную кириллицу.

… if not re.search(r'[A-Z]', pwd): if prnt == True: print('Тест 3. Латиница (заглавная): отсутствует (-1)') rs -= 1 else: if prnt == True: print('Тест 3. Латиница (заглавная): присутствует (+1)') rs += 1 if not re.search(r'[а-яё]', pwd): if prnt == True: print('Тест 4. Кириллица (строчная): отсутствует (-1)') rs -= 1 else: if prnt == True: print('Тест 4. Кириллица (строчная): присутствует (+1)') rs += 1 if not re.search(r'[А-ЯЁ]', pwd): if prnt == True: print('Тест 5. Кириллица (заглавная): отсутствует (-1)') rs -= 1 else: if prnt == True: print('Тест 5. Кириллица (заглавная): присутствует (+1)') rs += 1 …

Далее проверяем наличие в пароле цифр, оценивая их также – если есть, то плюс один балл, если нет, то минус один балл.

… if not re.search(r'\d', pwd): if prnt == True: print('Тест 6. Числа: отсутствуют (-1)') rs -= 1 else: if prnt == True: print('Тест 6. Числа: присутствуют (+1)') rs += 1 …

Теперь проверяем наличие в пароле специальных символов (сам набор спецсимволов можно расширить самостоятельно при необходимости).

… special = ['~', ':', "'", '+', '[', '\\', '@', '^', '{', '%', '(', '-', '"', '*', '|', ',', '&', '<', '`', '}', '.', '_', '=', ']', '!', '>', ';', '?', '#', '$', ')', '/'] if not any(char in special for char in pwd): if prnt == True: print('Тест 7. Специальные символы: отсутствуют (-1)') rs -= 1 else: if prnt == True: print('Тест 7. Специальные символы: присутствует (+1)') rs += 1 …

Также нам необходимо проверить количество уникальных символов, используемых в пароле.

… u_pwd = ''.join(set(pwd)) if len(u_pwd) < 8: if prnt == True: print('Тест 8. Уникальность символов: плохая (-1)') rs -= 1 else: if prnt == True: print('Тест 8. Уникальность символов: хорошая (+1)') rs += 1 …

Наконец, после всех вычислений, получаем итоговый результат.

… if rs < 1: print('Результат:', rs, '(Слабый пароль)') else: print('Результат:', rs, '(Надежный пароль)')

Посмотрим результат на паре примеров:

1. password_stregth('Password', 1)

Тест 1. Длина пароля: обычная (0) Тест 2. Латиница (строчная): присутствует (+1) Тест 3. Латиница (заглавная): присутствует (+1) Тест 4. Кириллица (строчная): отсутствует (-1) Тест 5. Кириллица (заглавная): отсутствует (-1) Тест 6. Числа: отсутствуют (-1) Тест 7. Специальные символы: отсутствуют (-1) Тест 8. Уникальность символов: плохая (-1) Результат: -3 (Слабый пароль)

2. password_stregth('! S5w0rD', 1)

Тест 1. Длина пароля: обычная (0) Тест 2. Латиница (строчная): присутствует (+1) Тест 3. Латиница (заглавная): присутствует (+1) Тест 4. Кириллица (строчная): отсутствует (-1) Тест 5. Кириллица (заглавная): отсутствует (-1) Тест 6. Числа: присутствуют (+1) Тест 7. Специальные символы: присутствует (+1) Тест 8. Уникальность символов: хорошая (+1) Результат: 3 (Надежный пароль)

Следует помнить, что надежный пароль должен всегда отвечать «да» на следующий ряд вопросов:

  • Ваш пароль длинный?

  • В пароле используются разнообразные символ?

Также пароль можно улучшить неочевидными подстановками символов, избеганием простых последовательностей и т.д. Да, парой бывает, что пароль трудно запомнить, но что для вас важнее: небольшая трудность или свои данные?

11
5 комментариев

Комментарий недоступен

2
Ответить
Автор

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

1
Ответить

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

1
Ответить

"Следует помнить, что надежный пароль должен всегда отвечать «да» на следующий ряд вопросов:"
а если у меня пароль 25 букв? без спец. символов?
сломался ваш алгоритм? - да
надежнее мой пароль, чем 9 буквенный со спец. сиволами? - да

не надо думать за людей, если думать не умеете

1
Ответить

Подскажите, а вы как с паролями работаете? Через генератор паролей или вручную? Или может своя какая-то разработка?

Ответить