Дальнейшее чтение [ править ]
- Берсон, Томас А. (1992). «Дифференциальный криптоанализ Mod 2 32 с приложениями к MD5». ЕВРОКРИПТ . С. 71–80. ISBN 3-540-56413-6.
- Берт ден Бур; Антун Босселаерс (1993). Коллизии для функции сжатия MD5 . Берлин; Лондон: Спрингер. С. 293–304. ISBN 978-3-540-57600-6.
- Ганс Доббертин, Криптоанализ компрессии MD5. Объявление в Интернете, май 1996 г. «CiteSeerX» . Citeseer.ist.psu.edu . Проверено 9 августа 2010 года .
- Доббертин, Ганс (1996). «Состояние MD5 после недавней атаки» . CryptoBytes . 2 (2).
- Сяоюнь Ван; Хунбо Ю (2005). «Как взломать MD5 и другие хеш-функции» . ЕВРОКРИПТ . ISBN 3-540-25910-4. Архивировано из оригинального 21 мая 2009 года . Проверено 6 марта 2008 года .
Что такое MD5
Шифрование MD5 — это способ хеширования предполагающий создание «оттисков» или «сумм» для последующего процесса проверки их на подлинность. Таким образом, можно проверить, сохранилась ли информация в целостности.
Хеш-сумма – это запись значения в шестнадцатеричном виде. MD5 – система построена по подобному типу. Предыдущим алгоритмом являлся MD4, однако он был не так надежен, поэтому был заменен более совершенным. При его работе осуществляется процесс преобразования первоначальной информации по определенному порядку в битную строчку определенного размера в шестнадцатеричной системе исчисления величин. Таким образом, хеш-код, хеш, хеш-сумма являются сходными понятиями.
Механизм работы MD5 заключаете в следующем. Поток информации, поступающий на устройство, проходит процесс хеширования, состоящий из пяти этапов:
- Поток данных подвергается обязательному выравниванию. Единичный бит добавляется в конец списка. Затем добавляются нулевые биты, чтобы длина линии информации была сопоставима с 448. То есть информация представляется в виде такого уравнения: L = 512 x N + 448. Этот процесс происходит, даже если размер уже сопоставим с текущим значением.
- Затем в сообщение добавляется 64 бита. Вначале идут 4 младших байта, затем старшие. На данном этапе протяженность потока должна быть кратна 512.
- Процесс инициализации буфера. Четыре 32-хбитные переменные проходят инициализацию. Затем происходит присваивание начальных значений шестнадцатеричным величинам. В операции участвует 4 функции, она проходит 4 раунда соответственно.
- Циклическое вычисление. Выбирается энный элемент из числа 512-битных массивов. Используются значения ABCD, перешедшие с предыдущего этапа. Работа также проходит в 4 этапа.
- Получение результата. В итоге получаем значение, ABCD, которое и является хешем.
Как получить хеш MD5
Если вам необходимо получить MD5 хеш от обычной строки текста, то удобней всего использовать онлайн сервисы. Одним из таких сервисов является .
Для того чтобы получить MD5 хеш с помощью этого сервиса достаточно ввести строку в поле и нажать на кнопку «Hash». Поле этого появится хеш введенной строки.
Если же вам нужно получить MD5 хеш файла, то придётся использовать специальные программы, например, MD5summer (
Бывает, что забудешь код от входной двери, и стоишь, ждешь того, у кого память лучше твоей. Хотя самая лучшая память у ученых. Они еще помнят те времена, когда им за новые знания пятки каленым железом прижигали. Иначе бы они не придумали такую страшную штуку, как расшифровка MD5
. А до этого они умудрились ее еще и зашифровать!
Какими свойствами должна обладать хеш-функция
- Функция должна уметь приводить любой объем данных (а все они цифровые, т.е. двоичные, как вы понимаете) к числу заданной длины (по сути это сжатие до битовой последовательности заданной длины хитрым способом).
- При этом малейшее изменение (хоть на один бит) входных данных должно приводить к полному изменению хеша.
- Она должна быть стойкой в обратной операции, т.е. вероятность восстановления исходных данных по хешу должна быть весьма низкой (хотя последнее сильно зависит от задействованных мощностей)
- В идеале она должна иметь как можно более низкую вероятность возникновения коллизий. Согласитесь, что не айс будет, если из разных массивов данных будут часто получаться одни и те же значения хэша.
- Хорошая хеш-функция не должна сильно нагружать железо при своем исполнении. От этого сильно зависит скорость работы системы на ней построенной. Как я уже говорил выше, всегда имеется компромисс между скорость работы и качеством получаемого результата.
- Алгоритм работы функции должен быть открытым, чтобы любой желающий мог бы оценить ее криптостойкость, т.е. вероятность восстановления начальных данных по выдаваемому хешу.
Применения в реальной жизни
- Чек-суммы. Простой и быстрый способ проверить целостность большого передаваемого файла — посчитать хэш-функцию на стороне отправителя и на стороне получателя и сравнить.
- Хэш-таблица. Класс unordered_set из STL можно реализовать так: заведём (n) изначально пустых односвязных списков. Возьмем какую-нибудь хэш-функцию (f) с областью значений ([0, n)). При обработке .insert(x) мы будем добавлять элемент (x) в (f(x))-тый список. При ответе на .find(x) мы будем проверять, лежит ли (x)-тый элемент в (f(x))-том списке. Благодаря «равномерности» хэш-функции, после (k) добавлений ожидаемое количество сравнений будет равно (frac{k}{n}) = (O(1)) при правильном выборе (n).
- Мемоизация. В динамическом программировании нам иногда надо работать с состояниями, которые непонятно как кодировать, чтобы «разгладить» в массив. Пример: шахматные позиции. В таком случае нужно писать динамику рекурсивно и хранить подсчитанные значения в хэш-таблице, а для идентификации состояния использовать его хэш.
- Проверка на изоморфизм. Если нам нужно проверить, что какие-нибудь сложные структуры (например, деревья) совпадают, то мы можем придумать для них хэш-функцию и сравнивать их хэши аналогично примеру со строками.
- Криптография. Правильнее и безопаснее хранить хэши паролей в базе данных вместо самих паролей — хэш-функцию нельзя однозначно восстановить.
- Поиск в многомерных пространствах. Детерминированный поиск ближайшей точки среди (m) точек в (n)-мерном пространстве быстро не решается. Однако можно придумать хэш-функцию, присваивающую лежащим рядом элементам одинаковые хэши, и делать поиск только среди элементов с тем же хэшом, что у запроса.
Хэшируемые объекты могут быть самыми разными: строки, изображения, графы, шахматные позиции, просто битовые файлы.
Источники
- https://ru.crypto-news.io/articles/heshirovanie-ego-funkcii-i-svoistva.html
- https://zen.yandex.ru/media/info_law_society/shifrovanie-heshirovanie-kodirovanie-dannyh-razlichiia-i-primenenie-5d6168b0c31e4900ad8a4614
- https://habr.com/ru/post/93226/
- https://KtoNaNovenkogo.ru/voprosy-i-otvety/xesh-chto-eto-takoe-xesh-funkciya.html
- https://coderlessons.com/tutorials/akademicheskii/izuchite-kriptografiiu/kriptografiia-khesh-funktsii
- https://OptimaKomp.ru/chto-takoe-khesh-summa-fajjla-zachem-i-kak-ejo-zameryat/
- https://vellisa.ru/hashtab-kontrolnyie-summyi-fayla
- https://algorithmica.org/ru/hashing
История и Уязвимости MD5
MD5 был изобретен Рональдом Ривестом, но это только один из трех его алгоритмов.
Первая хеш-функция, которую он разработал, была MD2 в 1989 году, которая была построена для 8-битных компьютеров. Хотя MD2 все еще используется, он не предназначен для приложений, которым требуется высокий уровень безопасности, поскольку было показано, что он уязвим для различных атак.
Затем MD2 был заменен на MD4 в 1990 году. MD4 был создан для 32-разрядных машин и был намного быстрее, чем MD2, но, как было установлено, имел слабые стороны, и в настоящее время он считается устаревшим в Internet Engineering Task Force.
MD5 был выпущен в 1992 году и был также построен для 32-битных машин. MD5 не так быстр, как MD4, но считается более безопасным, чем предыдущие реализации MDx.
Университет Инженерии программного обеспечения Университета Карнеги-Меллона может сказать о MD5 следующее:
В 2008 году MD6 был предложен Национальному институту стандартов и технологий в качестве альтернативы SHA-3. Вы можете прочитать больше об этом предложении здесь .
Кто уложил 1С, или мониторинг загрузки кластера в разрезе пользователей с помощью Grafana
Мониторингом различных параметров работы кластера 1С в zabbix сейчас уже никого не удивишь. Собственно потребление памяти, процов и места на серверах обычно настраивают первыми. Потом идет мониторинг в разрезе rphost’ов и различные метрики функционирования SQL сервера. Но вот когда уже все это есть, то временами возникает вопрос — какой же конкретно нехороший человек пытается съесть все (ну не все, но много) ресурсы сервера?
Можно смотреть в консоль кластера и ловить редиску там. Можно анализировать журнал регистраций, включать технологический журнал или накапливать статистку в специализированных базах 1С. Но, «настоящим» сисадминам проще как-то с внешними скриптами, базами данных и, например, Grafana. Расскажу что у нас получилось.
1 стартмани
Получение контрольной суммы файла средствами Windows
Для начала потребуется запустить Windows PowerShell: проще всего использовать поиск в панели задач Windows 10 или меню Пуск Windows 7 для этого.
Команда, позволяющая вычислить хэш для файла в PowerShell — Get-FileHash, а чтобы использовать ее для вычисления контрольной суммы достаточно ввести ее со следующими параметрами (в примере вычисляется хэш для образа ISO Windows 10 из папки VM на диске C):
При использовании команды в таком виде, хэш вычисляется по алгоритму SHA256, но поддерживаются и другие варианты, задать которые можно с помощью параметра -Algorithm, например, для вычисления контрольной суммы MD5 команда будет выглядеть как в примере ниже
При этом поддерживаются следующие значение для алгоритмов вычисления контрольной суммы в Windows PowerShell
- SHA256 (по умолчанию)
- MD5
- SHA1
- SHA384
- SHA512
- MACTripleDES
- RIPEMD160
Подробное описание синтаксиса команды Get-FileHash доступно также на официальном сайте https://technet.microsoft.com/en-us/library/dn520872(v=wps.650).aspx
Динамическое хеширование
Описанные выше
методы хеширования являются статическими, т.е. сначала выделяется некая
хеш-таблица, под ее размер подбираются константы для хеш-функции. К сожалению,
это не подходит для задач, в которых размер базы данных меняется часто и значительно
. По мере роста базы данных можно
- пользоваться
изначальной хеш-функцией, теряя производительность из-за роста коллизий; - выбрать
хеш-функцию «с запасом», что повлечет неоправданные потери дискового
пространства; - периодически
менять функцию, пересчитывать все адреса. Это отнимает очень много
ресурсов и выводит из строя базу на некоторое время.
Существует техника,
позволяющая динамически менять размер хеш-структуры . Это – динамическое
хеширование. Хеш-функция генерирует так называемый псевдоключ (“pseudokey”), который используется лишь частично для доступа к элементу. Другими
словами, генерируется достаточно длинная битовая последовательность, которая
должна быть достаточна для адресации всех потенциально возможных элементов. В
то время, как при статическом хешировании потребовалась бы очень большая
таблица (которая обычно хранится в оперативной памяти для ускорения доступа),
здесь размер занятой памяти прямо пропорционален количеству элементов в базе
данных. Каждая запись в таблице хранится не отдельно, а в каком-то блоке (“bucket”). Эти блоки совпадают с физическими блоками на устройстве хранения
данных. Если в блоке нет больше места, чтобы вместить запись, то блок делится
на два, а на его место ставится указатель на два новых блока.
Как рассчитать хеш (контрольную сумму)
В Linux имеются программы для расчёта и сверки популярных хешей:
- b2sum – вычисляет и проверяет криптографическую хеш-функцию BLAKE2 (512-бит)
- cksum – печатает контрольную сумму CRC и количество байт
- md5sum – печатает или проверяет контрольную сумму MD5 (128-бит)
- sha1sum – печатает или проверяет контрольную сумму SHA1 (160-бит)
- sha224sum – печатает или проверяет контрольную сумму SHA224 (224- бит)
- sha256sum – печатает или проверяет контрольную сумму SHA256 (256- бит)
- sha384sum – печатает или проверяет контрольную сумму SHA384 (384- бит)
- sha512sum – печатает или проверяет контрольную сумму SHA512 (512- бит)
Информация о SHA-2 (безопасный алгоритм хеширования, версия 2) – семействе криптографических алгоритмов (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224.): https://ru.wikipedia.org/wiki/SHA-2
Все эти программы установлены по умолчанию в большинстве дистрибутивов Linux, они позволяют рассчитать хеши для файлов или для строк.
Применение всех этих программ похожее – нужно указать имя файла, либо передать по стандартному вводу строку.
Если для расчёта хеша строки вы используете echo, то крайне важно указывать опцию -n, которая предотвращает добавление символа новой строки – иначе каждый хеш для строки будет неверным!
Пример подсчёта хеша SHA1 для строки test:
echo -n 'test' | sha1sum a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 -
Ещё один способ передачи строки без добавления конечного символа newline
printf '%s' 'test' | md5sum
Как можно заметить, после хеша следует пробел и имя файла (в случае стандартного ввода – указывается тире), чтобы показать только хеш, можно использовать к команде добавить | awk ‘{print $1}’ или | cut -d» » -f1:
echo -n 'test' | sha1sum | awk '{print $1}'
Этот же результат можно получить следующей конструкцией:
echo -n 'test' | sha1sum | cut -d" " -f1
О популярных хэш-алгоритмах
- Алгоритмы CRC16/32 — контрольная сумма (не криптографическое преобразование).
- Алгоритмы MD2/4/5/6 . Являются творением Рона Райвеста, одного из авторов алгоритма RSA.
- Алгоритм MD5 имел некогда большую популярность, но первые предпосылки взлома появились еще в конце девяностых, и сейчас его популярность стремительно падает.
- Алгоритм MD6 — очень интересный с конструктивной точки зрения алгоритм. Он выдвигался на конкурс SHA-3, но, к сожалению, авторы не успели довести его до кондиции, и в списке кандидатов, прошедших во второй раунд этот алгоритм отсутствует.
- Алгоритмы линейки SHA. Широко распространенные сейчас алгоритмы. Идет активный переход от SHA-1 к стандартам версии SHA-2. SHA-2 — собирательное название алгоритмов SHA224, SHA256, SHA384 и SHA512. SHA224 и SHA384 являются по сути аналогами SHA256 и SHA512 соответственно, только после расчета свертки часть информации в ней отбрасывается. Использовать их стоит лишь для обеспечения совместимости с оборудованием старых моделей.
Специфика криптографических хэш-функций
Рассмотрим более подробно, каким образом исследуемые нами типы алгоритмов могут задействоваться в сфере криптографии. Ключевое требование к соответствующим функциям — стойкость к коллизиям, о которых мы сказали выше. То есть не должны формироваться повторяющиеся значения хеш-функции, если значения эти уже присутствуют в структуре соседствующего алгоритма. Прочим отмеченным выше критериям криптографические функции также должны соответствовать. Понятно, что всегда есть некая теоретическая возможность восстановления исходного файла на основе хэша, особенно если в доступе есть мощный вычислительный инструмент. Однако подобный сценарий предполагается свести к минимуму, благодаря надежным алгоритмам шифрования. Так, вычислить хэш-функцию будет очень сложно, если ее вычислительная стойкость соответствует формуле 2^{n/2}.
Другой важнейший критерий криптографического алгоритма — изменение хэша в случае корректировки изначального массива данных. Выше мы отметили, что стандарты шифрования должны обладать чувствительностью на уровне 1 бита. Так, данное свойство — ключевой фактор обеспечения надежной парольной защиты доступа к файлам.
Объект CAPICOM.HashedData
Код для строки:
&НаКлиенте
Процедура MD5(СтрокаДляХеширования)
Crypt = Новый COMОбъект(«CAPICOM.HashedData»);
Crypt.Algorithm = 3;
Crypt.Hash(СтрокаДляХеширования);
Сообщить(Crypt.Value);
КонецПроцедуры
1 2 3 4 5 6 7 8 9 |
&НаКлиенте Процедура MD5(СтрокаДляХеширования) Crypt = Новый COMОбъект(«CAPICOM.HashedData»); Crypt.Algorithm = 3; Crypt.Hash(СтрокаДляХеширования); Сообщить(Crypt.Value); |
Код для файла:
&НаКлиенте
Процедура ПервыйСпособ(Команда)
Crypt = Новый COMОбъект(«CAPICOM.HashedData»);
Crypt.Algorithm = 3;
Stream = Новый COMОбъект(«ADODB.Stream»);
Stream.Type = 1;
Stream.Open();
Stream.LoadFromFile(ИмяФайла);
Пока НЕ Stream.EOS Цикл
Crypt.Hash(Stream.Read());
КонецЦикла;
Сообщить(Crypt.Value);
КонецПроцедуры
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
&НаКлиенте Процедура ПервыйСпособ(Команда) Crypt = Новый COMОбъект(«CAPICOM.HashedData»); Crypt.Algorithm = 3; Stream = Новый COMОбъект(«ADODB.Stream»); Сообщить(Crypt.Value); |
К плюсам данного способа следует отнести простоту, элегантность и универсальность — свойство Algorithm может принимать следующие значения:
- 0 — SHA1;
- 1 — MD2;
- 2 — MD4;
- 3 — MD5;
- 4 — SHA-256;
- 5 — SHA-384;
- 6 — SHA-512.
Но у этого способа есть один очень серьезный минус — библиотека CAPICOM.HashedData присутствует только в Windows не старше Vista/Server 2008.
Хеши MD5 [ править ]
128-битные (16-байтовые) хэши MD5 (также называемые дайджестами сообщений ) обычно представлены как последовательность из 32 шестнадцатеричных цифр. Следующее демонстрирует 43-байтовый ввод ASCII и соответствующий хэш MD5:
MD5 (« Быстрая коричневая лисица перепрыгивает через ленивого пса ») =
Даже небольшое изменение в сообщении (с огромной вероятностью) приведет к в основном другому хешу из-за эффекта лавины . Например, добавив точку в конце предложения:
MD5 (« Быстрая коричневая лиса перепрыгивает через ленивую собаку . ») =
Хеш строки нулевой длины:
MD5 ("") =
Алгоритм MD5 предназначен для сообщений, состоящих из любого количества бит; он не ограничен числами , кратными восьми битам ( октетам , байтам ). Некоторые реализации MD5, такие как md5sum, могут быть ограничены октетами или могут не поддерживать потоковую передачу сообщений изначально неопределенной длины.
Безопасное хранение паролей с помощью хеш-функций
Пусть есть у нас социальная сеть, база данных или прочее, где может быть вход по логину и паролю. Чтобы система проверила, правильно ли введён пароль, требуется где-то хранить пароли. Хранить пароль в открытом виде
не рекомендуется.
Причины:
- Любой файл можно открыть блокнотом и просмотреть.
- Если хранить в реестре, то также можно проследить обращение программы к реестру и обнаружить то место где хранятся пароли.
- Скомпилированную программу (exe файл) можно вскрыть дизассемблером (например ida pro) и отследить обращение к месту сравнения пароля (например soft-ice)
Таким образом если пароль хранится в открытом виде его легко можно обнаружить.
Чтобы хранить пароль в зашифрованном виде можно прибегнуть к хешированию — использовать хеш-функции с длинными хеш-значениями.
Вместо паролей будем хранить их хеш-значения. Пользователь вводит при входе логин и пароль. В файле по логину ищется нужный хеш. Он сравнивается с хешем того, что введено в поле «пароль» пользователем. Если равны, то пользователя пропускают, иначе — нет.
Если кто-то залезет в файл с данными пользователей (где хранится логин и пароли), вместо паролей он увидит хеши.
Наглядно эту схему защищённого хранения паролей с помощью хеширования можно нарисовать так:
В криптографии традиционно значение f пишут не как обычное десятично число, а в двоичной или 16-ичной системе(026f8e459c8f89ef75fa7a78265a0025), и это называют хеш-значением или просто хешем.
Делфи есть библиотека «IdHashMessageDigest» (если установлен пакет indy) она содержит функции с 128 битным алгоритмом хеширования.
Пример
Uses IdHashMessageDigest; … function md5(S: string): string; var md5indy: TIdHashMessageDigest; hash, HEXhash, Base: string; begin md5indy:=TIdHashMessageDigest5.Create;//создаем экземпляр объекта hash:=StringOf(md5indy.HashString(S)); //получаем MD5-хэш HEXhash:=md5indy.HashStringAsHex(Base);//тот же хэш, но в HEX-форме end; |
Результат: На входе строка на выходе 128 битный хеш.
Здесь метод HashString принимает на входе строку, вычисляет хэш и возвращает его в виде массива байтов (TidBytes). Поэтому дополнительно мы преобразуем этот массив в строку, используя функцию StringOf.
Метод HashStringAsHex также вычисляет MD5-хэш, но в дополнение сразу же его переводит в HEX-форму.
Как проверить файл в md5sum, если имеется только MD5 хеш
Для сверки файла с MD5 хешем в md5sum, эта программа требует файл с md5 хешем в формате:
К примеру, если хеш сохранён в файл test.txt.md5, то проверка выполняется так:
md5sum -c test.txt.md5
Проверяемые файлы указывать нельзя, поскольку их имена берутся из файла test.txt.md5.
Возможна ситуация, что файл test.txt.md5 содержит только MD5 хеш (без пробелов и имени файла) — в этом случае проверка хеша завершится неудачей.
Итак:
- test.txt — файл, который нужно сверить по хешу
- test.txt.md5 — файл с хешем (без имени файла внутри)
Поскольку имя файла известно, мы можем просто напечатать содержимое файла с хешем, пару пробелов и затем имя файла и всё это передать в md5sum:
cat test.txt.md5 5a6d311c0d8f6d1dd03c1c129061d3b1 md5sum -c <(printf "%s test.txt\n" $(cat test.txt.md5)) test.txt: OK
Другая опция — добавить имя файла в файл с хешем:
sed -i 's/$/ test.txt/' test.txt.md5 md5sum -c test.txt.md5 test.txt: OK
Можно заново посчитать контрольную сумму MD5 для файла и сравнить её с хранимой в test.txt.md5:
cmp test.txt.md5 <(md5sum test.txt | cut -d\ -f1)
Вариант этой же команды:
md5sum test.txt | cut -d' ' -f1 | cmp test.txt.md5
Проблемы надежности MD5
Казалось бы, такая характеристика MD5 должна обеспечивать 100% гарантии неуязвимости и сохранения данных. Но даже этого оказалось мало. В ходе проводимых исследований учеными был выявлен целый ряд прорех и уязвимостей в этом уже распространенном на тот момент алгоритме. Основной причиной слабой защищенности MD5 является относительно легкое нахождение коллизий при шифровании.
Под коллизией понимают возможность получения одинакового результата вычислений хеш-функции при разных входных значениях.
Проще говоря, чем больше вероятность нахождения коллизий, тем надежность используемого алгоритма ниже. Вероятность нахождения коллизий при шифровании более надежными хеш-функциями практически сводится к 0.
То есть большая вероятность расшифровки паролей MD5 является основной причиной отказа от использования этого алгоритма. Многие криптологи (специалисты по шифрованию данных) связывают низкую надежность MD5 с малой длиной получаемого хеш-кода.
Область применения алгоритма хеширования:
- Проверка целостности файлов, полученных через интернет – многие инсталляционные пакеты программ снабжены хеш-кодом. Во время активации приложения его значение сравнивается со значением, расположенным в базе данных разработчика;
- Поиск в файловой системе продублированных файлов – каждый из файлов снабжен своим хеш-кодом. Специальное приложение сканирует файловую систему компьютера, сравнивая между собой хеши всех элементов. При обнаружении совпадения утилита оповещает об этом пользователя или удаляет дубликат. Одной из подобных программ является Duplifinder:
Свойства
Получает значение, указывающее на возможность повторного использования текущего преобразования. (Унаследовано от HashAlgorithm) |
|
Если переопределено в производном классе, возвращает значение, указывающее, возможно ли преобразование нескольких блоков. (Унаследовано от HashAlgorithm) |
|
Получает значение вычисленного хэш-кода. (Унаследовано от HashAlgorithm) |
|
Получает размер вычисленного хэш-кода в битах. (Унаследовано от HashAlgorithm) |
|
При переопределении в производном классе получает размер входного блока. (Унаследовано от HashAlgorithm) |
|
При переопределении в производном классе получает размер выходного блока. (Унаследовано от HashAlgorithm) |
Случаи применения
Используйте хеш-функцию, если вы хотите сравнить значение, но не можете сохранить простое представление (по любому количеству причин). Пароли должны очень хорошо соответствовать этому варианту использования, поскольку вы не хотите хранить их в виде обычного текста по соображениям безопасности (и не должны). Но что, если вы хотите проверить файловую систему на наличие пиратских музыкальных файлов? Было бы непрактично хранить 3 Мб на музыкальный файл. Поэтому вместо этого возьмите хэш файла и сохраните его (md5 будет хранить 16 байтов вместо 3 МБ). Таким образом, вы просто хешируете каждый файл и сравниваете его с сохраненной базой данных хэшей (на практике это не работает из-за перекодирования, изменения заголовков файлов и т. Д., Но это пример использования).
Используйте хеш-функцию при проверке достоверности входных данных. Вот для чего они созданы. Если у вас есть 2 элемента ввода и вы хотите проверить, совпадают ли они, запустите оба с помощью хеш-функции. Вероятность коллизии астрономически мала для небольших входных данных (при условии хорошей хэш-функции). Вот почему это рекомендуется для паролей. Для паролей длиной до 32 символов md5 имеет в 4 раза больше места для вывода. SHA1 имеет в 6 раз больше места для вывода (приблизительно). SHA512 имеет примерно в 16 раз больше места для вывода. Вы на самом деле не волнует , что пароль был , то все равно , если это так же , как тот , который был сохранен. Вот почему вы должны использовать хеши для паролей.
Используйте шифрование всякий раз, когда вам нужно вернуть входные данные
Обратите внимание на слово « необходимость». Если вы храните номера кредитных карт, вам нужно будет вернуть их в какой-то момент, но не хотите хранить их в виде обычного текста
Поэтому вместо этого сохраните зашифрованную версию и храните ключ как можно безопаснее.
Хеш-функции также отлично подходят для подписи данных. Например, если вы используете HMAC, вы подписываете часть данных, беря хэш данных, объединенный с известным, но не переданным значением (секретное значение). Итак, вы отправляете простой текст и хеш HMAC. Затем получатель просто хеширует представленные данные с известным значением и проверяет, соответствует ли оно переданному HMAC. Если это то же самое, вы знаете, что это не было нарушено партией без секретной ценности. Это обычно используется в защищенных системах cookie с помощью HTTP-фреймворков, а также при передаче данных через HTTP, где требуется некоторая гарантия целостности данных.
подводить итоги
Проблема, анализируемая в этой статье, на самом деле заключается в том, что, когда злоумышленник получает базу данных, как мы можем гарантировать, что злоумышленник не сможет «расшифровать» пароль пользователя. В качестве последнего средства защиты конфиденциальной информации пользователя выберите безопасный и подходящий способ Важный. Способность злоумышленника взломать пароль пользователя обычно зависит от двух условий:
-
Является ли используемый алгоритм шифрования достаточно безопасным, и стоимость использования взлома методом перебора очень высока;
-
Достаточно хорошая аппаратная поддержка для поддержки крупномасштабного высокоскоростного вычисления хеша;
Способ защиты от злоумышленников заключается в том, чтобы увеличить стоимость одного запуска алгоритма. Когда мы изменяем трудоемкую проверку пользователя сПоднято доВычислительная стоимость злоумышленника также увеличилась в 5000 раз, в результате чего взлом пароля, который ранее занимал несколько часов, теперь занимает несколько лет.
не важно что,Хранение паролей небезопасно при использовании соления MD5, MD5 или других методов хеширования.Я надеюсь, что инженеры могут избежать использования MD5 в таких сценариях.В других сценариях, где должны использоваться хэш-функции, также рекомендуется использовать другие алгоритмы, такие как SHA-512. Конечно, обеспечение безопасности конфиденциальной информации пользователя — это не просто криптографическая проблема, это также инженерная проблема
Пропуск любого разработчика проекта может привести к инцидентам безопасности, поэтому мы, разработчики, должны также быть осторожными при работе с конфиденциальной информацией. Будьте осторожны и в страхе. В конце давайте посмотрим на некоторые более открытые вопросы. Заинтересованные читатели могут внимательно рассмотреть следующие вопросы:
Конечно, обеспечение безопасности конфиденциальной информации пользователя — это не просто криптографическая проблема, это также инженерная проблема. Пропуск любого разработчика проекта может привести к инцидентам безопасности, поэтому мы, разработчики, должны также быть осторожными при работе с конфиденциальной информацией. Будьте осторожны и в страхе. В конце давайте посмотрим на некоторые более открытые вопросы. Заинтересованные читатели могут внимательно рассмотреть следующие вопросы:
-
Сколько хешей MD5 (порядков величины) можно вычислить в секунду с помощью графического процессора? Как долго я могу взломать пароль с солью MD5?
-
Предполагая, что для вычисления хеша требуется времяCrackСколько времени занимает хеш, сгенерированный алгоритмом?
-
MD5 хешМожет ли соответствующий оригинальный текст быть? Поговорите об инструментах, которые вы используете, и о процессе расшифровки.
Вывод
Подводя итог, можно сказать, что протокол SHA-256 оказался чересчур легким и сегодня имеется целое множество специализированных девайсов (так называемые майнеры), которые успешно обходят его. С их появлением отпала необходимость майнить на процессоре или собирать фермы из видеокарт, поскольку ASIC-устройства позволяют своим владельцам заработать намного больше. Однако, у этого есть и обратная сторона. Использование майнеров слишком сильно централизует криптовалюту, а значит, необходимо внедрение новых протоколов хеширования. Таким алгоритмом стал Scrypt — куда более продвинутый защитный механизм, который требует значительной производительности и поэтому теоретически лишает специальные приборы особого преимущества.
С позиции рядового пользователя нет никакой разницы между протоколами SHA-256 и Scrypt. Можно майнить цифровую валюту своим компьютером или фермой на любом из данных протоколов.
Алгоритм SHA-256 на сегодняшний день занимает более 40% всего рынка, однако, вне всякого сомнения, имеются и другие. И в скором времени они потеснят прославленного предшественника. Так, из сравнительно свежих необходимо упомянуть об особенно «майнероустойчивом» протоколе Dagger, который собираются использовать в децентрализованной площадке Эфириум. Возможно, именно он примет эстафету лидера в области хеширования и займет место SHA-256.