Автор: 1MiKHalyCH1
Самая стандартная (правда самописная) система шифрования. Сможешь достать флаг?
/api/encrypt
- ручка для шифрования. Отправляйте POST-запросы
http://press-f-to-feistel.hdcourse.ru/api/get_flag
Дана криптосистема на основе сети Фейстеля.
Прочитав код, можно понять, что S-box в нём вообще не используется. Это значит, что система шифрования линейная. То есть любой ct
можно выразить в виде комбинации pt:
pt1 ^ pt2 = ct1 ^ ct2
- Построим базисные вектора. Для этого зашифруем нолики, а потом единичку на каждом из возможных мест. Получим базисные вектора:
basis[i] = E(0..1(на i-ом месте)..0) ^ E(0..0)
- Построим из них "диагональную" матрицу (т.е. для
I
построимA = E(I) ^ E(0)
, где i-ая строчка:
A[i] = (E(I)^E(0))[i] = E(I[i]) ^ E(0) = basis[i]
- Для каждого блока флага решим:
A = E(I)^E(0), b = flag_block, c = E(flag_block) ^ E(0)
bA = c => A.solve_left(c) = b
-
Напечатаем флаг
-
...
-
PROFIT!
feistel.py - файл с реализацией Фейстеля
LetoCTF{F3i5TeL_w1Th0u7_SBOX_1s_n0t_s3cUr3}