Фундаментальное различие между алгоритмами Hashing и Encryption

Я вижу много путаницы между hashами и алгоритмами шифрования, и я хотел бы услышать еще несколько советов экспертов:

  1. Когда использовать hashи против шифрования

  2. Что отличает алгоритм хеширования или шифрования (от теоретического / математического уровня), т. Е. Делает хеши необратимыми (без помощи радужного дерева)

Вот некоторые похожие вопросы SO, которые не вдавались в детали, которые я искал:

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

Ну, вы можете посмотреть его в Википедии … Но так как вы хотите объяснения, я сделаю все возможное здесь:

Хэш-функции

Они обеспечивают отображение между произвольным вводом длины и выводом (обычно) фиксированной длины (или меньшей длины). Это может быть что угодно: от простого crc32 до полномасштабной криптографической hash-функции, такой как MD5 или SHA1 / 2/256/512. Дело в том, что происходит одностороннее отображение. Это всегда много: 1 сопоставление (что означает, что всегда будут столкновения), поскольку каждая функция производит меньший результат, чем он способен вводить (если вы подаете каждый возможный 1-мегабайтный файл в MD5, вы получите тонну столкновений).

Причина, по которой они трудны (или невозможны в практической реализации), наоборот, связана с тем, как они работают внутри страны. Большинство криптографических хеш-функций многократно повторяют множество входных данных для получения результата. Поэтому, если мы посмотрим на каждый отрезок фиксированной длины (который зависит от алгоритма), хеш-функция вызовет это текущее состояние. Затем он перебирает состояние и изменяет его на новый и использует в качестве обратной связи в себе (MD5 делает это 64 раза для каждого 512-битного fragmentа данных). Затем он каким-то образом объединяет результирующие состояния от всех этих итераций назад, чтобы сформировать результирующий хеш.

Теперь, если вы хотите декодировать hash, вам сначала нужно выяснить, как разбить данный hash на его итерированные состояния (1 возможность ввода меньше размера блока данных, многие для больших входов). Тогда вам нужно будет отменить итерацию для каждого состояния. Теперь, чтобы объяснить, почему это ОЧЕНЬ сложно, представьте себе попытку вывести a и b из следующей формулы: 10 = a + b . Есть 10 положительных комбинаций a и b которые могут работать. Теперь перейдем к этой цепочке: tmp = a + b; a = b; b = tmp tmp = a + b; a = b; b = tmp tmp = a + b; a = b; b = tmp . Для 64 итераций у вас будет более 10 ^ 64 возможностей попробовать. И это просто простое дополнение, где некоторое состояние сохраняется от итерации до итерации. Реальные хеш-функции выполняют намного больше, чем 1 операцию (MD5 делает около 15 операций над 4 переменными состояния). И так как следующая итерация зависит от состояния предыдущего и предыдущего, уничтожается при создании текущего состояния, все же невозможно определить входное состояние, которое привело к заданному состоянию выхода (для каждой итерации не менее). Объедините, что с большим количеством задействованных возможностей и декодированием даже MD5 будет принимать почти бесконечное (но не бесконечное) количество ресурсов. Настолько много ресурсов, что на самом деле значительно дешевле перебора hashа, если у вас есть представление о размере ввода (для небольших входов), чем даже пытаться декодировать хеш.

Функции шифрования

Они обеспечивают отображение 1: 1 между произвольной длиной ввода и вывода. И они всегда обратимы. Важно отметить, что он обратим с использованием некоторого метода. И это всегда 1: 1 для заданного ключа. Теперь есть несколько пар ввода: пары, которые могут генерировать один и тот же вывод (на самом деле, как правило, это зависит от функции шифрования). Хорошие зашифрованные данные неотличимы от случайного шума. Это отличается от хорошего hash-вывода, который всегда имеет согласованный формат.

Случаи использования

