Предварительное знакомство с RSA, рассказ о том, как взломать HTTPS

внешний интерфейс HTTPS

В этой статье обсуждаем с вами более интересный вопрос: как взломать https? Как мы все знаем, почти весь Интернет сейчас использует https, и некоторые браузеры будут выдавать предупреждения для веб-сайтов, которые не являются https. HTTPS тоже часто спрашивают в интервью.В этой статье мы углубимся в принцип работы HTTPS и поговорим об идее взлома HTTPS.

HTTPS

Чтобы взломать https, вы должны сначала знать принцип https.Давайте сначала поговорим о принципе https.

открытый и закрытый ключ

Открытый и закрытый ключи https часто появляются в интервью, и различные интервью также дадут ответы: у https есть два секретных ключа, открытый ключ и закрытый ключ, веб-сайт владеет закрытым ключом, пользователь владеет открытым ключом, и веб-сайт использует свой собственный закрытый ключ.Зашифрованные данные с закрытым ключом отправляются пользователю, а пользователь расшифровывает данные с помощью открытого ключа. Когда пользователь хочет отправить сообщение, пользователь шифрует данные с помощью открытого ключа, а веб-сайт расшифровывает данные с помощью закрытого ключа.Это шифрование и дешифрование алгоритма шифрования с использованием различных секретных клавиш называется асимметричным шифрованием. Этот процесс немного запутан.Давайте проиллюстрируем это на примере.Предполагая, что на веб-сайте A включен https, Сяомин собирается посетить этот веб-сайт (следующий пример предназначен только для объяснения использования открытого и закрытого ключей, а не реального процесса https). Настоящим процессом является следующий «процесс рукопожатия HTTPS». Фестиваль):

  1. Веб-сайт A включает https и, естественно, имеет пару секретных ключей, закрытый ключ и открытый ключ.Закрытый ключ скрыт им самим, и любой пользователь, получивший доступ к открытому ключу, может получить открытый ключ.
  2. Сяо Мин посещает сайт А и получает открытый ключ А
  3. Когда Сяо Мин хочет отправить сообщение на веб-сайт А, он шифрует информацию своим открытым ключом, а затем отправляет ее на веб-сайт А.
  4. После того, как веб-сайт A получает зашифрованный текст, он расшифровывает его с помощью собственного закрытого ключа, чтобы получить содержимое сообщения.
  5. Веб-сайт А хочет ответить Сяомину, зашифровать информацию своим закрытым ключом и отправить ее Сяомину.
  6. После того, как Сяо Мин получает зашифрованный текст, он расшифровывает информацию открытым ключом в руке.

Из приведенного выше процесса мы видим, что, поскольку открытый ключ является общедоступным, информация, зашифрованная закрытым ключом веб-сайта, может быть фактически разблокирована всеми пользователями. **На данном этапе защитой фактически являются данные, отправляемые пользователем на сервер, поскольку зашифрованные данные пользователя должны быть расшифрованы закрытым ключом сервера. **Здесь все задумываются над интересным вопросом: раз все пользователи могут получить публичный ключ, значит ли это, что информация зашифрована Сяомином, а Сяохун тоже может ее расшифровать, ведь у Сяохуна тоже есть публичный ключ? Если Сяохун также может решить эту проблему, то, пока Сяохун перехватывает трафик Сяомина, разве он не знает содержание? Чтобы упростить этот вопрос, можно ли расшифровать информацию, зашифрованную открытым ключом, с помощью того же открытого ключа? Ответ - нет! **Чтобы узнать эту причину, вы должны знать алгоритм RSA, о котором мы поговорим позже, шаг за шагом.

Цифровой сертификат

Предыдущий процесс доступа Сяомина к веб-сайту А содержит скрытые опасности и может быть атакован. Предположим, что Сяохун является хакером-посредником и теперь хочет атаковать Сяомин. Она тайно манипулирует компьютером Сяомина и заменяет открытый ключ веб-сайта А своим собственным:

  1. Сяомин посещает веб-сайт А, веб-сайт А отправляет Сяомину открытый ключ, но этот шаг подвергается атаке со стороны Xiaohong.
  2. Сяохун перехватил трафик Сяомина и заменил открытый ключ, отправленный веб-сайтом А, своим собственным.
  3. Сяо Мин получил неправильный открытый ключ и использовал этот открытый ключ для шифрования своей собственной информации, которая может содержать конфиденциальную информацию, такую ​​как его имя пользователя и пароль.
  4. Xiao Ming отправляет зашифрованную информацию на сайт A, и этот трафик перехватывается Xiaohong.
  5. Поскольку зашифрованный текст зашифрован с помощью открытого ключа Сяохуна, Сяохун расшифровывает его с помощью соответствующего закрытого ключа, чтобы получить пароль Сяомина, и атака завершена.

