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

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

  • Когда использовать хэши против шифрования

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

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

В чем разница между Obfuscation, Hashing и Encryption?
Разница между шифрованием и хешированием

Ответ 1

Хорошо, вы могли бы найти его в Wikipedia... Но так как вы хотите объяснения, я сделаю все возможное здесь

Хэш-функции

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

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

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

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

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

Использовать случаи

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

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

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

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

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

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

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

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

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 = sha512(password + salt); 
for (i = 0; i < 1000; i++) {
    hash = sha512(hash); // <-- Do NOT do this!
}

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

hash1 = sha1(password + salt);

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

Вот тривиальный пример, который поможет вам понять, почему хеширование не может (в общем случае) вернуть исходный ввод. Скажем, я создаю 1-битный хэш. Моя хеш-функция принимает бит-строку в качестве входных данных и устанавливает хеш в 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

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

Ответ 4

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

Hashing:

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

hashing


Encryption и Decryption:

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

encryption and decryption


UPDATE: Для решения вопросов, упомянутых в отредактированном вопросе.

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

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

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


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

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

  Шифрование/дешифрование (обратимое):

     

Addition:

4 + 3 = 7  
     

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

7 - 3 = 4     
     

Multiplication:

4 * 5 = 20  
     

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

20 / 4 = 5    
     

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


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

     

Modulo division:

22 % 7 = 1   
     

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

     Можете ли вы найти операцию для заполнения, где '?' является?

1  ?  7 = 22  
1  ?  22 = 7
     

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

credits

Ответ 5

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

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

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

Ответ 6

Хеш-функция превращает объем текста переменного размера в текст фиксированного размера.

Hash

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

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

HASH:

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

DEHASH:

SHA1 - односторонний хеш. Что означает, что вы не можете дешифровать хеш. Тем не менее, вы можете перебрать хэш. Пожалуйста, смотрите: https://hashkiller.co.uk/sha1-decrypter.aspx.

MD5, это еще один хеш. Дехашер MD5 можно найти на этом сайте: https://www.md5online.org/.


Функция шифрования преобразует текст в бессмысленный зашифрованный текст, используя ключ шифрования, и наоборот. enter image description here

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

Давайте погрузимся в некоторый код PHP, который обрабатывает шифрование.

--- Расширение Mcrypt ---

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)

--- Расширение OpenSSL ---

Расширение Mcrypt устарело в версии 7.1. и удалены в php 7.2. Расширение OpenSSL должно использоваться в php 7. См. фрагменты кода ниже:

$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)

Ответ 7

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

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

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

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

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

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

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

Хэш:

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

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

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

Ответ 8

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

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

Ответ 9

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

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

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

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

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

Ответ 10

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

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

Ответ 11

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

хеширования

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

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

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

Тогда есть шифрование

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

Шифрование симметричного ключа

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

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

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

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

Источник: SSL/TLS для чайников, часть 1: Ciphersuite, Hashing, Encryption | WST (https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/)

Ответ 12

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

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

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

Шифрование может просто выглядеть следующим образом: FhQp6U4N28GITVGjdt37hZN

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

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

Если хеш неверен и не совпадает с хешем, мы не можем увидеть какую-либо информацию. Например (MD5, SHA.....)