#crypto
Нулевой шифр
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Для решения таска потребуется уверенный навык программирования на Python. Надеюсь, это понятно.
Сначала заглянем в request.txt. В GET-запросе видим параметр FLAG со значением в виде строки, обернутой в base64:
FLAG=lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==
Скопируем эту строку куда-нибудь — еще пригодится. Про файл request.txt можно забыть, больше он не понадобится.
Идем в sourceCode.txt.
Эта строка сообщает нам о том, что используется алгоритм шифрования RC4, он же ARC4, он же Rivest Cipher 4. По сегодняшним меркам этот алгоритм шифрования считается устаревшим и больше не является криптографически безопасным.
Эти строки сообщают нам о том, что ключ — это первые шесть символов флага. Другими словами, CODEBY.
Эта строка сообщает нам о том, что ключ хешируется, но для шифрования используются лишь первые 16 байт ключа. Мы получили всю необходимую информацию и теперь можем с легкостью расшифровать флаг. Кстати, не рекомендую делать это посредством онлайн-декодера — скорее всего, у вас ничего не получится, да и необходимости в этом нет. Все что нужно сделать — это лишь немного переписать код. Приступаем:
Третью, четвертую и пятую строки можно скопировать из функции без изменений.
Прилагаю скрипт целиком с моими комментариями:
Выполняем скрипт и получаем флаг.
Рекомендую не бездумно копировать скрипт, а подумать над прочитанным и написать скрипт самостоятельно. Помните, что цель решения таска — это не получить флаг и чуть-чуть подняться в рейтинге, а научиться чему-нибудь новому.
#codebygames
Нулевой шифр
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Для решения таска потребуется уверенный навык программирования на Python. Надеюсь, это понятно.
Сначала заглянем в request.txt. В GET-запросе видим параметр FLAG со значением в виде строки, обернутой в base64:
FLAG=lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==
Скопируем эту строку куда-нибудь — еще пригодится. Про файл request.txt можно забыть, больше он не понадобится.
Идем в sourceCode.txt.
cipher = Cipher(algorithms.ARC4(hashed_key), mode=None, backend=default_backend())
Эта строка сообщает нам о том, что используется алгоритм шифрования RC4, он же ARC4, он же Rivest Cipher 4. По сегодняшним меркам этот алгоритм шифрования считается устаревшим и больше не является криптографически безопасным.
FLAG = '******{***********************************}'.encode()
key = FLAG[:6]Эти строки сообщают нам о том, что ключ — это первые шесть символов флага. Другими словами, CODEBY.
hashed_key = hashlib.sha256(key).digest()[:16]
Эта строка сообщает нам о том, что ключ хешируется, но для шифрования используются лишь первые 16 байт ключа. Мы получили всю необходимую информацию и теперь можем с легкостью расшифровать флаг. Кстати, не рекомендую делать это посредством онлайн-декодера — скорее всего, у вас ничего не получится, да и необходимости в этом нет. Все что нужно сделать — это лишь немного переписать код. Приступаем:
key = b'CODEBY'
FLAG= base64.b64decode('lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==')
Третью, четвертую и пятую строки можно скопировать из функции без изменений.
Прилагаю скрипт целиком с моими комментариями:
# Подключаем нужные библиотеки (или устанавливаем, если их нет)
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import base64
import hashlib
# Декодируем флаг из base64
FLAG= base64.b64decode('lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==')
# Обратите внимание, что ключ — это байтовая строка
key = b'CODEBY'
# Хешируем ключ, но используем лишь его первые 16 байт
hashed_key = hashlib.sha256(key).digest()[:16]
# Указываем, что хотим использовать алгоритм шифрования ARC4
cipher = Cipher(algorithms.ARC4(hashed_key), mode=None, backend=default_backend())
encryptor = cipher.encryptor()
# Передаем флаг на вход функции, которая производит расшифровку
ct = encryptor.update(FLAG) + encryptor.finalize()
# Печатаем флаг
print(ct)
Выполняем скрипт и получаем флаг.
Рекомендую не бездумно копировать скрипт, а подумать над прочитанным и написать скрипт самостоятельно. Помните, что цель решения таска — это не получить флаг и чуть-чуть подняться в рейтинге, а научиться чему-нибудь новому.
#codebygames
❤11🔥1
#crypto
Веселый RSA
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Даны три шифртекста, которые представляют собой одно и то же сообщение. Подсказка намекает, что Боб плохо разбирается в RSA, поэтому при шифровании допустил серьезную ошибку. Действительно, мы видим, что вместо стандартной экспоненты e = 65537 он использовал значения 5, 7 и 13, a модули n1, n2 и n3 настолько малы, что с легкостью раскладываются на множители. Это можно назвать критической уязвимостью.
Если мы возьмем первое по счету сообщение и попробуем вычислить приватную экспоненту d, то поймем, что это невозможно:
На простом языке это означает, что в процессе шифрования пользователь допустил фатальную ошибку.
Возьмем второе по счету сообщение и попробуем найти приватную экспоненту d – то же самое:
Возьмем третье по счету сообщение. Похоже, что это сообщение было зашифровано правильно, а значит, можно вычислить d:
После нахождения d мы с легкостью расшифровываем шифртекст:
Мы получили трехзначное число, которое, разумеется, я вам не покажу, чтобы вы не жульничали, а решили таск самостоятельно и следовательно, научились чему-нибудь новому.
Считаем от этого числа хеш-сумму по алгоритму SHA256:
Получившуюся строку обoрачиваем в CODEBY и сдаем флаг.
#codebygames
Веселый RSA
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Даны три шифртекста, которые представляют собой одно и то же сообщение. Подсказка намекает, что Боб плохо разбирается в RSA, поэтому при шифровании допустил серьезную ошибку. Действительно, мы видим, что вместо стандартной экспоненты e = 65537 он использовал значения 5, 7 и 13, a модули n1, n2 и n3 настолько малы, что с легкостью раскладываются на множители. Это можно назвать критической уязвимостью.
Если мы возьмем первое по счету сообщение и попробуем вычислить приватную экспоненту d, то поймем, что это невозможно:
>>> d = pow(e, -1, phi)
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: base is not invertible for the given modulus
На простом языке это означает, что в процессе шифрования пользователь допустил фатальную ошибку.
Возьмем второе по счету сообщение и попробуем найти приватную экспоненту d – то же самое:
>>> d = pow(e, -1, phi)
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: base is not invertible for the given modulus
Возьмем третье по счету сообщение. Похоже, что это сообщение было зашифровано правильно, а значит, можно вычислить d:
>>> d = pow(e, -1, phi)
>>> d
# 288613
После нахождения d мы с легкостью расшифровываем шифртекст:
>>> message = pow(c, d, n)
Мы получили трехзначное число, которое, разумеется, я вам не покажу, чтобы вы не жульничали, а решили таск самостоятельно и следовательно, научились чему-нибудь новому.
Считаем от этого числа хеш-сумму по алгоритму SHA256:
>>> from hashlib import sha256
>>> result = sha256(str(message).encode()).hexdigest()
Получившуюся строку обoрачиваем в CODEBY и сдаем флаг.
#codebygames
❤9🔥2
#crypto
HackOSINT
Бонусный трек
Билибизяка от @Max_RSC
Ссылка на задание
Сомневаюсь, что у кого-нибудь возникли трудности с первым этапом — это простейшее декодирование из binary. Инструмент Кибершеф, который для решения этого таска рекомендовали сами организаторы, автоматически определяет данную кодировку и любезно предлагает декодировать текст. Насколько я знаю, у большинства возникли трудности именно со вторым этапом.
Итак, после преобразования из binary мы получили непонятные 24 числа. Здесь надо применить рецепт From Float. Обратимся к документации Кибершефа и узнаем, какое преобразование производит этот рецепт:
IEEE754 — это стандарт, описывающий формат представления чисел с плавающей точкой. Используется, например, в компиляторах различных языков программирования.
Применяем рецепт From Float. Результат, который мы получили, не очень воодушевляет, но мы видим, что Кибершеф сразу подсказывает нам следующее преобразование: надо применить рецепт Gunzip. Делаем это и получаем строку в hex-нотации, которую Кибершеф снова предлагает нам декодировать, поначалу применив рецепт From Hex, а затем Url Decode. Так мы приходим к финальной строке, которая представляет собой стимовский урл:
иди решай задачу, не жульничай!
Идем по ссылке и находим флаг в имени юзера.
Кстати, кому-нибудь интересно, как выполнить преобразование From Float средствами Python? Если интересно, напишите об этом в комментариях — расскажу.
#HackOSINT2024
HackOSINT
Бонусный трек
Билибизяка от @Max_RSC
Ссылка на задание
Сомневаюсь, что у кого-нибудь возникли трудности с первым этапом — это простейшее декодирование из binary. Инструмент Кибершеф, который для решения этого таска рекомендовали сами организаторы, автоматически определяет данную кодировку и любезно предлагает декодировать текст. Насколько я знаю, у большинства возникли трудности именно со вторым этапом.
Итак, после преобразования из binary мы получили непонятные 24 числа. Здесь надо применить рецепт From Float. Обратимся к документации Кибершефа и узнаем, какое преобразование производит этот рецепт:
Convert from IEEE754 Floating Point Numbers
IEEE754 — это стандарт, описывающий формат представления чисел с плавающей точкой. Используется, например, в компиляторах различных языков программирования.
Применяем рецепт From Float. Результат, который мы получили, не очень воодушевляет, но мы видим, что Кибершеф сразу подсказывает нам следующее преобразование: надо применить рецепт Gunzip. Делаем это и получаем строку в hex-нотации, которую Кибершеф снова предлагает нам декодировать, поначалу применив рецепт From Hex, а затем Url Decode. Так мы приходим к финальной строке, которая представляет собой стимовский урл:
Идем по ссылке и находим флаг в имени юзера.
Кстати, кому-нибудь интересно, как выполнить преобразование From Float средствами Python? Если интересно, напишите об этом в комментариях — расскажу.
#HackOSINT2024
❤11🔥3👍2
#crypto
Тык-тык от @Max_RSC
Кратко: решетка Кардано. Зная формат флага (первые шесть символов ключа), можно расшифровать флаг без знания ключа.
Посмотрим на таблицу замен:
Выполняем преобразование в соответствии с таблицей замен:
Обратимся к подсказке: "Что-то с дырками и крутится". Сразу приходит на ум решетка Кардано.
Немного истории. Решетка Кардано — исторически первая известная шифровальная решетка. Этот метод шифрования был изобретен в XVI веке итальянским математиком и инженером Джероламо Кардано. Кстати, именно он впервые описал карданный вал, названный в его честь.
Метод шифрования, который предложил Джероламо Кардано, можно отнести к классу перестановочных шифров. Задачки, в которых фигурирует решетка Кардано, мы еще не раз встретим на различных CTF.
Для решения таска воспользуемся сервисом:
https://merri.cx/enigmator/cipher/grille.html
Указываем формат решетки (Grille Size). Поскольку длина шифртекста составляет 36 символов, нетрудно догадаться, что формат решетки — 6x6.
Вводим шифртекст в строку Cipher Text. Вводим ключ в строку Grille. Напомню, мы знаем первые шесть символов ключа — B0NU${. Нажимаем Decrypt.
# здесь должна быть картинка, прикрепленная к посту
Флаг пока нечитаем. Неудивительно, ведь мы указали всего 6 символов ключа. Какова длина ключа? Очевидно, что это число, на которое 36 делится без остатка – 9 и нам осталось подобрать 3 символа.
На четвертой строке сразу после символа '{' идет символ '_', при этом два раза подряд, но флаг не может начинаться с символа '_', поэтому исключаем первые две клетки. На шестой строке расположился символ '}' — исключаем эту клетку, потому что именно фигурной скобкой заканчивается флаг.
Осталось 9 символов, из которых нужно выбрать 3. Попробуем составить осмысленные слова из символов, которые нам доступны. Единственное, что приходит в голову — это W0W. В CTF с этого междометия нередко начинаются флаги. Сделаем предположение, что первое слово флага — это W0W. W0W можно составить всего двумя способами, один из которых сразу отобразит флаг.
#HackOSINT2024
Тык-тык от @Max_RSC
Кратко: решетка Кардано. Зная формат флага (первые шесть символов ключа), можно расшифровать флаг без знания ключа.
Посмотрим на таблицу замен:
6 > $
7 > {
8 > _
9 > }
Выполняем преобразование в соответствии с таблицей замен:
RB_01BWWD{NH_}U4_T$T14{__04W_0G04}WWОбратимся к подсказке: "Что-то с дырками и крутится". Сразу приходит на ум решетка Кардано.
Немного истории. Решетка Кардано — исторически первая известная шифровальная решетка. Этот метод шифрования был изобретен в XVI веке итальянским математиком и инженером Джероламо Кардано. Кстати, именно он впервые описал карданный вал, названный в его честь.
Метод шифрования, который предложил Джероламо Кардано, можно отнести к классу перестановочных шифров. Задачки, в которых фигурирует решетка Кардано, мы еще не раз встретим на различных CTF.
Для решения таска воспользуемся сервисом:
https://merri.cx/enigmator/cipher/grille.html
Указываем формат решетки (Grille Size). Поскольку длина шифртекста составляет 36 символов, нетрудно догадаться, что формат решетки — 6x6.
Вводим шифртекст в строку Cipher Text. Вводим ключ в строку Grille. Напомню, мы знаем первые шесть символов ключа — B0NU${. Нажимаем Decrypt.
# здесь должна быть картинка, прикрепленная к посту
Флаг пока нечитаем. Неудивительно, ведь мы указали всего 6 символов ключа. Какова длина ключа? Очевидно, что это число, на которое 36 делится без остатка – 9 и нам осталось подобрать 3 символа.
На четвертой строке сразу после символа '{' идет символ '_', при этом два раза подряд, но флаг не может начинаться с символа '_', поэтому исключаем первые две клетки. На шестой строке расположился символ '}' — исключаем эту клетку, потому что именно фигурной скобкой заканчивается флаг.
Осталось 9 символов, из которых нужно выбрать 3. Попробуем составить осмысленные слова из символов, которые нам доступны. Единственное, что приходит в голову — это W0W. В CTF с этого междометия нередко начинаются флаги. Сделаем предположение, что первое слово флага — это W0W. W0W можно составить всего двумя способами, один из которых сразу отобразит флаг.
#HackOSINT2024
🔥11❤4👍1
Forwarded from TaipanByte CTF
Всем привет! 😎
Мы добавили несколько райтапов на таски Codeby.games:
🗂 Архиватор
#web #easy
🔐 Доступ запрещен
#web #medium
💸 Базовая авторизация 2
#web #medium
🦖Мистер Дино
#web #easy
🍯Ханипот
#web #easy
👩👩👦Семья
#crypto #easy
㊙️Руны, руны, и ещё раз руны
#crypto #medium
🪆Матрешка
#forensic #easy
#codeby #writeup
Мы добавили несколько райтапов на таски Codeby.games:
#web #easy
#web #medium
#web #medium
🦖Мистер Дино
#web #easy
🍯Ханипот
#web #easy
👩👩👦Семья
#crypto #easy
㊙️Руны, руны, и ещё раз руны
#crypto #medium
🪆Матрешка
#forensic #easy
#codeby #writeup
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰4👍2
Всем привет! ✨
После очередного спасения от зашифровки всего интернета, легенда нашего с вами канала @Max_RSC вернулся, чтобы нести в мир знания криптографии!
#crypto #kubanctf2024
Четырехслойный шифр
Основная идея в том, что по принципу квадрата Полибия мы можем представить английский алфавит с символoм подчеркивания _ и цифрами от 1 до 9 в виде четырех групп по девять символов в каждой. Это будет иметь следующий вид:
A B C
D E F
G H I
J K L
M N O
P Q R
S T U
V W X
Y Z _
1 2 3
4 5 6
7 8 9
Еще раз посмотрим на наш шифртекст:
Предположим, что каждая тройка указывает на местоположение символа флага в виде трех координат: номер группы, номер строки и номер столбца.
Теперь применим эту гипотезу к нашему шифртексту. Получается:
123 – это первая группа (123), вторая строка (123) и третий столбец (123). Следовательно, это символ F.
223 – это вторая (223) группа, вторая строка (223) и третий столбец (223). Следовательно, это символ О.
313 – это третья группа (313), первая строка (313) и третий столбец (313). Следовательно, это символ U.
233 – это вторая (223) группа, третья строка (223) и третий столбец (223). Следовательно, это символ R.
Мы понимаем, что у нас получилось осмысленное слово – FOUR. Значит, мы на верном пути!
После очередного спасения от зашифровки всего интернета, легенда нашего с вами канала @Max_RSC вернулся, чтобы нести в мир знания криптографии!
#crypto #kubanctf2024
Четырехслойный шифр
Основная идея в том, что по принципу квадрата Полибия мы можем представить английский алфавит с символoм подчеркивания _ и цифрами от 1 до 9 в виде четырех групп по девять символов в каждой. Это будет иметь следующий вид:
A B C
D E F
G H I
J K L
M N O
P Q R
S T U
V W X
Y Z _
1 2 3
4 5 6
7 8 9
Еще раз посмотрим на наш шифртекст:
123 223 313 233 333 213 421 331 122 233 311 333 223 222 122 333 113 133 231 132 413 233
Предположим, что каждая тройка указывает на местоположение символа флага в виде трех координат: номер группы, номер строки и номер столбца.
Теперь применим эту гипотезу к нашему шифртексту. Получается:
123 – это первая группа (123), вторая строка (123) и третий столбец (123). Следовательно, это символ F.
223 – это вторая (223) группа, вторая строка (223) и третий столбец (223). Следовательно, это символ О.
313 – это третья группа (313), первая строка (313) и третий столбец (313). Следовательно, это символ U.
233 – это вторая (223) группа, третья строка (223) и третий столбец (223). Следовательно, это символ R.
Мы понимаем, что у нас получилось осмысленное слово – FOUR. Значит, мы на верном пути!
❤13
crypto.txt
938 B
🔥8❤3👌1
#crypto #codebygames #writeup
Pайтап по таску Sophie German c Codeby Games от @Max_RSC (ТОП-10 на платформе) 🚩
В описании намекается, что криптограф допустил какую-то серьезную ошибку. Ошибка, о которой идет речь, заключается в том, что он забыл проверить наличие значения n в публичной базе FactorDB. Это означает, что факторы (p и q), произведение которых дало n, уже известны, поэтому решение становится простейшим:
1. Идем на caйт https://dcode.fr/rsa-cipher и вводим значения n, c, e в соответствующие поля.
2. Нажимаем кнопку "CALCULATE/DECRYPT".
После выполнения этих шагов мы получим флаг.
Pайтап по таску Sophie German c Codeby Games от @Max_RSC (ТОП-10 на платформе) 🚩
В описании намекается, что криптограф допустил какую-то серьезную ошибку. Ошибка, о которой идет речь, заключается в том, что он забыл проверить наличие значения n в публичной базе FactorDB. Это означает, что факторы (p и q), произведение которых дало n, уже известны, поэтому решение становится простейшим:
1. Идем на caйт https://dcode.fr/rsa-cipher и вводим значения n, c, e в соответствующие поля.
2. Нажимаем кнопку "CALCULATE/DECRYPT".
После выполнения этих шагов мы получим флаг.
❤10
Рубрика #делимсятасками
Одним холодным московским вечером, когда я сидел у камина и размышлял о жизни, @Max_RSC прислал мне таск, с которым у него возникли трудности. Он присылал этот таск многим уровневым ребятам в русскоязычном комьюнити, но никто из них не смог найти решение, ребята только разводили руками и утверждали, что это абсолютная уцуцуга. Это достаточно старый таск, который был размещен на платформе Boxentriq. Когда-то это был интересный ресурс, где предлагались нешаблонные задачки в области криптографии, которых так не хватает современным CTF. Сейчас, насколько можно судить, платформа не развивается, но задачки все еще доступны для решения. Одной из таких задачек мы решили поделиться с вами.
#crypto
Freakquency
Описание: отсутствовало изначально.
Хинт:Хинтов нет, но вы держитесь!
Присылайте решение @Max_RSC
Одним холодным московским вечером, когда я сидел у камина и размышлял о жизни, @Max_RSC прислал мне таск, с которым у него возникли трудности. Он присылал этот таск многим уровневым ребятам в русскоязычном комьюнити, но никто из них не смог найти решение, ребята только разводили руками и утверждали, что это абсолютная уцуцуга. Это достаточно старый таск, который был размещен на платформе Boxentriq. Когда-то это был интересный ресурс, где предлагались нешаблонные задачки в области криптографии, которых так не хватает современным CTF. Сейчас, насколько можно судить, платформа не развивается, но задачки все еще доступны для решения. Одной из таких задачек мы решили поделиться с вами.
#crypto
Freakquency
Описание: отсутствовало изначально.
Хинт:
Присылайте решение @Max_RSC
🔥6❤5👍1
#googlectf #writeup #crypto
Redacted RSA 1 от @Max_RSC
Всем привет! Я планирую написать серию разборов задач по криптографии от Google CTF. Вкратце, суть заключается в том, что в каждой последующей задачке приватный ключ становится все более поврежденным. В Redacted RSA 1 нам предоставляется значение d, тогда как в Redacted RSA 2 извлечь d становится невозможно из-за сильного повреждения ключа. Тем не менее, значение d все еще можно рассчитать. Но давайте вернемся к первой, самой простой задачке этой серии.
В первом случае у нас есть часть приватного ключа, которая содержит не только значения открытого ключа (n и e), но и значение приватной экспоненты (d), то есть все необходимые данные для расшифровки. Основная сложность, с которой сталкиваются новички, заключается в том, что они не знают, как извлечь эти значения. Простым и доступным способом решения этой проблемы является использование онлайн-сервиса, такого как:
https://lapo.it/asn1js
Однако, чтобы ключ был правильно прочитан этим сервисом, необходимо выполнить несколько шагов. Во-первых, откройте приватный ключ в любом текстовом редакторе и замените все звездочки (*) на символы, допустимые в base64 (например, на «A»). После этого файл можно загрузить на сервис, который корректно интерпретирует данные. Если при попытке загрузить ключ на сервис возникла ошибка с сообщением наподобие "Error: Content size is not correct for container at offset 6", это означает, что вы что-то сделали не так.
В результате, загрузив наш поврежденный приватный ключ на сервис, мы увидели, что он все еще достаточно целостен, чтобы расшифровать шифртекст: значения n и d сохранились в полном объеме!
Я сделаю небольшое пояснение для новичков о значениях, которые мы рассматриваем:
• modulus (n) – это модуль. Обычно в задачах на RSA значение n предоставляется. В данном случае n представляет собой длинную строку, начинающуюся с 641646.
• publicExponent (e) – это публичная экспонента. В большинстве случаев она равна 65537, что является стандартом. Пара значений n и e в их совокупности образует открытый ключ.
• privateExponent (d) – это приватная экспонента. Закрытый (приватный) ключ формируется из пары значений d и n. Именно закрытый ключ используется для расшифровки зашифрованного текста. В большинстве задач по RSA необходимо рассчитать или каким-то образом получить значение d. В Redacted RSA 1 d уже известно.
• prime1 (p) – это первый фактор. В этой задачке значение p невозможно извлечь из-за повреждения приватного ключа, но нам это не нужно, так как у нас есть d.
• prime2 (q) – это второй фактор. Произведение первого и второго факторов дает значение n. Аналогично, значение q невозможно извлечь, но это нам не нужно, так как у нас есть d.
Чтобы скопировать конкретное значение с данного сервиса, необходимо щелкнуть по нему левой кнопкой мыши и выбрать опцию "Сopy value".
Еще одной распространенной проблемой, с которой сталкиваются новички, является то, что они не знают, как перевести шифртекст в десятичный формат (base10). В контексте RSA мы обычно работаем с целыми числами. На мой взгляд, наиболее быстрым и доступным способом будет использование языков программирования, например, Python:
Теперь остается только расшифровать флаг. Авторы задачки предлагают использовать команду OpenSSL, однако у новичков это может вызвать трудности. На соревнованиях имеет смысл потратить время более эффективно, вместо того чтобы вспоминать, какая именно команда нужна для расшифровки. Поэтому проще воспользоваться сервисом dCode:
1. Идем на https://dcode.fr/rsa-cipher и вводим значения n, c, e, d в соответствующие поля.
2. Нажимаем кнопку "CALCULATE/DECRYPT" для выполнения расшифровки.
Хотел бы добавить, что задачка по-прежнему доступна для решения, и вы можете повторить описанные шаги.
Redacted RSA 1 от @Max_RSC
Всем привет! Я планирую написать серию разборов задач по криптографии от Google CTF. Вкратце, суть заключается в том, что в каждой последующей задачке приватный ключ становится все более поврежденным. В Redacted RSA 1 нам предоставляется значение d, тогда как в Redacted RSA 2 извлечь d становится невозможно из-за сильного повреждения ключа. Тем не менее, значение d все еще можно рассчитать. Но давайте вернемся к первой, самой простой задачке этой серии.
В первом случае у нас есть часть приватного ключа, которая содержит не только значения открытого ключа (n и e), но и значение приватной экспоненты (d), то есть все необходимые данные для расшифровки. Основная сложность, с которой сталкиваются новички, заключается в том, что они не знают, как извлечь эти значения. Простым и доступным способом решения этой проблемы является использование онлайн-сервиса, такого как:
https://lapo.it/asn1js
Однако, чтобы ключ был правильно прочитан этим сервисом, необходимо выполнить несколько шагов. Во-первых, откройте приватный ключ в любом текстовом редакторе и замените все звездочки (*) на символы, допустимые в base64 (например, на «A»). После этого файл можно загрузить на сервис, который корректно интерпретирует данные. Если при попытке загрузить ключ на сервис возникла ошибка с сообщением наподобие "Error: Content size is not correct for container at offset 6", это означает, что вы что-то сделали не так.
В результате, загрузив наш поврежденный приватный ключ на сервис, мы увидели, что он все еще достаточно целостен, чтобы расшифровать шифртекст: значения n и d сохранились в полном объеме!
Я сделаю небольшое пояснение для новичков о значениях, которые мы рассматриваем:
• modulus (n) – это модуль. Обычно в задачах на RSA значение n предоставляется. В данном случае n представляет собой длинную строку, начинающуюся с 641646.
• publicExponent (e) – это публичная экспонента. В большинстве случаев она равна 65537, что является стандартом. Пара значений n и e в их совокупности образует открытый ключ.
• privateExponent (d) – это приватная экспонента. Закрытый (приватный) ключ формируется из пары значений d и n. Именно закрытый ключ используется для расшифровки зашифрованного текста. В большинстве задач по RSA необходимо рассчитать или каким-то образом получить значение d. В Redacted RSA 1 d уже известно.
• prime1 (p) – это первый фактор. В этой задачке значение p невозможно извлечь из-за повреждения приватного ключа, но нам это не нужно, так как у нас есть d.
• prime2 (q) – это второй фактор. Произведение первого и второго факторов дает значение n. Аналогично, значение q невозможно извлечь, но это нам не нужно, так как у нас есть d.
Чтобы скопировать конкретное значение с данного сервиса, необходимо щелкнуть по нему левой кнопкой мыши и выбрать опцию "Сopy value".
Еще одной распространенной проблемой, с которой сталкиваются новички, является то, что они не знают, как перевести шифртекст в десятичный формат (base10). В контексте RSA мы обычно работаем с целыми числами. На мой взгляд, наиболее быстрым и доступным способом будет использование языков программирования, например, Python:
# Открываем файл
with open('encrypted.txt', 'rb') as file:
byte_data = file.read() # Читаем содержимое файла как байты
# Преобразуем байты в base10
encoded = int.from_bytes(byte_data, 'big')
# Выводим результат
print(encoded)
Теперь остается только расшифровать флаг. Авторы задачки предлагают использовать команду OpenSSL, однако у новичков это может вызвать трудности. На соревнованиях имеет смысл потратить время более эффективно, вместо того чтобы вспоминать, какая именно команда нужна для расшифровки. Поэтому проще воспользоваться сервисом dCode:
1. Идем на https://dcode.fr/rsa-cipher и вводим значения n, c, e, d в соответствующие поля.
2. Нажимаем кнопку "CALCULATE/DECRYPT" для выполнения расшифровки.
Хотел бы добавить, что задачка по-прежнему доступна для решения, и вы можете повторить описанные шаги.
2👍12❤8🔥4🐳1
Продолжаем рубрику #делимсятасками
@Max_RSC в нашем уютном чате поделился интересным таском с замечательной платформы DECIPHER, и двое человек уже успели его решить. К сожалению, многие подписчики нашего канала не увидели этот таск, давайте это исправим!
Мы сделали выводы из предыдущего опыта и на этот раз предусмотрительно изменили название таски, поскольку в тот раз вместо криптоаналитиков пришли осинтеры и наосинтили райтап.
#crypto
1 Key Strategy for 26 Days of Transformation
9 111 55555555 33 00 55555555 9 11111 11 77777 333333333 888 1 11 55 4 5555555 9
Хинт: Название таска – это попытка автора намекнуть на что-то.
Присылайте решение @Max_RSC
Не забываем также решать предыдущее задание в этой рубрике!
@Max_RSC в нашем уютном чате поделился интересным таском с замечательной платформы DECIPHER, и двое человек уже успели его решить. К сожалению, многие подписчики нашего канала не увидели этот таск, давайте это исправим!
Мы сделали выводы из предыдущего опыта и на этот раз предусмотрительно изменили название таски, поскольку в тот раз вместо криптоаналитиков пришли осинтеры и наосинтили райтап.
#crypto
1 Key Strategy for 26 Days of Transformation
9 111 55555555 33 00 55555555 9 11111 11 77777 333333333 888 1 11 55 4 5555555 9
Хинт: Название таска – это попытка автора намекнуть на что-то.
Присылайте решение @Max_RSC
Не забываем также решать предыдущее задание в этой рубрике!
❤10👍2
#crypto
Тайна шести струн
В запыленном уголке старой мастерской вы нашли гитару Роберта Фриппа. Её строй кажется необычным, а на грифе виднеются загадочные отметки, словно кто-то оставил тайное послание:
BBCAGEGAACAGACBDGACBABAEDECEAEGEEBECBBCBEAEBCGAAGBECEB
Формат флага: flag{}
Хинт:Я слышал, что в информатике принято начинать нумерацию с нуля...
Автор: @blackwine554
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Тайна шести струн
В запыленном уголке старой мастерской вы нашли гитару Роберта Фриппа. Её строй кажется необычным, а на грифе виднеются загадочные отметки, словно кто-то оставил тайное послание:
BBCAGEGAACAGACBDGACBABAEDECEAEGEEBECBBCBEAEBCGAAGBECEB
Формат флага: flag{}
Хинт:
Автор: @blackwine554
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4❤1👌1
#crypto
Загадка Евклида
На столе в кабинете математика кто-то оставил загадочную записку с этим текстом. Помоги разобраться, что это может значить.
Формат флага: KFCCTF{}
Автор: @while_not_False
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Загадка Евклида
7A 6A 75 72 6C 76 48 54 09 54 5C 04 7A 66 4A 0D 40 71 04 67 7F 51 03 5D 67 75 08 5D 47 04 02 5B 62 4E
На столе в кабинете математика кто-то оставил загадочную записку с этим текстом. Помоги разобраться, что это может значить.
Формат флага: KFCCTF{}
Автор: @while_not_False
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5💊3
IMG_20250427_061704_107.jpg
341.5 KB
#crypto #coding #tctf2025
Капибьюти
Суть задания, расшифровать купон, который зашифровал креативный маркетолог.
В задании дается картинка со множеством изображений и одна строка с надписью "Салон капибьюти спа", которая отсылает нас к ключу от шифра, однако полностью ключа нет, придется додумывать самому, то есть та буква, что находится над картинкой ей и присваивается.
Таким образом расставив все буквы, соответствующие картинкам, и додумав по смыслу слова, получим сообщение, введя которое на сайте, получим флаг.
Автор: @MRX_120
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капибьюти
Суть задания, расшифровать купон, который зашифровал креативный маркетолог.
В задании дается картинка со множеством изображений и одна строка с надписью "Салон капибьюти спа", которая отсылает нас к ключу от шифра, однако полностью ключа нет, придется додумывать самому, то есть та буква, что находится над картинкой ей и присваивается.
Таким образом расставив все буквы, соответствующие картинкам, и додумав по смыслу слова, получим сообщение, введя которое на сайте, получим флаг.
Автор: @MRX_120
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
task.txt
411 B
#crypto
Странный шифр
Вчера мой друг решил поиграть в шпионов и придумал какой-то «супернадежный» алгоритм шифрования. Но мне кажется, я уже где-то видел что-то очень похожее... Поможешь разобраться, что за шифр он использовал?
Автор: @while_not_False
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Странный шифр
Вчера мой друг решил поиграть в шпионов и придумал какой-то «супернадежный» алгоритм шифрования. Но мне кажется, я уже где-то видел что-то очень похожее... Поможешь разобраться, что за шифр он использовал?
Автор: @while_not_False
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
#crypto #medium #writeup
Kuban CTF – "Двойная проблема" от @Max_RSC (ТОП-10 на HackerLab)
Перед нами очередная задачка из мира CTF, где дают слегка кривую (точнее — уязвимую) реализацию RSA. В этот раз на входе у нас два модуля n1 и n2, одинаковая публичная экспонента e, и одно зашифрованное сообщение c. Все необходимые данные приведены непосредственно в тексте поста, поэтому отдельный файл не прикладывается.
Ключевой момент: когда дают сразу два разных n, у них может оказаться общий делитель. Если так, то мы фактически получаем одно из простых чисел, из которых складывается модуль n. Безопасность RSA держится на сложности факторизации, и как только мы каким-то образом обошли эту сложность, остальное — детская арифметика. То есть задача опирается на тот факт, что RSA небезопасен, если модули разделяют хотя бы один множитель. Если мы найдем один из множителей, например, p, то после этого сможем легко посчитать функцию Эйлера, найти приватную экспоненту d и расшифровать флаг.
Чтобы найти p, подтягиваем функцию gcd из библиотеки math:
Подставляем числа, которые даны по условию:
Вычисляем общий делитель:
Теперь у нас на выбор два пути: либо закинуть все это добро в онлайн‑сервис (вроде dcode.fr) и быстро получить результат, либо честно проделать руками в Python — ради спортивного интереса займемся вторым (хотя на соревнованиях я выбираю первое :D)
Находим второй множитель для n1. Про n2 в данном случае можно смело забыть — он уже отработал свое:
Считаем значение функции Эйлера, то есть phi от n1:
Далее вычисляем приватную экспоненту:
Ну и кульминация: расшифровываем сообщение:
Остался финальный штрих — превратить число в строку. Новичков может сбить с толку момент с bytes.fromhex(...). Дело в том, что функция ждет строку из шестнадцатеричных символов. Когда мы пишем hex(m), то получаем строку вида '0x...'. Поэтому [2:] аккуратно обрезает приставку '0x', и тогда все работает без ошибок:
💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Kuban CTF – "Двойная проблема" от @Max_RSC (ТОП-10 на HackerLab)
Перед нами очередная задачка из мира CTF, где дают слегка кривую (точнее — уязвимую) реализацию RSA. В этот раз на входе у нас два модуля n1 и n2, одинаковая публичная экспонента e, и одно зашифрованное сообщение c. Все необходимые данные приведены непосредственно в тексте поста, поэтому отдельный файл не прикладывается.
Ключевой момент: когда дают сразу два разных n, у них может оказаться общий делитель. Если так, то мы фактически получаем одно из простых чисел, из которых складывается модуль n. Безопасность RSA держится на сложности факторизации, и как только мы каким-то образом обошли эту сложность, остальное — детская арифметика. То есть задача опирается на тот факт, что RSA небезопасен, если модули разделяют хотя бы один множитель. Если мы найдем один из множителей, например, p, то после этого сможем легко посчитать функцию Эйлера, найти приватную экспоненту d и расшифровать флаг.
Чтобы найти p, подтягиваем функцию gcd из библиотеки math:
from math import gcd
Подставляем числа, которые даны по условию:
n1 = 85301229878846970301323107702818609695755812591124862399151849850592748938587788039100822431199468780483863005508930154818093365993106028516482945027104435477220021520315775763582770886230113033749748971338316409196598045001663482949869374010947883957820793242137793210215930782186351794325806945717508347881
n2 = 109513893064865824312887126037695992618837379743053225051510712684706298394844250173030307725980622229363463153247419002611731684061578669993893758240971054995662819118490841792391822485215186261857628830400956404892168386609596159676364114308057445982469895464743365411603666960249026127185036946732158072467
e = 65537
c = 80523060741828874775927939583674208314359823391190778967023421748976347340246911181413681174368696929906966394615901583879335335760357963720615301569603850444832668348817460953008596314270793433890476685628856002996942980704863201169642782967237984763737464120837902881702995220342897353879003315047260081532
Вычисляем общий делитель:
p = gcd(n1, n2)
Теперь у нас на выбор два пути: либо закинуть все это добро в онлайн‑сервис (вроде dcode.fr) и быстро получить результат, либо честно проделать руками в Python — ради спортивного интереса займемся вторым (хотя на соревнованиях я выбираю первое :D)
Находим второй множитель для n1. Про n2 в данном случае можно смело забыть — он уже отработал свое:
q = n1 // p
Считаем значение функции Эйлера, то есть phi от n1:
phi_n1 = (p - 1) * (q - 1)
Далее вычисляем приватную экспоненту:
d = pow(e, -1, phi_n1)
Ну и кульминация: расшифровываем сообщение:
m = pow(c, d, n1)
Остался финальный штрих — превратить число в строку. Новичков может сбить с толку момент с bytes.fromhex(...). Дело в том, что функция ждет строку из шестнадцатеричных символов. Когда мы пишем hex(m), то получаем строку вида '0x...'. Поэтому [2:] аккуратно обрезает приставку '0x', и тогда все работает без ошибок:
flag = bytes.fromhex(hex(m)[2:])
print(flag)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤30🔥7 2