Видно, что только открытый и закрытый ключи не могут справиться с перехватом трафика посредником, и информация все равно будет взломана, если информация будет перехвачена в процессе передачи. Ключом к успеху этой атаки является то, что Сяомин получил неправильный открытый ключ, поэтому необходим механизм, гарантирующий, что Сяомин получит правильный открытый ключ веб-сайта А. Этот механизм представляет собой цифровой сертификат. Цифровой сертификат открыть очень просто, главное в нем — публичный ключ сайта А. Веб-сайт А помещает свой открытый ключ в цифровой сертификат и отправляет его Сяо Мину. Сяо Мин видит, что этот открытый ключ сертифицирован сертификатом и заслуживает доверия, поэтому он использует его. Даже если Xiaohong заменит открытый ключ, поскольку открытый ключ Xiaohong не сертифицирован сертификатом, Xiaomi сможет идентифицировать подделку.

Как можно гарантировать безопасность цифрового сертификата, разве Сяохуну недостаточно подделать еще один цифровой сертификат? Речь идет о CA (Certificate Authority), CA — это организация, выдающая цифровые сертификаты, а CA имеет свои открытые и закрытые ключи. ЦС шифрует сообщение своим закрытым ключом, который является открытым ключом веб-сайта А, а затем отправляет его пользователю.Пользователь получает информацию и расшифровывает ее с помощью открытого ключа ЦС, после чего он получает правильный открытый ключ сайта А. так,Цифровой сертификат на самом деле является открытым ключом веб-сайта, зашифрованным закрытым ключом ЦС.. У Сяохун нет закрытого ключа центра сертификации, поэтому она не может подделать цифровой сертификат веб-сайта и не может заменить открытый ключ, полученный Сяомин. так,Цифровой сертификат фактически гарантирует правильность открытого ключа веб-сайта, а ЦС гарантирует безопасность цифрового сертификата..

Поскольку ЦС гарантирует безопасность цифрового сертификата, кто будет гарантировать безопасность ЦС? Предположим, есть что-то X, что гарантирует безопасность CA, тогда кто будет гарантировать безопасность X? Такое ощущение, что эта цепочка доверия может быть бесконечной. . . На самом деле уровень безопасности УЦ очень высок, и его безопасность — это не только технические средства, но и юридические, и физические меры. И наоборот, возвращаясь к теме этой статьи, взлому https, здесь у нас, собственно, и есть первая идея: взломать УЦ! Вы можете заменить открытые ключи всех сертификатов под своим именем на свои и расшифровать все сайты, которые используют его сертификат.

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

сеансовый ключ

Шифрование и дешифрование открытых и закрытых ключей действительно очень безопасно, но его скорость очень низкая.Если каждое сообщение будет обрабатываться таким образом, это повлияет на всю эффективность связи, поэтому, когда мы устанавливаем соединение с https, на самом деле только одна информация, которой обмениваются через открытый и закрытый ключи: Секретный ключ сеанса. Сеансовый ключ — это не асимметричное шифрование, а симметричное шифрование. Симметричное шифрование очень распространено в некоторых кино- и телевизионных произведениях: главный герой получает карту сокровищ, но поскольку карта сокровищ написана паролем, он не может ее понять, книги как раз достаточно, чтобы расшифровать пароль карты сокровищ. Тогда эта книга на самом деле является шифровальной книгой.Во Второй мировой войне много информации было зашифровано методом шифровальной книги, и было много случаев получения военной разведки другой стороны путем перехвата шифровальной книги.Шифрование и дешифрование используют кодовые книги, фактически используется один и тот же секретный ключ, который является симметричным шифрованием.. Говоря словами компьютерного поля, этот пароль не является хеш-функцией, эта функция сопоставляет один символ с другим символом. Например, наша зашифрованная хэш-функция должна переместить символы назад на три, например, a -> d, b -> e, тогда "hello" станет:

h -> k

e -> h

l -> o

l -> o

o -> r