Используйте хеш-функцию, если вы хотите сравнить значение, но не можете сохранить простое представление (по каким-либо причинам). Пароли должны соответствовать этому варианту использования очень хорошо, поскольку вы не хотите хранить их в текстовом формате по соображениям безопасности (и не должны). Но что, если вы хотите проверить файловую систему на пиратские музыкальные файлы? Было бы нецелесообразно хранить 3 мб на музыкальный файл. Поэтому вместо этого возьмите hash файла и сохраните его (md5 будет хранить 16 байт вместо 3mb). Таким образом, вы просто обрабатываете каждый файл и сравниваете с хранимой базой данных hashей (это не работает также на практике из-за повторного кодирования, изменения заголовков файлов и т. Д., Но это пример использования).

Используйте хеш-функцию, когда вы проверяете достоверность входных данных. Для этого они предназначены. Если у вас есть 2 части ввода и вы хотите проверить, совпадают ли они, запустите их через хеш-функцию. Вероятность столкновения астрономически мала для небольших входных размеров (при условии хорошей hash-функции). Вот почему это рекомендуется для паролей. Для паролей длиной до 32 символов md5 имеет в 4 раза больше выходного пространства. SHA1 имеет в 6 раз больше выходного пространства (приблизительно). SHA512 имеет примерно в 16 раз больше выходного пространства. Вам все равно, что это за пароль, вам все равно, что он тот же, что и тот, который был сохранен. Вот почему вы должны использовать хеши для паролей.

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

Хэш-функции также отлично подходят для подписи данных. Например, если вы используете HMAC, вы подписываете часть данных, беря hash данных, объединенных с известным, но не переданным значением (секретное значение). Таким образом, вы отправляете простой текст и hash HMAC. Затем приемник просто hashирует представленные данные с известным значением и проверяет, соответствует ли он переданному HMAC. Если это то же самое, вы знаете, что это не было подделано стороной без секретной ценности. Это обычно используется в защищенных системах cookie с помощью инфраструктур HTTP, а также при передаче сообщений через HTTP, где вам нужна уверенность в целостности данных.

Заметка о hashах для паролей:

Ключевой особенностью криптографических хеш-функций является то, что они должны быть очень быстрыми, чтобы создавать, и очень трудно / медленно отменить (настолько, что это практически невозможно). Это создает проблему с паролями. Если вы храните sha512(password) , вы ничего не делаете для защиты от радужных таблиц или нападений с применением грубой силы. Помните, что функция hashа была разработана для скорости. Так что для злоумышленника тривиально просто запустить словарь через хеш-функцию и проверить каждый результат.

Добавление соли помогает в вопросах, так как добавляет немного неизвестных данных в hash. Поэтому вместо того, чтобы находить что-либо, что соответствует md5(foo) , им нужно найти что-то, что при добавлении к известной соли производит md5(foo.salt) (что намного сложнее сделать). Но он все еще не решает проблему скорости, поскольку, если они знают соль, это просто вопрос использования словаря.

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

 var hash = password + salt; for (var i = 0; i < 5000; i++) { hash = sha512(hash + password + salt); } 

Существуют и другие, более стандартные реализации, такие как PBKDF2 , BCrypt . Но этот метод используется довольно многими системами, связанными с безопасностью (такими как PGP, WPA, Apache и OpenSSL).

В нижней строке, hash(password) недостаточно. hash(password + salt) лучше, но все еще недостаточно хорош ... Используйте растянутый хеш-механизм для создания hashей паролей ...

Еще одно примечание о тривиальном растяжении

Ни в коем случае не кормите выход одного хеша прямо обратно в хеш-функцию :

 hash = sha512(password + salt); for (i = 0; i < 1000; i++) { hash = sha512(hash); // <-- Do NOT do this! } 

Причина этого связана с столкновениями. Помните, что все hash-функции имеют коллизии, потому что возможное пространство вывода (количество возможных выходов) меньше, чем входное пространство. Чтобы понять, почему, давайте посмотрим, что произойдет. Чтобы предисловие к этому, давайте предположим, что вероятность шанса столкновения с sha1() 0,001% (в действительности это намного меньше, но для демонстрационных целей).

 hash1 = sha1(password + salt); 

Теперь hash1 имеет вероятность столкновения 0.001%. Но когда мы делаем следующий hash2 = sha1(hash1); , все столкновения hash1 автоматически становятся столкновениями hash2 . Итак, теперь мы имеем показатель hash1 на 0.001%, и добавляет второй вызов sha1() . Итак, теперь hash2 имеет вероятность столкновения 0.002%. Это вдвое больше шансов! Каждая итерация добавит еще 0.001% вероятности столкновения с результатом. Таким образом, с 1000 итераций вероятность столкновения выскочила с тривиального 0,001% до 1%. Теперь деgradleация линейна, а реальные вероятности намного меньше, но эффект один и тот же (оценка вероятности единственного столкновения с md5 составляет около 1 / (2 128 ) или 1 / (3x10 38 ). что кажется маленьким, благодаря нападению на день рождения это не так мало, как кажется).

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

 hash = sha512(password + salt); for (i = 0; i < 1000; i++) { hash = sha512(hash + password + salt); } 

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

Хеш-функцию можно считать такой же, как выпекание буханки хлеба. Вы начинаете с входов (мука, вода, дрожжи и т. Д.), А после применения хеш-функции (смешивания + выпечки) вы получаете выход: буханку хлеба.

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

Многие различные варианты входов теоретически производят одинаковые хлебы (например, 2 чашки воды и 1 трлн дрожжей дают ровно столько же хлеба, сколько 2,1 чашки воды и 0,9 трлн дрожжей), но, учитывая один из этих хлебов, вы не можете сказать точно, какая комбинация вносила их.

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

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

Хэши берут некоторый ввод и превращают его в некоторые биты (обычно они считаются числом, например, 32-битным целым числом, 64-битным целым и т. Д.). Один и тот же вход всегда будет выдавать один и тот же hash, но вы ПРИНИМАЕТЕ ПОТЕРЯТЬ информацию в процессе, чтобы вы не могли достоверно воспроизвести исходный вход (есть некоторые предостережения).

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

Простой пример хеширования

Вот тривиальный пример, который поможет вам понять, почему хеширование не может (в общем случае) вернуть исходный ввод. Скажем, я создаю 1-битный hash. Моя хеш-функция принимает бит-строку в качестве входных данных и устанавливает хеш в 1, если в строке ввода четное количество бит, иначе 0, если было нечетное число.

Пример:

 Input Hash 0010 0 0011 1 0110 1 1000 0 

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

Кстати, этот 1-битный хеш не совсем надуман … взгляните на бит четности .

Простой пример шифрования

Вы можете зашифровать текст, используя простую замену букв, скажем, если вход A, вы пишете B. Если вход B, вы пишете C. Весь путь до конца алфавита, где, если вход Z, вы снова напишите A.

 Input Encrypted CAT DBU ZOO APP 

Подобно простому hash-примеру, этот тип шифрования использовался исторически .

Основной обзор методов хеширования и шифрования / дешифрования.

хеширования:

Если вы снова получите какой-либо простой текст, вы не сможете получить один и тот же простой текст из hashированного текста . Просто, это односторонний процесс.

хэширования


Шифрование и дешифрование:

Если вы снова зашифруете какой-либо простой текст с помощью ключа, вы можете получить тот же простой текст , выполнив дешифрование по зашифрованному тексту с помощью того же (симметричного) / diffrent (asymentric) ключа.

шифрование и дешифрование


ОБНОВЛЕНИЕ: для устранения точек, упомянутых в отредактированном вопросе.

1. Когда использовать hashи вместо шифрования

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

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


2. Что отличает алгоритм хеширования или шифрования (от теоретического / математического уровня), т. Е. Делает хеши необратимыми (без помощи радужного дерева)

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

Шифрование / дешифрование (реверсивный):

Дополнение :

 4 + 3 = 7 

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

 7 - 3 = 4 

Умножение :

 4 * 5 = 20 

Это можно отменить, взяв продукт и разделив на один из факторов

 20 / 4 = 5 

Итак, здесь мы могли предположить, что один из слагаемых / факторов является ключом decrpytion, а результат (7,20) является зашифрованным текстом.


Хеширование (не обратимо):

Раздел Modulo :

 22 % 7 = 1 

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

Вы можете найти операцию для заполнения, где «?» является?

 1 ? 7 = 22 1 ? 22 = 7 

Таким образом, функции hashа имеют то же математическое качество, что и модульное деление, и теряют информацию.

кредиты

Мой один лайнер … Обычно интервьюер хотел получить ответ ниже.

Хеширование – это один из способов. Вы не можете преобразовать свои данные / строку из hash-кода.

Шифрование – 2 пути – вы можете снова расшифровать зашифрованную строку, если у вас есть ключ.

Функция Hash превращает текстовый текст с переменным размером в текст фиксированного размера.

гашиш

Источник: https://en.wikipedia.org/wiki/Hash_function

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

Источник: https://en.wikipedia.org/wiki/Encryption

Давайте посмотрим на это в действии. Я использую php для этого.

HASH:

 $str = 'My age is 29'; $hash = hash('sha1', $str); echo $hash; // OUTPUT: 4d675d9fbefc74a38c89e005f9d776c75d92623e 

DEHASH:

SHA1 – односторонний хеш. Это означает, что вы не можете дешифровать hash. Однако вы можете перетащить hash. См. https://hashkiller.co.uk/sha1-decrypter.aspx . Вы можете найти MD5 dehasher на этом сайте: http://md5portal.com/ .

ENCRYPT:

 $cipher = MCRYPT_RIJNDAEL_128; $key = 'A_KEY'; $data = 'My age is 29'; $mode = MCRYPT_MODE_ECB; $encryptedData = mcrypt_encrypt($cipher, $key , $data , $mode); var_dump($encryptedData); //OUTPUT: string '„Ùòyªq³¿ì¼üÀpå' (length=16) 

расшифровывать:

 $decryptedData = mcrypt_decrypt($cipher, $key , $encryptedData, $mode); $decryptedData = rtrim($decryptedData, "\0\4"); // Remove the nulls and EOTs at the END var_dump($decryptedData); //OUTPUT: string 'My age is 29' (length=12) 

—— Редактировать ——————

Расширение Mcrypt было устарело в 7.1. и удалены в php 7.2. Расширение openssl может использоваться в этих версиях php. См. Фрагменты кода ниже:

 $key = 'A_KEY'; $data = 'My age is 29'; // ENCRYPT $encryptedData = openssl_encrypt($data , 'AES-128-CBC', $key, 0, 'IV_init_vector01'); var_dump($encryptedData); // DECRYPT $decryptedData = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, 0, 'IV_init_vector01'); var_dump($decryptedData); //OUTPUT string '4RJ8+18YkEd7Xk+tAMLz5Q==' (length=24) string 'My age is 29' (length=12) 

Симметричное шифрование:

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

введите описание изображения здесь

Асимметричное шифрование:

Асимметричное шифрование также известно как криптография с открытым ключом. Асимметричное шифрование отличается от симметричного шифрования главным образом тем, что используются два ключа: один для шифрования и один для дешифрования. Наиболее распространенным асимметричным алгоритмом шифрования является RSA .

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

введите описание изображения здесь

хеширования:

Наконец, хеширование – это форма криптографической защиты, которая отличается от шифрования. В то время как шифрование представляет собой двухэтапный процесс, используемый для первого шифрования и затем дешифрования сообщения, хеширование конденсирует сообщение в необратимое значение фиксированной длины или hash. Два из наиболее распространенных алгоритмов hashирования, встречающихся в сети, – MD5 и SHA-1 .

введите описание изображения здесь

Подробнее здесь: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/

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

  2. алгоритмы хеширования и алгоритмы шифрования – это просто математические алгоритмы. Поэтому в этом отношении они не различаются – все это всего лишь математические формулы. Семантика мудрая, однако, существует очень большое различие между hashированием (односторонним) и шифрованием (двусторонним). Почему хеши необратимы? Потому что они созданы таким образом, потому что иногда вам нужна односторонняя операция.

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

Многие хеш-функции фактически используют алгоритмы шифрования (или примитивы алгоритмов шифрования.Например, кандидат SHA-3 Skein использует Threefish в качестве базового метода для обработки каждого блока. Разница в том, что вместо того, чтобы хранить каждый блок зашифрованного текста, они разрушительны, детерминированно объединены с фиксированной длиной

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

когда дело доходит до авторизации, вы используете хеширование. В hashировании нет ключа

Хеширование принимает любой объем данных (двоичный или текстовый) и создает hash х постоянной длины, представляющий контрольную сумму для данных. Например, hash может составлять 16 байт. Различные алгоритмы hashирования создают hashи разных размеров. Вы, очевидно, не можете воссоздать исходные данные из хеша, но вы можете снова hash-данные, чтобы увидеть, генерируется ли то же значение hash-функции. Односторонние пароли на основе Unix работают таким образом. Пароль хранится как hash-значение, а для входа в систему вводится введенный вами пароль, а hash-значение сравнивается с хешем реального пароля. Если они совпадают, значит, вы должны ввести правильный пароль

почему хеширование необратимо:

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

Шифрование objective шифрования состоит в том, чтобы преобразовать данные, чтобы сохранить их в тайне. (Отсылая кому-то секретный текст, который они должны только читать, отправляя пароли через Интернет).

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

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

Шифрование может просто выглядеть так: FhQp6U4N28GITVGjdt37hZN

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

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

Если hash ошибочен и не соответствует хешу, мы не видим никакой информации. Например, (MD5, SHA …..)

Криптография имеет дело с числами и строками. В принципе, каждая цифровая вещь во всей вseleniumной – это числа. Когда я говорю цифры, его 0 и 1. Вы знаете, что это такое, двоичные. Изображения, которые вы видите на экране, музыку, которую вы слушаете через ваш наушник, – все это двоичные файлы. Но наши уши и глаза не будут понимать бинарные файлы? Только мозг мог понять это, и даже если бы он мог понять бинарные файлы, он не может пользоваться бинарниками. Поэтому мы конвертируем двоичные файлы в понятные для человека форматы, такие как mp3, jpg и т. Д. Назовем процесс « Кодирование» . Это двухсторонний процесс и может быть легко декодирован до его первоначальной формы.

хеширования

Хеширование – это еще один метод криптографии, в котором данные, однажды преобразованные в какую-либо другую форму, никогда не могут быть восстановлены. В терминах Лэймена нет процесса, называемого де-хешированием . Есть много хеш-функций для выполнения задания, такого как sha-512, md5 и т. Д.

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

Кредиты: wikimedia Применяя хеш к паролю, мы можем гарантировать, что злоумышленник никогда не получит наш пароль, даже если он украдет сохраненный файл паролей. У злоумышленника будет hash пароля. Вероятно, он может найти список наиболее часто используемых паролей и применить sha-512 к каждому из них и сравнить его со значением в руке. Это называется атакой словаря . Но как долго он это сделает? Если ваш пароль достаточно случайный, вы думаете, что этот метод взлома будет работать? Все пароли в базах данных Facebook, Google и Amazon hashированы, или, по крайней мере, они должны быть hashированы.

Затем есть шифрование

Шифрование заключено между hashированием и кодированием. Кодирование является двухсторонним процессом и не должно использоваться для обеспечения безопасности. Шифрование также является двухсторонним процессом, но исходные данные могут быть получены тогда и только тогда, когда известен ключ шифрования. Если вы не знаете, как работает шифрование, не волнуйтесь, мы обсудим основы здесь. Этого было бы достаточно, чтобы понять основы SSL. Таким образом, существует два типа шифрования, а именно симметричное и асимметричное шифрование.

Симметричное шифрование ключей

Я стараюсь держать все как можно проще. Итак, давайте разобраться в симметричном шифровании с помощью алгоритма сдвига. Этот алгоритм используется для шифрования алфавитов путем смещения букв влево или вправо. Возьмем строку CRYPTO и рассмотрим число +3. Тогда зашифрованный формат CRYPTO будет FUBSWR. Это означает, что каждая буква сдвигается вправо на 3 места. Здесь слово CRYPTO называется Plaintext , выход FUBSWR называется Ciphertext , значение +3 называется ключом шифрования (симметричный ключ), а весь процесс является шифром . Это один из старейших и базовых симметричных алгоритмов шифрования ключей, и его первое использование было сообщено во время Julius Caesar. Итак, он был назван в честь него, и это знаменитый Цезарский Шифр . Любой, кто знает ключ шифрования и может применять обратный алгоритм Цезаря и извлекать исходный Plaintext. Следовательно, это называется симметричным шифрованием .

Асимметричное шифрование ключей

Мы знаем, что в Symmetric encryption один и тот же ключ используется для шифрования и дешифрования. Когда этот ключ украден, все данные исчезли. Это огромный риск, и нам нужна более сложная техника. В 1976 году Уитфилд Диффи и Мартин Хеллман впервые опубликовали концепцию асимметричного шифрования, и алгоритм был известен как обмен ключами Диффи-Хеллмана . Затем в 1978 году Рон Ривест, Ади Шамир и Леонард Адлеман из Массачусетского технологического института опубликовали алгоритм RSA . Они могут рассматриваться как основа асимметричной криптографии.

По сравнению с симметричным шифрованием, в асимметричном шифровании вместо двух будут два ключа. Один из них называется открытым ключом , а другой – закрытым . Теоретически, во время инициализации мы можем сгенерировать пар ключей Public-Private на нашей машине. Частный ключ должен храниться в безопасном месте, и его никогда не следует делиться с кем-либо. Открытый ключ, как указано в названии, может быть предоставлен всем, кто хочет отправить вам зашифрованный текст. Теперь те, у кого есть ваш открытый ключ, могут шифровать с ним секретные данные. Если пара ключей была сгенерирована с использованием алгоритма RSA, тогда они должны использовать тот же алгоритм при шифровании данных. Обычно алгоритм будет указан в открытом ключе. Зашифрованные данные могут быть дешифрованы только с помощью секретного ключа, который принадлежит вам.

Источник: SSL / TLS для манекенов Часть 1: Ciphersuite, Хешинг, Шифрование | WST ( https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/ )

  • Шифрование / Расшифровка больших файлов (.NET)
  • Должен ли я налагать максимальную длину на пароли?
  • Java - шифрование / дешифрование имени пользователя и пароля из файла конфигурации
  • Самый простой способ шифрования текстового файла в java
  • Шифрование учетных данных в приложении WPF
  • Interesting Posts

    Windows 10 не удается подключиться к онлайн-серверу NTP

    Scala – метод ClassTag не доступен для T

    Есть ли способ обеспечить, чтобы конкретный USB-ключ всегда получал одну и ту же букву диска?

    Восстановление удаленных данных на SSD / USB Flash

    Android: получить текущее местоположение пользователя без использования gps или Интернета

    Есть ли эквивалент VB.NET для параметров C #?

    Как я могу отклонить все изменения в DataContext от Linq to SQL?

    Tmux и выбор текста с помощью мыши с помощью шпатлевки

    Печать всех флагов JVM

    Что означает установка Microsoft Office 2010 OEM?

    Windows не загружается при использовании режима загрузки UEFI

    Для циклов над диграфом в R не работает

    PowerPoint: отображать только объекты, относящиеся к определенному шагу анимации

    Как я могу заставить FileZilla игнорировать папку или файлы (например, .svn или CVS)?

    Как использовать элемент управления WebBrowser Событие DocumentCompleted в C #?

    Давайте будем гением компьютера.