Самый простой способ сделать это для $2р$ Круглый шифр состоит в том, чтобы разделить ключ на две половины и основать первую $г$ подразделы на одну половину и вторую $г$ подразделы на другой половине.
ETA 20220416: Таким образом, для блочного шифра с циклической функцией $F(х,к)$ и подразделы $k_1,\ldots, k_{2r}$, вход $р$ и вне $с$ у нас есть
$$c=F(F(F(F(\cdots F(F(p,k_1),k_2)\cdots),k_{2r-2}),k_{2r-1}),k_{2r}) $$
который переставляется на
$$F^{-1}(F^{-1}(F^{-1}(\cdots F^{-1}(c,k_{2r})\cdots,k_{r+2}), k_{r+1})=F(F(F(F(\cdots F(F(p,k_1),k_2)\cdots),k_{r-2}),k_{r-1}),k_ {г}).$$
Учитывая несколько совпадающих $р$ и $с$ значений (достаточно одной пары, если размер ключа равен размеру блока), перебора всех возможностей для первой половины ключа достаточно, чтобы сгенерировать все возможности для каждой правой части для каждого значения $р$. Мы можем составить список этих возможных правых сторон. Так же, учитывая $с$ перебора всех возможностей для второй половины ключа достаточно, чтобы сгенерировать все возможности для левой части, и для каждой возможной левой части мы проверяем, появляется ли она в правой части. Если мы находим совпадение, с хорошей вероятностью соответствующие первая и вторая половины ключа будут фактическими половинами требуемого ключа.