Задумывались ли вы, насколько компании надежно хранят ваши пароли? Или как информация о вашей кредитной карте остается конфиденциальной при совершении онлайн-покупок?
Ответ этому вопросу - криптография. Подавляющее большинство интернет-сайтов в настоящее время используют некоторую форму криптографии для обеспечения конфиденциальности своих пользователей. Даже такая информация, как электронные письма из вашей учетной записи Gmail, шифруется.
Что такое криптография?
Криптография - это наука безопасной передачи информации, которую необходимо скрывать от потенциально опасных противников.
Например, фильм «Игра в имитацию ». Для тех, кто видел этот фильм, вы знаете, что это история о том, как Алан Тьюринг создает первый компьютер для расшифровки немецкой машины Enigma (Советую посмотреть данной видео с одного из моих любимых каналов на YouTube Numberphile) - машины, которая кодировала все немецкие коммуникации, поэтому нацисты могли безопасно передавать сообщения по радио. Хотя эти сообщения легко перехватывались союзниками, сообщения не могли быть поняты, потому что все они были зашифрованы с использованием некоторого внешнего ключа, который ежедневно менялся.
Алгоритмы шифрования
Сначала получатель генерирует 2 открытых ключа n и e и один закрытый ключ d путём:
Подписи
Другим важным аспектом шифрования является возможность подписать сообщение. Это позволяет вам проверять отправителей и избегать отправки конфиденциальной информации не тем пользователям и / или открытым ключам.
Как подписать сообщение
Создайте подпись M , такую, что S = M ^ d mod n, и отправьте S вместе с вашим сообщением. Помните, что d ваш личный ключ.
Как проверить подпись
Получатель может быстро установить, что подпись действительна, если M = S ^ e mod n.
Хэширование
Вы могли заметить в приведенном выше примере кода, как я использовал функцию sha256 () для переменной m_hash. Хеширование - это односторонняя криптографическая функция, которая позволяет вам необратимо преобразовать информацию в строку букв и цифр, называемую хешем. Хеширование отличается от шифрования, поскольку предполагается, что хеш-код невозможно расшифровать, хотя многие пытались, а некоторые преуспели. Когда вы слышите о пароле или другом взломе безопасности, это обычно относится к криптографическому взлому, при котором хакеры смогли сопоставить хеш-коды с исходным текстом.
Как это устроено:
Существуют различные алгоритмы хеширования ( MD , SHA1 , SHA2 и SHA3 ), но мы сосредоточимся на алгоритме SHA256, так как он наиболее распространен сегодня.
Алгоритм SHA256 сначала преобразует текст в строку из 256 бит (отсюда и название) из 0 и 1 (Двоичная система счисления). Примером может быть:
1110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010000101
Поскольку эти двоичные хэши очень длинные для отображения, они затем преобразуются в шестнадцатеричный формат (комбинация из 64 символов значений 0–9 и a - f), причем каждый раздел из 4 битов представляет один символ. Пример шестнадцатеричного представления:
a235810cd87df030d78e890d90c187cc04a09ad09b289b91bbae9d890f987e
Пароли
Основное использование хеширования - проверка пароля. К примеру, для вашего банка было бы крайне небезопасно хранить базу данных незашифрованных паролей, поэтому он поддерживает базу данных хэшей, которая соответствует вашему фактическому паролю. Когда вы входите в свой банк онлайн, система хэширует ваш пароль, а затем проверяет его на соответствие хешу, который у вас есть в файле.
Эта система работает, потому что алгоритмы хеширования всегда выдают один и тот же хеш для одного и того же пароля - хеши не являются случайной комбинацией символов. Хеширование также является причиной того, что важно иметь сложные и уникальные пароли, потому что, если я вычисляю хеш для «password123» и сопоставляю его с хешем, который вам соответствует, то я знаю, что ваш пароль - «password123» и я могу легко взломать ваш банковский счет онлайн.
Бонусный контент!
Радужная таблица.
Радужные таблицы - это базы данных хэшей общих паролей.
Возьмите, например, пин-коды банкоматов. Существует 10 000 комбинаций 4-значных ПИН-кодов банкоматов с цифрами 0–9. Радужная таблица предоставит хэш для каждого из 10 000 кодов, и хакер может использовать этот список хэшей, чтобы отобразить хэш обратно в ваш код, таким образом расшифровав ваш пин-код из своего хэша.
Как я могу спать по ночам?
Расслабьтесь! Банки и большинство других организаций понимают, что хакеры хотят получать конфиденциальную информацию, поэтому они обычно обеспечивают дополнительный уровень безопасности с помощью так называемой «соли».
Соли - это дополнительные строки символов, добавленные к паролю (или другой информации), чтобы сделать его более уникальным, длинным и более сложным для взлома.
Вместо того, чтобы иметь PIN-код = «0000», добавление соли изменило бы ваш пин-код на что-то вроде «0000B_of_A_salt», что могло бы иметь совершенно другой хэш. Организации могут творчески использовать соли, чтобы сделать хакерство чрезвычайно трудным. Чтобы использовать радужный стол для взлома такого алгоритма, вам понадобится радужный стол для каждой возможной соли, что значительно увеличивает количество возможных комбинаций номеров выводов.
Blockchain
Криптография позволяет блокчейну проверять отправителей в сети с помощью подписей, а также гарантирует, что прошлые транзакции и записи, известные как «блоки», не могут быть изменены.
Блокчейн также использует алгоритмы хеширования для назначения уникального хеша каждому блоку, что позволяет различать блоки.
Заключение
Теперь, когда вы знаете все о хэшировании и шифровании, посмотрите это короткое видео о том, как Алану Тьюрингу (Опять же от себя neopaket'a советую посмотреть данное видео и канал Numberphile) удалось «взломать» немецкую машину Enigma, и посмотрите фильм Игра в имитацию, если вы еще этого не сделали!
* Примечание. Для целей этой статьи я сосредоточился на алгоритме асимметричного шифрования, который называется RSA (Rivest, Shamir и Adleman) Encryption.
Спасибо за прочтение данной статьи и хорошего дня
Оригинальная статья: https://towardsdatascience.com/the-basics-of-cryptography-80c7906ba2f7
neopaket
Ответ этому вопросу - криптография. Подавляющее большинство интернет-сайтов в настоящее время используют некоторую форму криптографии для обеспечения конфиденциальности своих пользователей. Даже такая информация, как электронные письма из вашей учетной записи Gmail, шифруется.
Что такое криптография?
Криптография - это наука безопасной передачи информации, которую необходимо скрывать от потенциально опасных противников.
Например, фильм «Игра в имитацию ». Для тех, кто видел этот фильм, вы знаете, что это история о том, как Алан Тьюринг создает первый компьютер для расшифровки немецкой машины Enigma (Советую посмотреть данной видео с одного из моих любимых каналов на YouTube Numberphile) - машины, которая кодировала все немецкие коммуникации, поэтому нацисты могли безопасно передавать сообщения по радио. Хотя эти сообщения легко перехватывались союзниками, сообщения не могли быть поняты, потому что все они были зашифрованы с использованием некоторого внешнего ключа, который ежедневно менялся.
Алгоритмы шифрования
- Шифрование с симметричным ключом - в алгоритмах с симметричным ключом есть один общий ключ, используемый для блокировки и разблокировки «ящика» шифрования. И отправитель, и получатель имеют один и тот же ключ. Алгоритмы с симметричным ключом очень короткие; однако существует проблема совместного использования общего ключа, поскольку он может быть перехвачен, а затем взломана вся система.
- Шифрование асимметричного ключа - в алгоритмах асимметричного ключа ключ имеет только получатель. Получатель может публично заблокировать шифр для закрытия доступа к просмотра сообщения. Этот замок называется открытым ключом , а ключ называется закрытым ключом. Примечание. Для каждого закрытого ключа существует только один открытый ключ.
Сначала получатель генерирует 2 открытых ключа n и e и один закрытый ключ d путём:
- Выбираем 2 больших простых числа p & q , таких что n = p * q. (Пример n = 6, p = 3 & q = 2)
- Выбираем другое простое число e, такое что 3 < e < n - 1. (Пример e = 4)
- Вычислим d по алгоритму d * e-1 = k (p-1) (q-1). (d * 3 = 2; d = 0.666, упс, бесконечное число, неудачный пример, но если взять число побольше, то такое можно избежать)
- Затем преобразуйте открытый текст, который вы хотите отправить, в число m , используя числовое представление ASCII или другой метод.
- Зашифруйте число m , найдя зашифрованный текст c = m ^ e mod n. (Mod - остаток при делении одного числа на другое, пример 5 mod 2 - 1,т.к 5/2 = 2; 2*2 = 4;5 - 4 =1)
- Отправьте n, e и c получателю.
Подписи
Другим важным аспектом шифрования является возможность подписать сообщение. Это позволяет вам проверять отправителей и избегать отправки конфиденциальной информации не тем пользователям и / или открытым ключам.
Как подписать сообщение
Создайте подпись M , такую, что S = M ^ d mod n, и отправьте S вместе с вашим сообщением. Помните, что d ваш личный ключ.
Как проверить подпись
Получатель может быстро установить, что подпись действительна, если M = S ^ e mod n.
Хэширование
Вы могли заметить в приведенном выше примере кода, как я использовал функцию sha256 () для переменной m_hash. Хеширование - это односторонняя криптографическая функция, которая позволяет вам необратимо преобразовать информацию в строку букв и цифр, называемую хешем. Хеширование отличается от шифрования, поскольку предполагается, что хеш-код невозможно расшифровать, хотя многие пытались, а некоторые преуспели. Когда вы слышите о пароле или другом взломе безопасности, это обычно относится к криптографическому взлому, при котором хакеры смогли сопоставить хеш-коды с исходным текстом.
Как это устроено:
Существуют различные алгоритмы хеширования ( MD , SHA1 , SHA2 и SHA3 ), но мы сосредоточимся на алгоритме SHA256, так как он наиболее распространен сегодня.
Алгоритм SHA256 сначала преобразует текст в строку из 256 бит (отсюда и название) из 0 и 1 (Двоичная система счисления). Примером может быть:
1110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010000101
Поскольку эти двоичные хэши очень длинные для отображения, они затем преобразуются в шестнадцатеричный формат (комбинация из 64 символов значений 0–9 и a - f), причем каждый раздел из 4 битов представляет один символ. Пример шестнадцатеричного представления:
a235810cd87df030d78e890d90c187cc04a09ad09b289b91bbae9d890f987e
Пароли
Основное использование хеширования - проверка пароля. К примеру, для вашего банка было бы крайне небезопасно хранить базу данных незашифрованных паролей, поэтому он поддерживает базу данных хэшей, которая соответствует вашему фактическому паролю. Когда вы входите в свой банк онлайн, система хэширует ваш пароль, а затем проверяет его на соответствие хешу, который у вас есть в файле.
Эта система работает, потому что алгоритмы хеширования всегда выдают один и тот же хеш для одного и того же пароля - хеши не являются случайной комбинацией символов. Хеширование также является причиной того, что важно иметь сложные и уникальные пароли, потому что, если я вычисляю хеш для «password123» и сопоставляю его с хешем, который вам соответствует, то я знаю, что ваш пароль - «password123» и я могу легко взломать ваш банковский счет онлайн.
Бонусный контент!
Радужная таблица.
Радужные таблицы - это базы данных хэшей общих паролей.
Возьмите, например, пин-коды банкоматов. Существует 10 000 комбинаций 4-значных ПИН-кодов банкоматов с цифрами 0–9. Радужная таблица предоставит хэш для каждого из 10 000 кодов, и хакер может использовать этот список хэшей, чтобы отобразить хэш обратно в ваш код, таким образом расшифровав ваш пин-код из своего хэша.
Как я могу спать по ночам?
Расслабьтесь! Банки и большинство других организаций понимают, что хакеры хотят получать конфиденциальную информацию, поэтому они обычно обеспечивают дополнительный уровень безопасности с помощью так называемой «соли».
Соли - это дополнительные строки символов, добавленные к паролю (или другой информации), чтобы сделать его более уникальным, длинным и более сложным для взлома.
Вместо того, чтобы иметь PIN-код = «0000», добавление соли изменило бы ваш пин-код на что-то вроде «0000B_of_A_salt», что могло бы иметь совершенно другой хэш. Организации могут творчески использовать соли, чтобы сделать хакерство чрезвычайно трудным. Чтобы использовать радужный стол для взлома такого алгоритма, вам понадобится радужный стол для каждой возможной соли, что значительно увеличивает количество возможных комбинаций номеров выводов.
Blockchain
Криптография позволяет блокчейну проверять отправителей в сети с помощью подписей, а также гарантирует, что прошлые транзакции и записи, известные как «блоки», не могут быть изменены.
Блокчейн также использует алгоритмы хеширования для назначения уникального хеша каждому блоку, что позволяет различать блоки.
Заключение
Теперь, когда вы знаете все о хэшировании и шифровании, посмотрите это короткое видео о том, как Алану Тьюрингу (Опять же от себя neopaket'a советую посмотреть данное видео и канал Numberphile) удалось «взломать» немецкую машину Enigma, и посмотрите фильм Игра в имитацию, если вы еще этого не сделали!
* Примечание. Для целей этой статьи я сосредоточился на алгоритме асимметричного шифрования, который называется RSA (Rivest, Shamir и Adleman) Encryption.
Спасибо за прочтение данной статьи и хорошего дня
Оригинальная статья: https://towardsdatascience.com/the-basics-of-cryptography-80c7906ba2f7
neopaket