«привет» становится «хор», и злоумышленнику достаточно знать ваш алгоритм, а затем вычислить его обратно, продвинуться вперед на три цифры и расшифровать. Таким образом, симметричное шифрование относительно небезопасно, но если я могу гарантировать безопасность его кодовой книги (то есть секретного ключа), симметричное шифрование также может быть безопасным. Как обеспечить безопасность симметричного ключа шифрования? Используйте открытый и закрытый ключи для шифрования снова!Следовательно, после https-подключения между открытым и закрытым ключами происходит обмен только одной информацией, и это симметричный ключ шифрования, который является ключом сеанса.. Алгоритм симметричного шифрования представляет собой хеш-функцию, а шифрование и дешифрование выполняются относительно быстрее, такая схема рассматривается с точки зрения эффективности.

цифровой подписи

Цифровые подписи на самом деле очень просты и используются для обеспечения целостности и правильности информации:

  1. Сяо Мин сначала использует алгоритм дайджеста для создания дайджеста информации открытого текста, который похож на MD5, SHA-1, SHA-2, который представляет собой хеш-функцию, которую нельзя обратить.
  2. Сяо Мин шифрует этот дайджест открытым ключом.
  3. Сяо Мин будет подписью дополнительной проблемы с сервером за контентом
  4. После того, как сервер получит подпись, он расшифрует дайджест с помощью закрытого ключа.
  5. Сервер выполняет тот же алгоритм дайджеста для контента, чтобы получить дайджест.
  6. Если дайджест, рассчитанный сервером, совпадает с дайджестом в подписи, содержимое является полным и не было изменено.

Процесс рукопожатия HTTPS

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

  1. Сяо Мин инициирует запрос на веб-сайт А
  2. Веб-сайт A возвращает цифровой сертификат ЦС клиенту, а сертификат содержит открытый ключ веб-сайта A.
  3. Сяомин расшифровывает сертификат с помощью открытого ключа ЦС, встроенного в его компьютер, и получает открытый ключ веб-сайта А (открытый ключ ЦС встроен в браузер).
  4. Сяо Мин генерирует случайный симметричный ключ, который является ключом сеанса. Ключ сеанса должен быть сгенерирован клиентом, поскольку, как упоминалось ранее, открытый и закрытый ключи могут обеспечить только безопасность информации, отправляемой клиентом на веб-сайт.Информация, зашифрованная открытым ключом, может быть расшифрована только закрытым ключом. Сайт с закрытым ключом скрыт, поэтому другие люди не могут разгадать информацию. Но если веб-сайт генерирует сеансовый ключ и шифрует его своим закрытым ключом, то у каждого есть открытый ключ, и каждый может его разблокировать.
  5. Сяо Мин шифрует сеансовый ключ открытым ключом веб-сайта А и отправляет его на веб-сайт А.
  6. Затем веб-сайт А и Сяо Мин используют сеансовый ключ для связи по протоколу HTTP.

Алгоритм RSA

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

  1. Случайным образом выберите два простых числа p и q
  2. Вычислить n = pq
  3. Вычислить φ(n) = (p-1)(q-1)
  4. Найдите маленькое нечетное число e, взаимно простое с φ(n).Взаимно простое означает, что общий делитель двух чисел равен только 1.
  5. Для модуля φ(n) вычислить мультипликативную обратную величину d для e, т. е. найти такое d, что выполняется следующее уравнение: (e*d) mod φ(n) = 1
  6. Получить открытый ключ: (e, n), закрытый ключ: (d, n)
  7. Процесс шифрования: c = (m^e) mod n, (c — зашифрованный зашифрованный текст, m — исходный текст)
  8. Процесс расшифровки: m = (c^d) mod n

На седьмом шаге m в степени e, m - это исходный текст, который мы отправили, который может быть текстом, json или изображениями.Хотя существуют различные формы, все они двоичные 01 на компьютере, поэтому их можно преобразовать в числа, чтобы найти мощность. Давайте попробуем этот алгоритм с двумя числами:

  1. Выберите любые два простых числа 23 и 61.
  2. Вычислить n = 23 * 61 = 1403
  3. Вычислить φ(n) = (23-1) * (61-1) = 22 * ​​60 = 1320
  4. Найдите маленькое нечетное e, взаимно простое с φ(n), мы выбираем 7
  5. Вычислите мультипликативную обратную величину d, которую я вычислил здесь: d = 943. Друзья, интересующиеся обратным элементом умножения, могут поискать в сети, как его вычислить.Поскольку это не тема данной статьи, я не буду ее расширять.
  6. Получить открытый ключ (7, 1403), закрытый ключ (943, 1403)
  7. Попробуем зашифровать случайное число 5 открытым ключом, шифрование c = (m^e) mod n = (5^7) % 1403 = 78125 % 1403 = 960
  8. Расшифровка приватного ключа: m = (c^d) mod n = (960^943) % 1403 = 5, (960^943) — очень большое число, которое не подсчитать обычными калькуляторами, а тем более JS. Я использую это Веб-сайт считает:company.ru/retreat-номер-…
  9. Повторите попытку шифрования с закрытым ключом: c = (m^d) mod n = (5^943) % 1403 = 283
  10. Расшифровка открытого ключа: m = (c^e) mod n = (283^7) % 1403 = 5

