Categories: Полезное

Как правильно хранить пароли

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

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

Для начала взглянем на ситуацию в общем. Есть ресурс, который можно идентифицировать. Например, веб-ресурс идентифицирется по схеме, хосту и порту, например https://login.awesome.site.com/, в свою очередь десктопное приложение может быть идентифицировано по имени исполняемого файла, например awesom-app.exe или по заголовку окна или его части. Итак с идентификатором разобрались.

[ad name=»Responbl»]

Далее идут логин и пароль. Логином может служить как имя пользователся, так и адрес его электронной почты, что бы идентифицировать пользователя. А теперь давайте взглянем на пароль, но с другой стороны. Пароль — это своего рода соль (salt) нулевого уровня для генерации хеша. Например:

hash(username + ':' + password + ':' + salt)

Отсюда можно выдвинуть идею о количестве солей в хеш-функции: чем больше — тем лучше. Можно взять размер конечного пароля, время (час, день, месяц или даже год) и до кучи географические широту и долготу какой-либо точки на земле. Следовательно, требования к сложности входящего пароля падают и вместо него можно использовать более простую последовательность символов, например из четырех цифр (не рекомендуется с уровнем паранойи 2 и выше).

А теперь, давайте взлянем, что можно с этим всем сделать. Для экспериментов я выбрал Google Chrome и написал для него простое расширение. По клику на иконке появляется окно генерации паролей, расширение получает адрес активной вкладки.

chrome.tabs.query({active: true, currentWindow: true}, tabs => generate(tabs[0].url) );

Затем создаем JavaScript объект URL и массив параметров для генерации хэша. Берём именно url.origin, что бы иметь схему, хост и порт:

const username = 'username'; 
const pin= '1234'; 
const size = 16; 
const expired = 2016; 
const latitude = 40.771426; 
const longitude = -73.9771395; 
function generate(url) { const url = new URL(url); 
const params = [ url.origin, username, pin, size, expired, latitude, longitude ]; 
const hash = sha512(params.join(':')); 
const password = Base85(hash).slice(-size); 
document.getElementById('password').value = password; 
}

Где функция sha512 — генерирует хэши алгоритмом sha512, а функция Base85 — преобразует шестнадцатеричную систему счисления в восьмидесятиричную формата [A-Za-z0-9]+ и 25 пунктуационных символов обязательно включая пунктуационные символы, таким образом, что отображение функции generate является сюръективным, а пароль получается персистентным (постоянным для одинаковых аргументов функции) и тяжело воспроизводимым.
На данный момент расширение выглядит вот так:


А сами пароли от сайтов нигде не хранятся и моя паранойа пока спит спокойно.

P.S. Если есть идеи как можно усовершенствовать эту идею, буду рад увидеть в коментариях.
P.P.S. Опечатки и ошибки пожалуйста в ЛС.
P.P.P.S. Дабы упредить вопросы о сложности расшифровки, предположим что мой ник и pin 1234 использовались для генерации пароля, хотя давайте предположим, что пин вы не знаете. Тогда какой у меня пароль?
P.P.P.P.S. Только заметил, что в таком случае, фишинговые сайты в пролете на мой пароль

UPD:
Схема генерации:

Click to rate this post!
[Total: 4 Average: 3.3]
cryptoworld

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

View Comments

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

4 месяца ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

4 месяца ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

5 месяцев ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

5 месяцев ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

5 месяцев ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

5 месяцев ago