Инструменты разработчика · SHA хеш-калькулятор
Хеширование — это не шифрование: почему хэш SHA-256 не может быть расшифрован
· Почему это важно
криптография безопасность кодирование
Здесь нет ключа и нет обратной функции: хэш — это односторонняя функция. В этом посте объясняется отличие от шифрования, почему сайты поиска хэшей меняют хеш-коды и что это означает для хеширования личных данных.
Пожалуйста, расшифруйте эти хеши — билет, который выявляет непонимание того, что такое хеширование.
Приходит запрос в службу поддержки с просьбой расшифровать некоторые хеши SHA-256. Читающий его разработчик подозревает недопонимание того, что такое хеширование. Эта путаница имеет смысл: и хеширование, и шифрование включают криптографические алгоритмы, оба выдают выходные данные, которые выглядят зашифрованными, и оба имеют отношение к безопасности. Но это принципиально разные инструменты. Шифрование обратимо; хеширование - нет. Это различие настолько важно, что их путаница нарушила реальную систему безопасности. Билет представляет собой общий пробел в понимании, который влияет на проектирование системы.
Хэш-функция — это односторонняя функция. Вы можете хешировать входные данные, чтобы получить дайджест, но не существует ключа и обратной операции, которая восстанавливала бы входные данные из дайджеста. Это не ограничение или ошибка; это определяющее свойство хеша. Хэш-калькулятор ToolAcre SHA выдает дайджесты вставленного вами текста, и здесь нет кнопки «расшифровать», потому что никакой кнопки не может быть. Операция необратима по математическим соображениям, а не по собственному выбору. Отсутствие функции реверса — это не та функция, которую вы можете запросить.
Шифрование имеет ключ и обратный ключ; хеширование не имеет ни того, ни другого — разница в определениях простыми словами
Шифрование работает по-другому. Алгоритм шифрования берет открытый текст и ключ и создает зашифрованный текст. Зашифрованный текст зашифрован и не читается без ключа. Важно отметить, что тот же ключ может расшифровать зашифрованный текст обратно в открытый текст. Шифрование обратимо по своей конструкции. Вы шифруете, чтобы сохранить данные в секрете; вы расшифровываете, чтобы прочитать его снова. Безопасность шифрования зависит от секретности ключа. Только обладатель ключа может обратить трансформацию вспять.
У хеширования нет ключа и нет обращения. Вы хешируете что-то для создания дайджеста фиксированной длины. Один и тот же ввод всегда создает один и тот же дайджест. Другой ввод создает другой дайджест — это свойство устойчивости к коллизиям. Но вы не можете сделать дайджест и ввести данные. Функция работает только в одну сторону. Если вам нужно зашифровать данные, чтобы их можно было расшифровать позже, хеширование — неправильный инструмент. Если вам нужен отпечаток данных для проверки или адресации контента, хеширование является правильным. Выбор правильного инструмента требует понимания разницы.
Как работают сайты поиска хэшей — заранее рассчитанные словари общих входных данных, а не расшифровка
Это различие настолько важно, что лежит в основе безопасности проверки пароля. Сервер не хранит пароли. Он хранит результат хеширования пароля. Когда пользователь входит в систему, сервер хеширует его отправленные данные и сравнивает их с сохраненным значением. Если сервер скомпрометирован и его база данных украдена, злоумышленник не получит самих паролей, а только хэши. Односторонний характер хеша означает, что злоумышленник не может перепроектировать пароли из хэшей. От этого свойства зависит безопасность системы.
Если бы вместо этого сервер использовал шифрование — если бы он шифровал пароли и мог их расшифровать — тогда компрометация, которая украла бы ключ, немедленно раскрыла бы каждый пароль. Хеширование выбрано специально потому, что оно необратимо. Вот почему системы паролей используют хеширование, а не шифрование. Необратимость не является ограничением; это вся модель безопасности. Зашифрованная база данных паролей принципиально слабее, чем хешированная, поскольку шифрование обратимо.
Входные данные с низкой энтропией являются слабым местом — почему хеширование адреса электронной почты, номера телефона или короткого PIN мало защищает
Сайты поиска хэшей существуют для того, чтобы создать иллюзию расшифровки. На этих сайтах размещаются заранее рассчитанные таблицы общих входных данных и их хешей. «Радужные таблицы» — это заранее подготовленные словари: таблица может содержать хеши тысяч наиболее распространенных паролей, все буквенно-цифровые комбинации до определенной длины или целые списки слов на нескольких языках. Оператор сайта уже выполнил хеширование и сохранил результаты. Когда кто-то отправляет хэш на сайт поиска, сайт ничего не расшифровывает. Он просто просматривает хэш в своей таблице. Если хэш есть — если какое-то словарное слово или образец пароля совпадают — таблица возвращает исходные входные данные. Для человека, незнакомого с этой техникой, это выглядит как волшебная расшифровка, но это всего лишь поиск в базе данных. Сайт не меняет хэш; он сравнивает его с заранее вычисленными значениями.
Рабочий пример — хеширование угадываемого значения и показ того, как словарь сможет его восстановить, а не длинное случайное значение, которое он не смог бы восстановить.
Вот почему входы с низкой энтропией уязвимы. Если вы хешируете общий пароль, например «пароль», или предсказуемое значение, например чей-то адрес электронной почты, существует реальная вероятность того, что сайт поиска уже вычислил этот хэш и сохранил его. Поиск мгновенно возвращает исходное значение. Если вы хэшируете случайную строку из 256 символов, ни один сайт поиска в мире не будет иметь этот конкретный хеш, предварительно вычисленный. Сайт поиска ничего не возвращает, поскольку входных данных не было в их словаре. Безопасность хеша полностью зависит от энтропии ввода.
Хэш-калькулятор ToolAcre SHA демонстрирует это напрямую. Хешируйте обычное слово, и решительный злоумышленник сможет найти его, если запустит собственную словарную службу. Хешируйте длинное случайное значение, и даже огромный словарь вряд ли сможет его содержать. Детерминизм хеширования (идентичные входные данные дают идентичные выходные данные) – вот что делает возможными атаки по словарю. Это также то, что делает хеши полезными для проверки. То же свойство, которое включает поиск, также обеспечивает проверку.
Когда вам действительно нужно шифрование — случаи, когда данные должны быть возвращены и когда хэш — неправильный инструмент
Когда вам действительно нужно шифрование — когда вам нужно отправить секретные данные и восстановить их позже — шифр — это правильный инструмент. AES — это современный стандарт симметричного шифрования: один общий ключ позволяет шифровать открытый текст и расшифровывать зашифрованный текст. RSA или криптография с эллиптической кривой используются для асимметричного шифрования: открытый ключ шифрует, а закрытый ключ расшифровывает. Эти инструменты являются обратимыми по своей конструкции. Безопасность обеспечивается секретностью ключа, а не необратимостью. Ошибка заключается в использовании хеширования там, где необходимо шифрование. Если вы хешируете номер кредитной карты и собираетесь проверить его позже, у вас не будет возможности его расшифровать. Если вы хешируете личный идентификатор, а затем вам нужно его восстановить, хеширование — неправильный выбор. Это ситуации, которые требуют шифрования.
Проработанный пример четко разделяет два использования. У вас есть список идентификаторов пользователей, которые необходимо хранить в секрете друг от друга и от вашего персонала. Вы шифруете их с помощью AES и сохраняете результат. Позже, когда вам нужно найти пользователя, вы расшифровываете и читаете его. Хеширование не будет работать; после хеширования идентификаторы теряются навсегда. Напротив, у вас есть пароли пользователей. Вы хэшируете их и сохраняете хэш. Когда пользователь входит в систему, вы хешируете его отправленные данные и сравниваете их с сохраненным значением. Вам никогда не придется восстанавливать пароли самостоятельно. Шифрование было бы неправильным; после первоначальной настройки вам не нужны пароли в виде открытого текста.
Что здесь не распространяется — схемы хеширования с ключами и солью, которые поднимают планку, но являются отдельной темой.
Соление и хеширование с использованием ключей заслуживают отдельного рассмотрения, поскольку ни один из них не превращает дайджест в шифрование. Соль заставляет равные входные данные с низкой энтропией создавать разные хранимые записи, а ключ может ограничивать то, кто вычисляет действительное значение аутентификации. Выход остается необратимым; попытки восстановления по-прежнему продолжаются путем тестирования входных данных-кандидатов, а не применения обратного метода.
Хеширование паролей увеличивает затраты, а также добавляет дополнительные преимущества, в то время как HMAC аутентифицирует сообщения с помощью секретного ключа. ToolAcre не реализует ни одну операцию. Вынесение их за пределы этой статьи позволяет избежать опасного упрощения описания простого SHA-256 плюс импровизированного префикса как эквивалента проверенной записи пароля или конструкции аутентификации сообщения.
Вывод: только в одну сторону — ToolAcre SHA хеш-калькулятор вычисляет дайджесты; кнопки реверса нет, потому что ее не может быть
Хэш-калькулятор ToolAcre SHA показывает хеширование в действии: вставьте текст, получите дайджест, готово. Никакой обратный ход невозможен и не предполагается. Инструмент правильно отказывается предоставлять функцию «расшифровки», потому что она не может существовать. Если вам нужно шифрование, используйте правильный шифр. Отсутствие реверса не является ограничением инструмента; это математический факт о хешировании. Односторонние функции являются мощными инструментами именно потому, что их нельзя обратить вспять. Они передают данные таким образом, что их невозможно вернуть обратно. Они обеспечивают проверку без раскрытия оригинала. Они обеспечивают безопасность систем паролей, даже если база данных украдена. Соленые и правильно настроенные хеши паролей становятся невозможными для обратного путем угадывания. Необратимость – это механизм безопасности.
Хэш-калькулятор ToolAcre SHA вычисляет дайджесты, которые являются односторонними, целенаправленными и правильно вычисляются собственной реализацией Web Crypto в браузере. Если вам нужен хеш для проверки или целостности, используйте его. Если вам нужно сохранить данные в секрете и получить их позже, шифрование — ваш инструмент. Понимание разницы между необратимым хешированием и обратимым шифрованием имеет основополагающее значение для обеспечения безопасности и создания систем, которые делают то, что вам действительно нужно.