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

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

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

  • Хеширование - это односторонний алгоритм; не может быть отменено
  • Обфускация похожа на шифрование, но не требует никаких «секретов» для понимания (ROT13 - один из примеров)
  • Шифрование обратимо, но для этого требуется "секрет".
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
35
0
24 719
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

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

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

  • Обфускация делает что-то труднее читать по символу замена.

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

AFAIK, хеширование всегда одностороннее.

Graeme Perrow 08.10.2008 23:13

«Шифрование похоже на хеширование, за исключением того, что значение зависит от другого значения, которое вы предоставляете алгоритму». Делает ли это шифрование полезным для других приложений, кроме хеширования? Вы можете привести несколько примеров? Может в ответах на эту тему увидеть @selwyn.

Stefan Verhagen 15.02.2018 07:46

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

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

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

srbrills 09.07.2020 20:53
Ответ принят как подходящий

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

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

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

Я бы классифицировал их как симметричные (общий секретный ключ) и асимметричные (общедоступные / частные).

tvanfosson 08.10.2008 23:30

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

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

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

Запутывание в криптографии - это кодирование входных данных. до - хешированные или зашифрованные.

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

Неплохое высокоуровневое описание. Вот еще несколько дополнительных соображений:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Шифрование - это функция лазейки? А хеш - это односторонняя функция? mathworld.wolfram.com/TrapdoorOne-WayFunction.html

Stefan Verhagen 15.02.2018 07:57

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

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

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

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

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

Другие вопросы по теме