Полный обзор криптографии

Полный обзор криптографии

26 мая 2022 г.

Что такое криптография?


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


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


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


Принципы криптографии


К основным принципам современной криптографии относятся:


  • Конфиденциальность

  • Честность

  • Неотказуемость

  • Аутентификация

Давайте пройдемся по каждому по одному.


Конфиденциальность


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


Честность


[Целостность данных] (https://blog.boot.dev/bitcoin/achieving-data-integrity-using-cryptography/) относится к точности, легитимности и согласованности информации в системе. Когда сообщение отправляется, особенно с использованием ненадежного носителя, такого как Интернет, целостность данных гарантирует, что сообщение не было подделано или случайно изменено.


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


Безотказность


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


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


Аутентификация


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


  1. Аутентификация целостности, такая как [MAC или HMAC] (https://blog.boot.dev/cryptography/hmac-and-macs-in-jwts/), гарантирует, что данные не были подделаны.

  1. Аутентификация источника, например SSL-сертификат, может использоваться для подтверждения личности создателя информации. Каждый раз, когда вы подключаетесь к веб-сайту через HTTPS, ваш браузер гарантирует, что вы подключены к сайту, который, по вашему мнению, вы являетесь, проверяя сертификат SSL.

Руководство для криптографов


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


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


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


Согласно принципу Керкхоффа


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


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


Давайте рассмотрим несколько практических правил безопасного хранения ключей.


  1. Защитите свои закрытые ключи с помощью надежных списков контроля доступа или ACL. Следуйте принципу наименьших привилегий, то есть разрешайте доступ к ключам только тем, кому они действительно нужны.

  1. Используйте безопасный пароль или диспетчер секретов, чтобы отслеживать свои ключи. Хорошие менеджеры секретов будут шифровать ваши ключи с помощью надежной [функции получения ключей] (https://blog.boot.dev/cryptography/key-derivation-functions/), например [bcrypt] (https://blog.boot.dev). /cryptography/bcrypt-step-by-step/) или scrypt.

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

Наконец, убедитесь, что вы используете только основные сильные стороны и режимы работы, которые соответствуют последним передовым практикам в отрасли. Например, AES-256 обычно следует использовать вместо AES-128, если только по той причине, что его больший размер ключа обеспечивает большую энтропию при столкновении с квантовым алгоритмом.


Для получения дополнительной информации прочитайте наш пост о [действительно ли безопасна криптография с открытым исходным кодом] (https://blog.boot.dev/cryptography/is-open-source-cryptography-really-secure/)


Какие практические проблемы решает криптография?


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


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


В открытых сетях существует два основных типа атак:


  • При пассивной атаке: хакер прослушивает сетевое соединение и считывает конфиденциальную информацию по мере ее передачи.

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

Защита конфиденциальности и целостности, обеспечиваемая криптографическими протоколами, такими как SSL/TLS, может защитить обмен данными от злонамеренного прослушивания и подделки. Защита аутентификации гарантирует, что данные, которые вы получаете, действительно поступили от того, от кого вы думали. Например, вы отправляете свой номер социального страхования в свой банк или нигерийскому принцу?


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


Типы криптографии


Существует три основных типа криптографии:


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

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

  1. Хеш-функции

Криптография с симметричным ключом


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


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


Общие алгоритмы симметричного шифрования включают [AES] (https://blog.boot.dev/cryptography/aes-256-cipher/) и [DES] (https://en.wikipedia.org/wiki/Data_Encryption_Standard).



Криптография с асимметричным ключом


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


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


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


Распространенные алгоритмы асимметричного шифрования ECC и RSA.



Хеш-функции


Третий наиболее распространенный тип криптографии включает в себя [хэш-функции] (/cryptography/very-basic-intro-to-hash-functions-sha-256-md-5-etc/). В этом алгоритме ключ не используется. Значение фиксированной длины вычисляется из открытого текста, что делает невозможным восстановление содержимого открытого текста.


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


К популярным функциям хеширования относятся SHA-256, Bcrypt и Scrypt .


Криптология против криптографии против криптоанализа


Криптология


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


  • Криптография: изучение построения безопасных криптосистем.

  • Криптоанализ: Изучение взлома криптосистем.

  • Криптология: изучение как криптографии, так и криптоанализа.

Криптология очень сильно связана с математикой, такой как теория чисел и применение формул и алгоритмов. Интересный анекдот состоит в том, что криптология была основной областью изучения первых ученых-компьютерщиков, включая самого [Алана Тьюринга] (https://en.wikipedia.org/wiki/Alan_Turing).


Криптография


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


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


Криптоанализ


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


Представьте, что ФБР завладело вашим личным мобильным телефоном и хочет узнать, чем вы занимаетесь. Методы, которые они будут использовать для «взлома» кода и расшифровки содержимого вашего телефона, будут методами криптоанализа.


Для получения дополнительной информации у нас есть полный пост о [криптология против криптографии] (https://blog.boot.dev/cryptography/cryptology-vs-cryptography/)


Что такое квантовые вычисления и смогут ли они сломать криптографию?


Если классический бит содержит одно двоичное значение, такое как «0» или «1», [кубит] (https://en.wikipedia.org/wiki/Qubit) может хранить оба значения одновременно. Это означает, что один кубит может содержать гораздо больше информации, чем классический бит, и все это стало возможным благодаря феномену [суперпозиции] (https://en.wikipedia.org/wiki/Quantum_superposition). Это уникальное свойство позволяет им обрабатывать информацию за потенциально логарифмическое время или, другими словами, экспоненциально быстрее, чем классические компьютеры.


Было математически доказано, что многие алгоритмы асимметричного шифрования могут быть взломаны квантовыми компьютерами с использованием [алгоритма Шора] (https://en.wikipedia.org/wiki/Shor%27s_algorithm). Поскольку такие алгоритмы, как RSA, в значительной степени полагаются на тот факт, что обычные компьютеры не могут быстро находить простые множители, они оставались безопасными в течение многих лет. Когда квантовые компьютеры нарушают это предположение, возможно, пришло время найти новые стандарты.


С другой стороны, симметричное шифрование, или, точнее, [AES-256] (https://blog.boot.dev/cryptography/aes-256-cipher/), считается квантово-устойчивым. Это означает, что [квантовые компьютеры] (https://en.wikipedia.org/wiki/Post-quantum_cryptography#Symmetric_key_quantum_resistance) не смогут сократить время атаки настолько, чтобы быть эффективными, если размеры ключа достаточно велики.


Для получения дополнительной информации прочитайте наш пост о [является ли AES-256 квантово-устойчивым] (https://blog.boot.dev/cryptography/is-aes-256-Quantum-Resistant/).


Как биткойн, криптовалюта и другие блокчейны используют криптографию?


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


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


Причина, по которой мы заботимся о том, что кому-то потребовалось много работы, чтобы добавить новый блок в блокчейн, заключается в том, чтобы сделать его более безопасным. Каждый майнер должен решить сложную «лотерею хеширования», чтобы добавить новый блок, но если бы это было слишком просто, любой мог бы быстро добавить новые блоки, чтобы переписать блокчейн в свою пользу. Консенсус Proof-of-Work делает Биткойн самой безопасной общедоступной сетью, когда-либо созданной в истории человечества.


Если вам интересно узнать больше о том, как работает Биткойн, вы можете сделать это на bitcoin.org.


История криптографии - Хронология важных событий


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


  • 1900 г. до н.э. - Первое свидетельство измененных символов в тексте, найденное в гробнице Хнумхотепа II в Египте. Записи не должны были быть секретными, но они являются первым имеющимся у нас свидетельством того, что кто-то изменил кодовые символы.

  • 100 г. до н.э. - [Шифр Цезаря] (https://en.wikipedia.org/wiki/Цезарь_шифр). Юлий Цезарь, как известно, использовал форму шифрования для передачи секретных сообщений генералам своей армии, отправленным на фронт. Этот шифр замены, известный как шифр Цезаря, возможно, является наиболее упоминаемым историческим шифром (алгоритмом, используемым для шифрования или дешифрования) в академической литературе. Это простой шифр, в котором каждый символ открытого текста просто заменяется другим символом для формирования зашифрованного текста. Например, «a» становится «d», «b» становится «e» и так далее.

  • 500 г. н.э. — [шифр Виженера] (https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher). Виженер разработал шифр, который, как говорят, был первым шифром, в котором использовался секретный ключ.

  • 1800 [Hebern Rotor Machine] (https://en.wikipedia.org/wiki/Hebern_rotor_machine). В начале 1800-х годов, когда все стало электрическим, Хеберн разработал электромеханическое устройство, в котором использовался один ротор, в котором секретный ключ встроен во вращающийся диск. Ключ закодировал [поле подстановки] (https://en.wikipedia.org/wiki/S-box), и каждое нажатие клавиши на клавиатуре приводило к выводу зашифрованного текста. Подобно шифрам Цезаря и Виженера, машина Хеберна была взломана с помощью частот букв.

  • 1918 — [Энигма-машина] (https://en.wikipedia.org/wiki/Enigma_machine). Машина Engima была изобретена немецким инженером Артуром Шербиусом в конце Первой мировой войны и активно использовалась немецкими войсками во время Второй мировой войны. В машине «Энигма» использовалось 3 или более роторов, которые вращались с разной скоростью при наборе текста на клавиатуре и выводили соответствующие буквы зашифрованного текста. В случае с Enigma ключом была первоначальная настройка роторов.

  • 1943 Алан Тьюринг и другие члены его команды в Блетчли-парке завершают создание «Хит Робинсон», специализированной машины для взлома шифров. Эта команда также отвечала за взлом машины Enigma во время Второй мировой войны.

  • 1948 — Клод Шеннон [пишет статью] (https://people.math.harvard.edu/\~ctm/home/text/others/shannon/entropy/entropy.pdf), которая отвечает за установление наша современная математическая основа теории информации.

  • 1970 - Шифр Люцифера. В начале 1970-х группа из IBM разработала шифр под названием Люцифер. Национальное бюро стандартов (теперь NIST) в США разместило запрос предложений по блочному шифру, который станет национальным стандартом. В конечном итоге Люцифер был принят и стал [DES] (https://en.wikipedia.org/wiki/Data_Encryption_Standard) (Стандарт шифрования данных).


  • 1991 — Фил Циммерман выпускает [PGP] (https://en.wikipedia.org/wiki/Pretty_Good_Privacy).

  • 1994 — [Secure Sockets Layer (SSL)] (https://en.wikipedia.org/wiki/Secure_Sockets_Layer) протокол шифрования, выпущенный Netscape, который в настоящее время защищает большую часть современной сети.

  • 1994 — [Питер Шор разрабатывает алгоритм] (https://en.wikipedia.org/wiki/Shor%27s_algorithm), который позволяет квантовым компьютерам быстро определять факторизацию больших целых чисел.

  • 1997 - DES Разбито исчерпывающим поиском. В 1997 году и в последующие годы DES был взломан атакой с исчерпывающим поиском. Основной проблемой DES был небольшой размер ключа шифрования. По мере увеличения вычислительной мощности стало легко перебирать все различные комбинации ключа, чтобы получить возможное открытое текстовое сообщение.

  • 2000 - AES принят в качестве замены DES. В 1997 году NIST снова отправил запрос на предложение нового блочного шифра. Было получено 50 заявок. В 2000 году он принял Rijndael и назвал его AES или Advanced Encryption Standard.

  • 2004 - MD5 показал уязвимость к коллизиям


Для дальнейшего изучения


Для начинающих: Если вы были вдохновлены изучением криптографии, будучи новичком в программировании и компьютерных науках, у нас есть полная учебная программа курса информатики, которая проведет вас от уровня новичка до уровня выпускника. Поскольку криптография является более сложной темой, мы предлагаем вам начать с наших курсов [Введение в кодирование с помощью JavaScript] (https://boot.dev/learn/learn-code-javascript).


Для опытных программистов: Мы рекомендуем наш Практический курс криптографии, который охватывает все, от основ шифрования и атак методом грубой силы до потоковых шифров, блочных шифров, и хэш-функции.


Первоначально опубликовано [здесь] (https://blog.boot.dev/cryptography/what-is-cryptography/)



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE