Посмотрите на один раунд сети: вход (L, R) превращается в выход (L, R') = (L, F(L)^R)
А теперь обратно: вход (L, R') = (L, F(L)^R) превращается в выход (L, R'') = (L, F(L)^F(L)^R) = (L, R)
Осталось только добрать нужное количество раундов и менять местами L и R между раундами. Вот и вся магия :)
И еще важный, если не ключевой момент:
>> Функция F по идее может быть любой выдуманной функцией (хоть сложным хэшем, хоть тупо возвращающей 0)
Это не так, F обязательно должна зависеть от ключа k, т.е. в моем комментарии следует заменить F(L) на F(k, L).
Иначе всегда можно вычислить F(L) и раунд является бессмысленным.
Почему сеть Фейстеля работает? Объяснение «на пальцах»