HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 07.04.2025, 06:04
M4x
Новичок
Регистрация: 20.05.2024
Сообщений: 0
С нами: 1046281

Репутация: 0
По умолчанию

Без лишних предисловий перейдем к делу.

У нас есть три шифртекста, которые на самом деле представляют одно и то же сообщение. Подсказка намекает на то, что Боб не слишком хорошо разбирается в RSA и допустил серьезную ошибку при шифровании. Мы видим, что вместо стандартной экспоненты e = 65537 он использовал значения 5, 7 и 13. А модули n1, n2 и n3 такие маленькие, что их легко разложить на множители. Это можно назвать критической уязвимостью.

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

Если мы возьмем первое сообщение и попытаемся вычислить приватную экспоненту d, то у нас ничего не выйдет:

Python:


Код:
>>
>
e1
=
5
>>
>
p1
=
181
>>
>
q1
=
331
>>
>
n1
=
181
*
331
# 59911
>>
>
phi_n1
=
(
p1
-
1
)
*
(
q1
-
1
)
>>
>
d
=
pow
(
e1
,
-
1
,
phi_n1
)
# Traceback (most recent call last): File "", line 1, in  ValueError: base is not invertible for the given modulus
На простом языке это означает, что Боб допустил фатальную ошибку в процессе шифрования.

Пробуем второе сообщение — и снова та же история:

Python:


Код:
>>
>
e2
=
7
>>
>
p2
=
449
>>
>
q2
=
809
>>
>
n2
=
449
*
809
# 363241
>>
>
phi_n2
=
(
p2
-
1
)
*
(
q2
-
1
)
>>
>
d
=
pow
(
e2
,
-
1
,
phi_n2
)
# Traceback (most recent call last): File "", line 1, in  ValueError: base is not invertible for the given modulus
Но вот третье сообщение, по-видимому, зашифровали правильно, и мы можем вычислить d:

Python:


Код:
>>
>
e3
=
13
>>
>
p3
=
647
>>
>
q3
=
727
>>
>
n3
=
647
*
727
# 470369
>>
>
phi_n3
=
(
p3
-
1
)
*
(
q3
-
1
)
>>
>
d
=
pow
(
e3
,
-
1
,
phi_n3
)
Теперь, когда у нас есть d, расшифровать флаг — проще простого:

Python:


Код:
>>
>
С
3
=
76794
>>
>
message
=
pow
(
С
3
,
d
,
n3
)
В итоге мы получаем трехзначное число, которое, разумеется, я вам не покажу, чтобы вы не жульничали, а решили таск самостоятельно и научились чему-нибудь новому.

Вернемся к условию задачки:

Код:


Код:
Боб шифрует для трех сторон одно и то же сообщение с помощью RSA.
Узнайте сообщение, отправленное Бобом. Во флаге укажите SHA256 от сообщения.
Нас просят указать SHA256 от расшифрованного сообщения. Это делается очень просто:

Python:


Код:
>>
>
from
hashlib
import
sha256
>>
>
result
=
sha256
(
str
(
message
)
.
encode
(
)
)
.
hexdigest
(
)
Получившуюся строку оборачиваем в Antichat и сдаем флаг.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.