• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

[Помогите] Решить задачку по RSA with Random

wowmaster

New member
17.10.2022
1
0
BIT
0
Я зашифровал сообщение, но решил перестраховаться и добавить немного рандома. Теперь всё точно безопасно!
Зашифрованный флаг должен иметь вид: Course{****************}, где количество * может быть любым, но слово Course и {} точно есть в флаге


Даны ключи:
N = 0xc8a92051a5845b2886cf515860ed4c93399218afaa67aa069d48650fc0db04b2df346886032c1f528aa201aeb103575da8b5901c5bfb22c2c98a4935abea66a1b9568ee966c1de17d1736aa7502262a6f435ec9aa43e418a7df1e89432222ff493ec00870c291dc9ab320edd415e50bcea384383b1f4588c170e30c0ead832ab0d4d9575f70eaf7750db6629208d8175038bfc2b805bf6cbd8aae0b0f28bdd8529b9fd9fe4ff5b0f86308d7541115b116263519447e98027e9f0032933aa290c86675b7d06cfc37ba28da88201e2d3ae14dcf03bebc9be8f278c31dd1271fd428cfbc8e83e5d4ad74a7716745cf71639b966c0ba725ffdf539f25619d692fd3d
e = 5
c1 = 0x69177ef31a4df79aea7d9c34a42db7996b758c55f8102d894204339b42c48ce240cb09879edae835993323960a2a20598b40a86c515d500f3353dd1559a340abed21304da305d1a7f179b2c46b302f282405fc1e1efc800a47410ab5ebd9942bf425a342731e5525051af79460ea036107e04f98feb779bbaa950f2dbbde691275414c4a41ceee632a2336f70ffa18b1b7d5ac38a46104df44dc44fdbbc405ec7e0b2e200e57d96f90dc6cfc508efced5122abcd6ee4464a8832b9d62b397f26fc29a8c81979091f8249cd4cadd482f6389dcc7b48f3bc307d69d45e7a1a994646394802e50462e6b92deb589135b6e4b643ff6208741a79219be66d292b57b7
c2 = 0x8021694922414189fc02dca1b531469f69a79c9c4c7a981ef0be86a59d3bd3f016be98d385a61c31b65fa61962cfe9d8e8862f49ea5c173d46c705591dd153fa29d372bf8eacb74c0b8d240561f49e746a6dd2ce05494116cdfa3d2b37c75bb19930013c2ccc94c64c61f022b314ccfcc3d673384c501cb60cb270a5aef81d075e418688b0a8b890b5da279d1619f008a8e481f0b94248ab966bc4909cb17d93afe4fa1f4929d87f46e67fdfadec9c67201005d13e4028ff54817c6facb9ba38416cc81790d8365942f045b09231ab1013ab128a9b5f69129917fac0b8624881c39fc7b2699c8d701995bdcf115a889753df9e98bdb074aaa31df0ec7b3ff1b

Дан файлик на питоне с шифровкой:

Python:
from random import Random
from Cryptodome.Util.number import getStrongPrime, inverse, GCD, bytes_to_long

def read_flag():
    with open('flag.txt', 'rb') as f:
        return b'This is my flag: ' + f.read()

def gen_key():
    e = 5
    while True:
        p, q = getStrongPrime(1024), getStrongPrime(1024)
        N = p * q
        phi = (p - 1) * (q - 1)

        if GCD(e, phi) == 1:
            d = inverse(e, phi)
            return N, e, d

if __name__ == '__main__':
    N, e, d = gen_key()
    flag = read_flag()
    m = bytes_to_long(flag)

    assert pow(m, e) > N
    print(f'N = {hex(N)}')
    print(f'e = {e}')
    c1 = pow(m, e, N)

    assert pow(c1, d, N) == m
    random = Random()
    random.seed(N)
    r = random.getrandbits(1024)
    c2 = pow(m + r, e, N)

    assert pow(c2, d, N) == m + r
    print(f'c1 = {hex(c1)}')
    print(f'c2 = {hex(c2)}')
 

Вложения

  • output.txt
    1,5 КБ · Просмотры: 61

GeorgeApple

New member
26.10.2022
1
0
BIT
0
Привет! У меня получилось Course{r54_1s_c00l_Bu7_s0metim3s_i7s_h4rd_to_s0lve_RjlBSY9N}
А откуда это задание? Может быть там ещё какие-то интересные есть? Что за контест?
 

PussyHunter

New member
26.10.2022
1
0
BIT
0
Привет! У меня получилось Course{r54_1s_c00l_Bu7_s0metim3s_i7s_h4rd_to_s0lve_RjlBSY9N}
А откуда это задание? Может быть там ещё какие-то интересные есть? Что за контест?
Получилось точно так же.
Числа в задании сгенерированы таким образом, что можно применить атаку ферма, можешь почитать статейки)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!