предисловие
Как при разработке функции входа на сайт обеспечить безопасность пароля при передаче/хранении?
Я уверен, что многим фронтенд- и бэкенд-друзьям во время интервью будут заданы похожие вопросы.
Когда я ничего не знаю о криптографии, я могу только ответить: "MD5Зашифровано. "
Не знаю, криптография есть в семислойной модели сети, и дажеwebВ разработке находится гораздо больше приложений, чем я себе представлял.
1. Что такое криптография?
Криптография необходима для различных приложений безопасности, и современная криптография направлена на создание механизмов для защиты информации с применением математических принципов и информатики. А вот криптоанализ, напротив, направлен на расшифровку таких механизмов, чтобы получить незаконный доступ к информации.
Криптография обладает тремя ключевыми свойствами:
- конфиденциальность, чтобы предотвратить доступ к информации неавторизованных лиц (другими словами, чтобы только уполномоченные лица имели доступ к данным с ограниченным доступом).
- честность, относится к защите информации от случайного вмешательства
- подлинность, в отношении владельца идентифицирующей информации.
Например, персональные медицинские данные:
- конфиденциальность, личные медицинские данные должны храниться в тайне, а это означает, что доступ к ним могут получить только врачи или медицинские работники.
- честность, и ее целостность также должна быть защищена, так как фальсификация таких данных может привести к ложным диагнозам или лечению и создать риск для здоровья пациентов.
- подлинность, данные пациента должны быть связаны с идентифицированным лицом, и пациент должен знать, кто является оператором (врачом).
В этой статье мы начнем с шифрования, хеширования, кодирования и запутывания — четырех основных методов криптографии.
Картинки в этой статье воспроизведены для простоты понимания.
Схема и основное содержание взяты из:How Secure Are Encryption, Hashing, Encoding and Obfuscation?
2. Что такое шифрование?
Шифрование Определение: процесс преобразования данных таким образом, чтобы гарантировать конфиденциальность.
Для этого шифрование требует использования секретного инструмента, который в криптографии мы называем «ключом».
Ключ шифрования и любой другой ключ шифрования должен иметь некоторые свойства:
- Чтобы защитить конфиденциальность, значение ключа должно быть трудно угадать.
- Его следует использовать в одном контексте, чтобы избежать повторного использования в разных контекстах (аналог JS). Повторное использование ключа представляет угрозу безопасности, особенно если его конфиденциальность нарушается, поскольку оно «разблокирует» более конфиденциальные данные.
2.1 Классификация шифрования: симметричное и асимметричное
Шифрование делится на две категории: симметричное и асимметричное.
Симметричное шифрование:
Использование: шифрование файловой системы, защищенный доступ Wi-Fi (WPA), шифрование базы данных (например, данные кредитной карты).
Асимметричное шифрование:
использовать:
TLS,VPN,SSH.
Основные отличия:Необходимое количество ключей:
- В алгоритмах симметричного шифрования для шифрования и дешифрования данных используется один ключ. Только те, у кого есть доступ к данным, могут иметь один общий ключ.
- В алгоритме асимметричного шифрования используются два ключа: открытый ключ и закрытый ключ. Как следует из названия, закрытый ключ должен храниться в секрете, а открытый ключ может быть известен всем.
- При шифровании используется открытый ключ, а для расшифровки требуется закрытый ключ.
- Любой человек должен иметь возможность отправлять нам зашифрованные данные, но только мы должны иметь возможность расшифровывать и читать их.
- Обычно, когда для связи по незащищенному каналу используется асимметричное шифрование, открытый ключ надежно устанавливается между двумя сторонами.
- С этим общим ключом обе стороны переключаются на симметричное шифрование.
- Это шифрование быстрее и лучше подходит для обработки больших объемов данных.
Алгоритмы шифрования, которые могут быть признаны криптографическим сообществом, являются общедоступными.:
- Некоторые компании используют проприетарную или «военную» технологию шифрования для шифрования, которая является «проприетарной». И основан на «сложном» алгоритме, но шифрование работает иначе.
- Все алгоритмы шифрования, широко используемые и признанные криптографическим сообществом, являются общедоступными, поскольку они основаны на математических алгоритмах, которые можно решить только с помощью секретного ключа или передовых вычислительных мощностей.
- Общедоступные алгоритмы получили широкое распространение, доказав свою ценность.
3. Что такое хэш?
Определение хеш-алгоритма: ·Криптографический алгоритм, который может быть только зашифрован, но не расшифрован, и может преобразовывать информацию любой длины в строку фиксированной длины.
Алгоритмы шифрования являются обратимыми (с использованием ключа) и могут обеспечивать конфиденциальность (некоторые более новые алгоритмы шифрования также могут обеспечивать подлинность), в то время как алгоритмы хеширования являются необратимыми и обеспечивают целостность для доказательства того, что определенные данные.
Предпосылка алгоритма хеширования проста:Учитывая ввод произвольной длины, выходные байты определенной длины. В большинстве случаев эта последовательность байтов будет уникальной для данного ввода и не будет указывать, что это за ввод. Другими словами:
- Исходные данные не могут быть определены только на основе вывода алгоритма хеширования.
- Взяв некоторые произвольные данные и выведя их с помощью хеш-алгоритма, можно убедиться, что эти данные совпадают с исходными входными данными, что устраняет необходимость просмотра исходных данных.
Чтобы проиллюстрировать это, представьте себе сильный алгоритм хеширования, который работает, помещая каждый уникальный вход в свою корзину. Когда мы хотим проверить, совпадают ли два входа, мы можем просто проверить, находятся ли они в одном сегменте.
Единица хранения хешированного файла называется ведром (Bucket).
3.1 Пример 1: Загрузка ресурсов
Веб-сайты, предлагающие загрузку файлов, часто возвращают хэш каждого файла, чтобы пользователи могли проверить целостность своих загруженных копий.
Например, вDebian, вы найдете другие файлы, такие какSHA256SUMS, который содержит хеш-вывод для каждого файла, доступного для загрузки (в данном случае,SHA-256алгоритм).
- Как только файл загружен, его можно передать выбранному алгоритму хеширования, который выводит хеш-значение.
- Используйте этот хэш, чтобы сопоставить хэши, перечисленные в файле контрольной суммы, чтобы проверить согласованность.
В терминале вы можете использоватьopensslчтобы хешировать файл:
$ openssl sha256 /Users/hiro/Downloads/非对称.png
SHA256(/Users/hiro/Downloads/非对称.png)= 7c264efc9ea7d0431e7281286949ec4c558205f690c0df601ff98d59fc3f4f64
Тот же файл использует тот жеhashВ алгоритме его можно использовать для проверки гомологичности.
В сильном алгоритме хеширования практически невозможно получить один и тот же результат, если есть два разных входа.
Наоборот, если диапазон вычисляемого результата ограничен, после вычисления будут разные данные с одинаковым значением, что является коллизией хэшей. (Результат двух разных расчетов данных одинаков)
Это называется:хеш-коллизия (хеш-коллизия).
Конфликт возникает, если два разных входа попадают в одно и то же ведро. Такие какMD5а такжеSHA-1, это произойдет. Это проблематично, потому что мы не можем различить, какое столкнувшееся значение соответствует вводу.
Сильный алгоритм хеширования создаст новое ведро почти для каждого уникального ввода.
3.2 Пример 2: Вход на веб-сайт
существуетwebВ процессе разработки наиболее часто используемый хеш-алгоритм используется в приложениях для входа на веб-сайты:
Подавляющее большинство веб-сайтов при хранении данных для входа хешируют пароль и сохраняют его.
- Это делается для того, чтобы другие не могли украсть информацию из базы данных и восстановить ваш первоначальный ввод.
- И в следующий раз, когда вы войдете в систему, веб-приложение снова хэширует ваш пароль и сравнит этот хэш с ранее сохраненным хэшем.
- Если хэши совпадают, веб-приложение уверено, что вы знаете пароль, даже если в веб-приложении нет фактического хранилища паролей.
регистр:
Авторизоваться:
Интересным аспектом алгоритмов хэширования является то, что выходные данные хэша всегда имеют одинаковую длину, независимо от длины входных данных.
Теоретически столкновение-столкновение всегда будет в пределах возможного, хотя и небольшого.
Напротивкодирование.
4. Что такое кодировка?
Определение кодирования:Процесс преобразования данных из одной формы в другую, не зависящий от шифрования.
Он не гарантирует три криптографических свойства конфиденциальности, целостности и подлинности, потому что:
- не содержит никаких секретов иполностью обратимыйиз.
- Обычно выводит количество данных, пропорциональное значению ввода, и всегда является единственным значением для этого ввода.
- Метод кодирования считается общедоступным и обычно используется дляобработка данных.
- кодированиеНикогда не применяется в отношении эксплуатационной безопасности..
4.1 URLкодирование
Также называется процентным кодом, это унифицированное расположение ресурсов (URL)Кодирование.URLАдрес (часто называемый веб-адресом) указывает:
- Можно напрямую использовать часто используемые цифры и буквы, а также напрямую использовать другой набор специальных пользовательских символов (
/,:@Ждать) - Все остальные персонажи должны пройти
%xxпроцесс кодирования.
Сейчас это стало нормой, и в основном все языки программирования имеют эту кодировку, например:
- js: encodeURI, encodeURIComponent
- PHP: urlencode, urldecode и т. д.
Метод кодирования простой, в байтахasciiПрефикс шестнадцатеричного символа кода%, как пробел,asciiКод равен 32, а соответствующее шестнадцатеричное число — «20», тогдаurlencodeЗакодированный результат:%20.
# 源文本:
The quick brown fox jumps over the lazy dog
# 编码后:
#!shell
%54%68%65%20%71%75%69%63%6b%20%62%72%6f%77%6e%20%66%6f%78%20%6a%75%6d%70%73%20%6f%76%65%72%20%74%68%65%20%6c%61%7a%79%20%64%6f%67
4.2 HTML实体编码
существуетHTML, данные должны бытьHTMLкодируется в соответствии с требуемымHTMLформат символов. То же самое касается побега, чтобы избежать XSS-атак.
4.3 Base64/32/16кодирование
base64,base32,base168-битные байты могут быть закодированы и преобразованы в 6-битные, 5-битные и 4-битные соответственно.
16, 32, 64 указывают, сколько символов используется для кодирования,
Base64Он часто используется для представления, передачи и хранения некоторых двоичных данных в ситуациях, когда обычно обрабатываются текстовые данные. включатьMIMEизemail,email via MIME,существуетXMLхранить сложные данные.
Принцип кодирования:
-
Base64Кодирование требует преобразования 3 8-битных байтов в 4 6-битных байта. - Затем добавьте два 0 перед 6 битами, чтобы сформировать 8-битную однобайтовую форму.
- Наибольшее число, которое может быть представлено шестизначным двоичным кодом, — это 2 в 6-й степени, равное 64, поэтому оно составляет 64 символа.
-
A-Z,a-z,0-9,+,/Эти 64 закодированных символа,=Число является не закодированным символом, а символом заполнения
-
Base64Таблица сопоставления выглядит следующим образом:
Возьмите каштан:
Цитата: В статье досконально разбирается принцип кодирования Base64
- первый шаг:"
M", "a","n"соответствующийASCIIКодовые значения — 77, 97, 110, а соответствующие двоичные значения —01001101,01100001,01101110. Как показано во второй и третьей строках рисунка, из этого формируется 24-битная двоичная строка. - Шаг 2: Как показано в красной рамке, разделите 24-битную 6-битную двоичную группу на четыре группы.
- Шаг 3: Добавьте два 0 перед каждой группой выше, расширьте до 32 двоичных битов, а затем станьте четырьмя байтами:
00010011,00010110,00000101,00101110. Соответствующие значения (Base64кодовый индекс): 19, 22, 5, 46. - Шаг 4: Используйте приведенные выше значения для поиска в таблице кодировки Base64, соответствующих:
T、W、F、u. следовательно"Man"Base64После кодирования становится:TWFu.
Приведенный выше пример призван указать на то, чтоКодирование используется только для обработки данных и не обеспечивает защиту закодированных данных.
4. Что такое обфускация?
Определение обфускации:将人类可读的字符串转换为难以理解的字符串.
- В отличие от шифрования, обфускация не содержит ключей шифрования.
- Подобно кодированию, обфускация не гарантирует никакой безопасности, хотя иногда ее ошибочно используют в качестве метода шифрования.
Хотя конфиденциальность не гарантируется, существуют и другие способы запутывания:
- Используется для предотвращения несанкционированного доступа и защиты интеллектуальной собственности.
- Исходный код приложения часто запутывается перед упаковкой
- Поскольку исходный код находится на устройстве пользователя, его можно извлечь из него. Поскольку запутанный код не является дружественным, он предотвращает обратное проектирование, что помогает защитить интеллектуальную собственность.
- Это, в свою очередь, предотвращает подделку кода и его распространение для злонамеренного использования.
Однако существует множество инструментов, помогающих расшифровать код приложения. Это другая тема. . .
4.1 Пример 1:JavaScriptзатемнять
JavaScriptИсходный код:
function hello(name) {
console.log('Hello, ' + name);
}
hello('New user');
После обфускации:
var _0xa1cc=["\x48\x65\x6C\x6C\x6F\x2C\x20","\x6C\x6F\x67","\x4E\x65\x77\x20\x75\x73\x65\x72"];
function hello(_0x2cc8x2){console[_0xa1cc[1]](_0xa1cc[0]+ _0x2cc8x2)}hello(_0xa1cc[2])
Суммировать
Четыре криптографических метода анализируются с точки зрения конфиденциальности, целостности и подлинности:
| шифрование | хэш | кодирование | затемнять | |
|---|---|---|---|---|
| конфиденциальность | ✅ | ❌ | ❌ | ❌ |
| честность | ❓ | ✅ | ❌ | ❌ |
| подлинность | ❓ | ❌ | ❌ | ❌ |
- Шифрование, хотя и предназначено для обеспечения конфиденциальности данных, некоторые современные алгоритмы шифрования используют другие стратегии для обеспечения целостности (иногда с помощью встроенных алгоритмов хэширования) и подлинности данных.
- Хэш может только гарантировать целостность, но может контролировать полномочия путем сравнения целостности, например: Код аутентификации сообщения на основе хэша (
HMAC) и некоторую безопасность транспортного уровня (TLS) метод. - Кодирование использовалось для обозначения шифрования в прошлом и до сих пор имеет это значение за пределами мира технологий, но в мире программирования этоПросто механизм обработки данных и никогда не предусматривать никаких мер безопасности.
- Обфускация может использоваться для повышения устойчивости к атакам, однако она никогда не может гарантировать конфиденциальность данных. Коварный противник в конечном итоге обходит стратегию запутывания. Как и в случае с кодировкой,Никогда не рассматривайте обфускацию как надежную меру безопасности..
Приложение: Хеш-функции
Часто используемые хэш-функции:
-
MD5, широко используемая криптографическая хеш-функция, которая создает 128-битное (16-байтовое) хэш-значение для обеспечения полной и согласованной передачи информации. *Обширный, но устаревший. -
SHA-256/SHA512, "С солью". В биткойне блокчейн используетSHA-256Алгоритм служит базовой криптографической хэш-функцией.- Алгоритм безопасного хеширования
secure hash algorithm, представляет собой семейство криптографических хеш-функций. -
SHAВ семействе пять алгоритмов, которыеSHA-1,SHA-224,SHA-256,SHA-384,SHA-512 - Это стандарты правительства США, последние четыре называются
SHA-2
- Алгоритм безопасного хеширования
- шифрование:
bcryptАлгоритмы являются относительно медленными алгоритмами.
-
В криптографическом сообществе есть поговорка:Более медленные алгоритмы более безопасны. Чем больше алгоритм просчитан, тем выше стоимость взлома для хакеров:
-
пройти через
saltа такжеconstЭти два значения замедляют процесс шифрования, а время шифрования ta (уровень 100 мс) намного больше, чемmd5(возможно1msо). -
Для компьютеров,
BcryptСкорость расчета очень низкая, но для пользователя процесс не медленный. -
bcryptявляется однонаправленным и проходит черезsaltа такжеcostобработка, подлежащаяrainbowВероятность взлома при атаке значительно снижена, а сложность взлома также значительно улучшена. -
относительно
MD5Другие методы шифрования более безопасны и просты в использовании. -
Хорошо продуманные алгоритмы расширения ключей, такие как
PBKDF2,bcrypt,scrypt.
Постскриптум и цитата
Так,Как обеспечить безопасность паролей при передаче/хранении?
Увидимся в следующий раз!
❤️ После прочтения трех вещей
Если вы найдете этот контент, вы вполне вдохновляете, я хочу пригласить вас, чтобы помочь мне три маленьких благосклонности:
- Ставьте лайк, чтобы больше людей увидело этот контент
- Обратите внимание на паблик «Учитель фронтенд-убеждения», и время от времени делитесь оригинальными знаниями.
- Также смотрите другие статьи
- Расширенное руководство по отладке Chrome Devtools (новое)
- Вспомогательные функции JavaScript (новинка)
- «React Hooks» 120 строк кода для реализации полного интерактивного компонента загрузки с помощью перетаскивания.
- «React Hooks» 160 строк кода для создания динамичных и крутых визуальных диаграмм - Ищут программиста
Вы также можете прийти ко мнеGitHubПолучите исходные файлы всех статей в блоге:
Руководство по убеждению:GitHub.com/Roger-Hi RO/…