В чем разница между обфускацией, хешированием и шифрованием?
Вот мое понимание:





Все в порядке, за исключением того, что обфускация на самом деле не похожа на шифрование - иногда она даже не включает такие простые шифры, как ROT13.
Я всегда так на это смотрел.
Хеширование извлекает ценность из другой, используя заданный алгоритм. В зависимости от используемого алгоритма это может быть один способ, а может и другой.
Обфускация делает что-то труднее читать по символу замена.
Шифрование похоже на хеширование, за исключением того, что значение зависит от другого значения, которое вы предоставляете алгоритму.
«Шифрование похоже на хеширование, за исключением того, что значение зависит от другого значения, которое вы предоставляете алгоритму». Делает ли это шифрование полезным для других приложений, кроме хеширования? Вы можете привести несколько примеров? Может в ответах на эту тему увидеть @selwyn.
Это объяснение высокого уровня. Попробую их доработать:
Хеширование - в идеальном мире это случайный оракул. Для одного и того же входа X вы всегда получаете один и тот же выход Y, который НИКОГДА не связан с X. Это математически невозможно (или, по крайней мере, не доказано, что это возможно). Самое близкое, что мы получаем, - это функции-лазейки. H (X) = Y, потому что с H-1 (Y) = X сделать так сложно, вам лучше попытаться перебрать Z так, чтобы H (Z) = Y
Обфускация (мое мнение) - Любая функция f, такая, что f (a) = b, где вы полагаетесь на то, что f является секретным. F может быть хэш-функцией, но часть «обфускации» подразумевает безопасность через неясность. Если бы вы никогда раньше не видели ROT13, это было бы запутывание
Шифрование - Ek (X) = Y, Dl (Y) = X, где E известен всем. k и l - ключи, они могут быть одинаковыми (в симметричном - одинаковыми). Y - это зашифрованный текст, X - это открытый текст.
Мне очень нравится этот ответ. Он указывает на то, что обфускация использует секретный алгоритм, тогда как шифрование использует известный алгоритм с секретными ключами. Вы наиболее защищены, если зашифруете и запутаете, потому что тогда все известные вещи станут неизвестными.
Хеширование - это метод создания полууникальных ключей на основе больших фрагментов данных. В данном хеш-коде у вас в конечном итоге будут «коллизии» (например, два разных фрагмента данных, вычисляющих одно и то же значение хеш-функции), и когда вы это делаете, вы обычно создаете больший размер хеш-ключа.
обфускация обычно включает в себя попытки удалить полезные подсказки (то есть значимые имена переменных / функций), удаление пробелов, которые затрудняют чтение, и, как правило, выполнение запутанных способов, чтобы усложнить отслеживание происходящего. Он не обеспечивает такого серьезного уровня безопасности, как «настоящее» шифрование.
Шифрование может следовать нескольким моделям, одна из которых является «секретным» методом, называемым шифрованием с закрытым ключом, когда обе стороны имеют секретный ключ. Шифрование с открытым ключом использует общий односторонний ключ для шифрования и закрытый ключ получателя для дешифрования. С открытым ключом секрет должен быть только у получателя.
Я бы классифицировал их как симметричные (общий секретный ключ) и асимметричные (общедоступные / частные).
Обфускация скрывает или затрудняет понимание чего-либо.
Хеширование принимает ввод, запускает его через функцию и генерирует вывод, который может быть ссылкой на ввод. Он не обязательно уникален, функция может генерировать один и тот же вывод для разных входов.
Шифрование уникальным образом преобразует входные данные в выходные. Существует взаимно однозначная корреляция, поэтому нет потенциальной потери данных или путаницы - выходные данные всегда можно преобразовать обратно во входные без неоднозначности.
Запутывание в криптографии - это кодирование входных данных. до - хешированные или зашифрованные.
Это делает атаки методом грубой силы менее возможными, так как становится труднее определить правильный открытый текст.
Неплохое высокоуровневое описание. Вот еще несколько дополнительных соображений:
Хеширование обычно уменьшает большой объем данных до гораздо меньшего размера. Это полезно, например, для проверки содержимого файла без необходимости сравнивать две копии.
Шифрование включает в себя хранение некоторых секретных данных, а безопасность секретных данных зависит от сохранения отдельного «ключа» от злоумышленников.
Обфускация - это скрытие некоторой информации без отдельного ключа (или с фиксированным ключом). В этом случае сохранение метода в секрете - это то, как вы сохраните данные в безопасности.
Из этого вы можете увидеть, как хеш-алгоритм может быть полезен для цифровых подписей и проверки контента, как шифрование используется для защиты ваших файлов и сетевых подключений и почему обфускация используется для управления цифровыми правами.
Хеширование - это односторонняя задача создания одной ценности из другой. Алгоритм должен попытаться создать как можно более короткое и уникальное значение.
обфускация делает что-то нечитаемым без изменения семантики. Он включает в себя преобразование значений, удаление пробелов и т. д. Некоторые формы обфускации также могут быть односторонними, поэтому получить начальное значение невозможно.
шифрование двустороннее, и всегда есть какое-то дешифрование, работающее наоборот.
Так что да, вы в основном правы.
Обфускация просто затрудняет понимание чего-либо, вводя в заблуждение методы. Обфускаторы кода обычно делают это, переименовывая объекты, чтобы удалить что-либо значимое из имен переменных или методов. Это не похоже на шифрование в том смысле, что для использования ничего не нужно расшифровывать.
Как правило, разница между хешированием и шифрованием заключается в том, что хеширование обычно просто использует формулу для перевода данных в другую форму, где шифрование использует формулу, требующую ключа (ов) для шифрования / дешифрования. Примерами могут быть кодирование base 64, являющееся хеш-алгоритмом, где md5 - алгоритм шифрования. Кто угодно может расшифровать данные в кодировке base64, но вы не можете расшифровать зашифрованные данные md5 без ключа.
Краткий ответ:
Хеширование - создание поля проверки для некоторых данных (для определения, когда данные изменены). Это односторонняя функция, и исходные данные не могут быть получены из хэша. Типичные стандарты для этого - SHA-1, SHA256 и т. д.
Обфускация - измените свои данные / код, чтобы запутать кого-либо (реальной защиты нет). Это может привести к потере или сохранению некоторых исходных данных. Для этого нет настоящих стандартов.
Шифрование - использование ключа для преобразования данных, чтобы их могли понять только те, у кого есть правильный ключ. Зашифрованные данные можно расшифровать для получения исходных данных. Типичные стандарты - DES, TDES, AES, RSA и т. д.
Шифрование - это функция лазейки? А хеш - это односторонняя функция? mathworld.wolfram.com/TrapdoorOne-WayFunction.html
хэш - это односторонний алгоритм, используемый для сравнить ввод со ссылкой без ущерба для ссылки.
Он обычно используется в логинах для сравнения паролей, и вы также можете найти его в своем рецепте, если делаете покупки с использованием кредитной карты. Там вы найдете номер своей кредитной карты с некоторыми скрытыми номерами, таким образом вы можете доказать с высокой проходимостью, что ваша карта использовалась для покупки вещей, в то время как кто-то, просматривающий ваш мусор, не сможет найти номер вашей карты.
Очень наивный и простой хеш - это «Первые 3 буквы строки». Это означает, что хэш «abcdefg» будет «abc». Эту функцию, очевидно, нельзя отменить, что и является всей целью хеширования. Однако обратите внимание, что «abcxyz» будет иметь точно такой же хэш, это называется столкновение. Итак, еще раз: a хэш только с определенной вероятностью доказывает, что два сравниваемых значения совпадают.
Еще один очень наивный и простой хеш - это 5-модуль числа, здесь вы увидите, что 6,11,16 и т. д. Будут иметь один и тот же хеш: 1.
Современные хеш-алгоритмы предназначены для минимального количества конфликтов, но полностью избежать их невозможно. Практическое правило: чем длиннее ваш хэш, тем меньше в нем конфликтов.
AFAIK, хеширование всегда одностороннее.