Что такое и с какой целью необходимо использовать хэширование? Основные виды хэширования.Сложность: Новичок. Данная статья будет повествовать о том, что такое хэширование и какие алгоритмы хэширования используются в плагине crypto, а также будет приведена сравнительная таблица, в которой можно будет увидеть и сравнить характеристики тех или иных алгоритмов хэширования, поддерживаемых данным плагином. Вступление Раздел 1: Что такое хэширование и плагин crypto Раздел 2: SHA Раздел 3: MD5 Раздел 4: HMAC Сравнительная таблица Заключение Хэш (хеш) — это криптографическая функция, которая представляет собой математический алгоритм, преобразующий произвольный массив данных (информацию) в строку фиксированной длины, состоящую из цифр и букв.Как работает процесс хэширования: Вначале определяют, целостность каких файлов нужно контролировать. Для каждого файла производится вычисления значения его хэша по специальному алгоритму с сохранением результата. Через необходимое время производится аналогичный расчет и сравниваются результаты. Если значения отличаются, значит информация содержащаяся в файле была изменена. Основная особенность хэш-функций — это то, что их нельзя расхэшировать, невозможно вернуть единожды хэшированную строку данных в обратный читабельный вид.Где используется:Анализ при помощи хэш-функций часто используется для контроля целостности и сверки уникальности важных файлов операционной системы, программ, а также с целью защиты личных данных на просторах сети Интернет, таких как пароль, ключ или иное значение, которое не требует обратной расшифровки, но требует контроля/сравнения значений.Какими характеристиками должна обладать хэш-функция: Должна уметь выполнять преобразования данных произвольной длины в фиксированную. Должна иметь открытый алгоритм, чтобы можно было исследовать её криптостойкость. Должна быть односторонней, то есть не должно быть математической возможности по результату определить исходные данные. Должна "сопротивляться" коллизиям, т.е. не должна выдавать одинаковых значений при разных входных данных. Не должна требовать больших вычислительных ресурсов. При малейшем изменении входных данных результат должен существенно изменяться. Чтобы рассмотреть процесс хэширование во всей его красе, мы будем использовать сопутствующий плагин для фреймворка Flutter: crypto — сборник криптографических хэш-функций, написанный на чистом языке Dart, поддерживает такие платформы как Android, iOS, Linux, macOS, Windows, Web. Плагин поддерживает следующие алгоритмы: SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 (вдобавок SHA-512/224, SHA-512/256) MD5 HMAC (в том числе HMAC-MD5, HMAC-SHA1, HMAC-SHA256) SHA ("Secure Hash Algorithm") — одно из самых, если не самое популярное семейство алгоритмов хэширования. Всего есть 3 основных категории: SHA-1 — второй в семействе алгоритм криптографического хэширования, предшественником является SHA-0, который отозвали сославшись на ошибку и позже заменили улучшенной версией, вот этим самым SHA-1. Разработан и опубликован агентством национальной безопасности США в 1995 году, как стандарт для безопасного хэширования. Алгоритм построен на идее функции сжатия. SHA-2 — подсемейство криптографических хэш-функций (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256), также создано и опубликовано агентством национальной безопасности США, в этот стандарт вдобавок была добавлена функция SHA-1, разработанная в 1995 году. Алгоритмы SHA-2 построены на основе структуры Меркла-Дамгора. SHA-3 — Keccak, алгоритм хэширования, победитель конкурса на новый стандарт в 2012 году, который должен был заменить SHA-1 и SHA-2, но т.к. до сегодняшнего дня не было предложено серьезных атак на алгоритм SHA-2, переход на SHA-3 не является необходимым. Алгоритм построен по принципу криптографической губки. Т.к. в рассматриваемом плагине нет реализации данного алгоритма, могу предложить вашему вниманию плагин sha3, написанный на чистом языке Dart и реализующий необходимый функционал. Примеры хэш-функций c использованием алгоритма SHA (язык Dart): MD ("Message-Digest") — широко использовавшееся семейство хэш алгоритмов.  Включает в себя 6 версий: MD1 — закрытый алгоритм, спецификация которого не была опубликована.   MD2 — был разработан в 1989 году для использования в качестве одного из криптографических алгоритмов, а в 1990 году был предложен в качестве замены BMAC (Bidirectional MAC). MD3 — никогда не был опубликован, скорее всего разработка была заброшена. MD4 — разработан в 1990 году, из особенностей, используется в протоколе аутентификации MS-CHAP, разработанном корпорацией Майкрософт для выполнения процедур проверки подлинности удаленных рабочих станций Windows. MD5 — разработан в 1991 году, является самым популярным алгоритмом из всего семейства, до сегодняшнего дня повсеместно широко используется для проверки целостности информации и хэширования паролей. MD6 — разработан в 2008 году, не пользуется огромной популярностью в связи с заявленными самим разработчиком в нем недостатков и проигрыше в конкурсе 2008-2012 годах, в котором и победил новый алгоритм SHA-3, позже алгоритм был улучшен, но популярности ему это не прибавило. Пример хэш-функции c использованием алгоритма MD5 (язык Dart): HMAC ("Hash-based Message Authentication Code") — один из механизмов проверки целостности информации, позволяющий гарантировать то, что данные, передаваемые или хранящиеся в ненадёжной среде, не были изменены посторонними лицами. MAC — стандарт, описывающий способ обмена данными и способ проверки целостности передаваемых данных с использованием секретного ключа.  Два клиента, использующие MAC, как правило, используют общий секретный ключ. HMAC — надстройка над MAC, механизм обмена данными с использованием секретного ключа. В названии может уточняться используемая хеш-функция: HMAC-MD5, HMAC-SHA1, HMAC-RIPEMD160...Сам механизм был разработан в 1996 году, а в 1997 году был выпущена документация стандарта. В HMAC данные «смешиваются» с ключом, и хеш-функция применяется дважды. Преимущества HMAC: возможность использования хеш-функций, уже имеющихся в программном продукте. отсутствие необходимости внесения изменений в реализации существующих хеш-функций (внесение изменений может привести к ухудшению производительности и ухудшению криптостойкости). возможность замены хеш-функции в случае появления более безопасной или более быстрой хеш-функции. В обязательном порядке применяется для реализации протокола IPsec.  Пример хэш-функции с использованием HMAC и SHA-256 (язык Dart): Ссылка на таблицу SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 MD5 Год создания 1995 2004 2002 2002 2002 1991 Число раундов 80 64 64 80 80 64 Размер выхода 160 224 256 384 512 128 Размер блока 512 512 512 1024 1024 512 Размер длины 64 64 64 128 128 64 Размер слова 32 32 32 64 64 32 Взломан? Взломан Нет Нет Нет Нет Взломан, признан небезопасным Ссылки на документацию Ссылка Ссылка Ссылка Ссылка Ссылка Ссылка Также хотелось бы обратить ваше внимание на производительность хэш-функций (меньше - лучше): Данные производительности были взяты из этой статьи про производительность хэш-функций. Подводя итоги, можно сказать одно, что самыми криптостойкими алгоритмами за все время своего существования показало себя семейство SHA, в частности новый стандарт SHA-3 Keccak, который является пионером в плане защиты. Тем не менее, выбор используемого алгоритма для хэширования будет ещё зависеть не только от его безопасности, но и от его скорости, выбирайте с умом.  Программист/Тестировщик