Криптографические концепции: что такое хеш?

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


Компьютер в основном делает то, что вы ему приказываете, даже если иногда в это трудно поверить. Но иногда мы не хотим, чтобы он что-то делал — например, разглашал конфиденциальные данные. Вот тут-то и появляется криптография, наука о шифровании информации. На самом деле термин «хеш» появился задолго до того, как появились компьютеры. Даже в Древнем Египте, например, мифолого-религиозные тексты были зашифрованы с помощью специальных иероглифов для обозначения божеств, которые могли читать только духовенство. Юлий Цезарь (100 г. до н.э. — 44 г. до н.э.) писал зашифрованные сообщения своим полководцам, меняя буквы алфавита. Этот шифр стал известен как шифр Цезаря.

Что такое хеш?

Методы компьютерной криптографии играют важную роль примерно с 1970 года. Проще говоря, данные шифруются с помощью алгоритма. В идеале их невозможно расшифровать без соответствующих разрешений. Как разработчик, вам не обязательно разбираться в сложной математике, лежащей в основе этой технологии, но вы должны знать такие концепции, как кэширование, шифрование и подпись.


Одна из наиболее распространенных криптографических концепций — это так называемый хеш. Это слово имеет кулинарное происхождение и означает что-то вроде «нарезать и перемешать», что на самом деле прекрасно описывает, что делает хеш. Вход любой длины передается в хеш-функцию. Затем функция возвращает значение фиксированной длины, так называемый хеш. Это не позволяет делать какие-либо выводы о вводе. Если входные данные одинаковы, всегда создается один и тот же выход. Хеш также должен быстро вычисляться и быть уникальным.

Хеши могут шифровать данные, например пароли

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

Разработчики могут реализовать хеш-функцию, например, в Node Crypto, криптовалютном модуле из Node.js. Все, что нужно, это node.js и файл JavaScript в редакторе кода по выбору:


const { createHash } = require(‘crypto’);
function hash(input) {
return createHash(‘sha256’).update(input).digest(‘hex’));



Сначала из Node Crypto импортируется функция createHash. Затем определяется пользовательская функция, которая принимает строку в качестве ввода и возвращает строку хеширования. В приведенном выше примере эта функция называется хешем.
Затем необходимо определить используемый алгоритм хеширования. В примере это Sha256, альтернативой может быть, например, Argon2 или md5. Однако второй считается устаревшим, а первый недоступен в Node Crypto.


Внутри хеш-функции createHash вызывается обновление с соответствующим входным значением. Для определения возврата хеша используется дайджест — вместе с форматом, в котором хеш должен быть возвращен. В примере кода используется шестнадцатеричный формат, другой распространенный вариант — base64.

Затем этой функции можно предоставить ввод, в примере — пароль. Затем console.log () из hash1 показывает ту же строку символов в шестнадцатеричном формате. Это может выглядеть, например, так:


e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.
[code]let password = ‘t3n – digital pioneers’
const hash1 = hash(password);
console.log(hash1)



Чтобы сравнить две записи хешированного пароля, теперь создается второй хеш — hash2, который сравнивается с первым:


password = ‘t3n – digital news’;
const hash2 = hash(password);
const match = hash1 === hash2;
console.log(match ? ‘ — passwords match ‘ : ‘ — passwords don’t match ‘);




Если они совпадают, console.log () hash2 выведет ту же длинную строку. Поскольку они не совпадают в примере, вывод de console.log () в фрагменте кода будет иметь вид — пароли не совпадают.

Одних хешей недостаточно

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


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


Другая криптографическая концепция, так называемая соль — SALT, обеспечивает большую безопасность криптографических хеш-функций.

Добавить комментарий