В чем разница между обфускацией, хешированием и шифрованием? - PullRequest
30 голосов
/ 08 октября 2008

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

Вот мое понимание:

  • Хеширование - это односторонний алгоритм; не может быть отменено
  • Запутывание похоже на шифрование, но не требует никакого «секрета» для понимания (ROT13 является одним из примеров)
  • Шифрование обратимо, но для этого требуется «секрет»

Ответы [ 11 ]

29 голосов
/ 08 октября 2008

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

Обфускация обычно включает в себя попытку удалить полезные подсказки (то есть значимые имена переменных / функций), удалить пробелы, которые усложняют чтение, и, как правило, делать сложные вещи, чтобы усложнить отслеживание происходящего. Он не обеспечивает серьезного уровня безопасности, как это делает «истинное» шифрование.

Шифрование может следовать нескольким моделям, одной из которых является «секретный» метод, называемый шифрованием с закрытым ключом, когда обе стороны имеют секретный ключ. Шифрование с открытым ключом использует общий односторонний ключ для шифрования и закрытый ключ получателя для расшифровки. С открытым ключом только у получателя должен быть секрет.

7 голосов
/ 08 октября 2008

Это объяснение высокого уровня. Я постараюсь уточнить их:

Хеширование - в идеальном мире это случайный оракул. Для одного и того же входа 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 - открытый текст.

6 голосов
/ 09 октября 2008

A хеш - это односторонний алгоритм , используемый для сравнения входных данных со ссылкой без ущерба для ссылки.

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

Очень наивный и простой хеш: "Первые 3 буквы строки" . Это означает, что хешем "abcdefg" будет "abc". Эта функция, очевидно, не может быть отменена, что является целью хэша. Однако обратите внимание, что у "abcxyz" будет точно такой же хеш, это называется collision . Итак, еще раз: хэш только с определенной вероятностью доказывает, что два сравниваемых значения одинаковы .

Другой очень наивный и простой хеш - это 5-модуль числа, здесь вы увидите, что 6,11,16 и т. Д. Будут иметь одинаковый хеш: 1.

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

3 голосов
/ 08 октября 2008

Обфускация в криптографии кодирует входные данные до хеширования или шифрования.

Это делает атаки грубой силой менее осуществимыми, так как становится все труднее определить правильный открытый текст.

2 голосов
/ 08 октября 2008

Это неплохое описание высокого уровня. Вот некоторые дополнительные соображения:

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

Шифрование включает в себя хранение некоторых секретных данных, а безопасность секретных данных зависит от сохранения отдельного «ключа» в безопасности от злоумышленников.

Запутывание скрывает некоторую информацию без отдельного ключа (или с фиксированным ключом). В этом случае, сохраняя метод в секрете, вы сохраняете данные в безопасности.

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

2 голосов
/ 08 октября 2008

Вот как я всегда на это смотрел.

  • Хеширование получает значение из другой, используя алгоритм набора. В зависимости от используемого алгоритма, это может быть один из способов, а может и не быть.

  • Запутывание делает что-то труднее читать по символу замена.

  • Шифрование похоже на хеширование, за исключением того, что значение зависит от другого значения, предоставленного вами алгоритму.

1 голос
/ 09 октября 2008

Краткий ответ:

Хеширование - создание поля проверки для некоторых данных (чтобы определить, когда данные изменяются). Это односторонняя функция, и исходные данные не могут быть получены из хеша. Типичными стандартами для этого являются SHA-1, SHA256 и т. Д.

Запутывание - измените ваши данные / код, чтобы запутать кого-либо еще (без реальной защиты). Это может или не может потерять некоторые из исходных данных. Для этого нет реальных стандартов.

Шифрование - использование ключа для преобразования данных, чтобы его могли понять только те, у кого правильный ключ. Зашифрованные данные могут быть расшифрованы для получения исходных данных. Типичными стандартами являются DES, TDES, AES, RSA и т. Д.

0 голосов
/ 08 октября 2008

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

Как правило, разница между хешированием и шифрованием заключается в том, что хеширование обычно использует формулу для перевода данных в другую форму, где для шифрования используется формула, требующая ключ (ы) для шифрования / дешифрования. Примерами могут служить кодирование base 64, являющееся алгоритмом хеширования, где md5 - алгоритм шифрования. Любой может разархивировать данные в кодировке base64, но вы не можете расшифровать зашифрованные данные md5 без ключа.

0 голосов
/ 08 октября 2008
  • Хеширование - это односторонняя задача создания одного значения из другого. Алгоритм должен попытаться создать максимально короткое и уникальное значение.

  • запутывание делает что-то нечитаемым без изменения семантики. Он включает преобразование значения, удаление пробелов и т. Д. Некоторые формы запутывания также могут быть односторонними, поэтому невозможно получить начальное значение

  • шифрование двустороннее, и всегда существует некоторая расшифровка, работающая наоборот.

Итак, да, вы в основном правы.

0 голосов
/ 08 октября 2008

Запутывание скрывает или затрудняет понимание чего-либо.

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

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

...