Зная алгоритм, мы можем ответить на предыдущий вопрос: почему данные, зашифрованные открытым ключом, не могут быть разгаданы сами по себе? Обратите внимание на алгоритм шифрования(m^e) mod nЭто операция по модулю.Операция по модулю не может быть отменена. Например, 5 к 4 по модулю, 5%4=1, но, наоборот, зная x%4=1, найти x. Этот x может быть бесконечным, 5, 9, 13, 17. . . Таким образом, даже если у вас есть открытый ключ (e,n) и зашифрованный текст с, вы не знаете, какое значение принимает (m^e), и его нельзя решить с помощью инверсии. Это основной секрет асимметричного шифрования. Шифрование с закрытым ключом Точно так же, если вы зашифруете сами, вы не сможете его разгадать.

Идеи взлома RSA

Так называемый взлом RSA на самом деле состоит в том, чтобы вывести информацию, которую он скрыл, через общедоступную информацию, в частности, узнать открытый ключ (e, n), чтобы найти закрытый ключ (d, n), то есть найти д. Требование d, по сути, является обратным решением(e*d) mod φ(n) = 1, чтобы обратить эту формулу, мы должны знать φ(n), поскольку φ(n) = (p-1)(q-1), мы должны знать p и q. Мы знаем, что n = pq, а n известно, поэтому по-прежнему возможно знать p и q. Так что взлом RSA на самом деле является приговором:n известно, просто разделите n на произведение двух простых чисел.说起来简单,做起来非常难!因为实际使用时,n非常大,现在好多地方用的n都是2048 bits甚至4096 bits,这个数字转换成十进制也有几百位上千位长,做个对比,JS整数最多支持53 bits。 . .所以现实中有两条路来破解RSA:

  1. Найдите алгоритм, который эффективно разбивает большое число n на два простых числа. К сожалению, этот алгоритм до сих пор не найден в математическом сообществе.
  2. Если нет хорошего способа, используйте глупый способ, исчерпывающе проходя p, q из 2, пока их произведение не станет n. Говорят, что кому-то понадобилось 5 месяцев, чтобы вычислить n из 512 бит, а потом уже давно поменяли секретный ключ, и RSA тоже обновили до 1024 бит...

Суммировать

  1. HTTPS на самом деле HTTP+RSA+цифровой сертификат+сеансовый ключ
  2. RSA реализует асимметричное шифрование, что позволяет произвольно распределять открытый ключ, даже в случае утери закрытого ключа можно быстро заменить пару открытого и закрытого ключей. Устранена уязвимость в кодовых книгах симметричного шифрования.
  3. Цифровой сертификат гарантирует невозможность подделки распределенного открытого ключа.
  4. CA гарантирует безопасность цифровых сертификатов.
  5. Кто гарантирует безопасность УЦ — загадка
  6. Сеансовый ключ — это симметричное шифрование, цель которого — ускорить шифрование и дешифрование.
  7. Суть алгоритма RSA:
    1. Шифрование использует арифметику по модулю и вообще не может быть отменено.
    2. n принимает чрезвычайно большое число, которое превышает теоретический предел математики и промышленный предел компьютера.
  8. Есть три способа взломать HTTPS:
    1. Взломайте ЦС и замените открытый ключ сертификата под его именем на свой, вне зависимости от метода. . .
    2. Одержимый богом математики, находит эффективный алгоритм разложения больших чисел и вычисляет p, q за считанные минуты.
    3. Тьюринг разработал сверхбыстрый квантовый компьютер и вычислил p, q за секунды.
  9. Если ваш сайт не открывает https, вернитесь и откройте его, не забудьте найти надежный центр сертификации для покупки сертификата.

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

Добро пожаловать, чтобы обратить внимание на мой общедоступный номербольшой фронт атакиПолучите высококачественные оригиналы впервые~

Цикл статей "Передовые передовые знания":Nuggets.IM/post/5oh3FFC…

Адрес GitHub с исходным кодом из серии статей «Advanced Front-end Knowledge»:GitHub.com/Денис — см....