SharedZipper_DIFG.sagewsOpen in CoCalc
Deep-Iterates-based attack on Zipper hash of $k$ hash functions
n = var('n')
l = var('l')
lp = var('lp')
k = var('k')
kappa = var('kappa')
s = var('s')
t = var('t')
d = var('d')
r = var('r')

Step1 = n / 2
Step2 = t
Step3 = n / 2
Step4 = lp
Step5 = n - l
Step6 = r + n - t

show('--------------------------------------------------------------------')
show('Complexity of Phases are (log2): ')
show('Step 1: ', Step1.simplify_full())
show('Step 2: ', Step2.simplify_full())
show('Step 3: ', Step3.simplify_full())
show('Step 4: ', Step4.simplify_full())
show('Step 5: ', Step5.simplify_full())
show('Step 6: ', Step6.simplify_full())
show('--------------------------------------------------------------------')

pairs1 = 2 * r
pairs2 = k * n - (k + 1) * d
pairs_eq = (pairs1 == pairs2)
show('--------------------------------------------------------------------')
show('When the message length is limited to be no more than (log2): ', n / 2)
show('the success of the attack requires: ', pairs_eq)
rs = solve([pairs_eq], r)[0]
show('which implies: ', rs)
rs = rs.rhs()

Step6 = Step6(r = rs)
show('--------------------------------------------------------------------')
show('Complexity of Phases are (log2): ')
show('Step 1: ', Step1.simplify_full())
show('Step 2: ', Step2.simplify_full())
show('Step 3: ', Step3.simplify_full())
show('Step 4: ', Step4.simplify_full())
show('Step 5: ', Step5.simplify_full())
show('Step 6: ', Step6.simplify_full())

ts = solve([Step2 == Step6], t)[0]
show('--------------------------------------------------------------------')
show('Balance the Step 2 and 6 by setting: ')
show(ts)
ts = ts.rhs()

Step2  = Step2(t = ts)
Step6  = Step6(t = ts)

show('--------------------------------------------------------------------')
show('Complexity of Phases are (log2): ')
show('Step 1: ', Step1.simplify_full())
show('Step 2: ', Step2.simplify_full())
show('Step 3: ', Step3.simplify_full())
show('Step 4: ', Step4.simplify_full())
show('Step 5: ', Step5.simplify_full())
show('Step 6: ', Step6.simplify_full())

show('--------------------------------------------------------------------')
show('Optimize the complexity by setting: ')
show(d == n/2)
show(lp == n/2)
Step2  = Step2(d = n/2, lp = n/2)
Step4  = Step4(lp = n/2)
Step6  = Step6(d = n/2, lp = n/2)

show('--------------------------------------------------------------------')
show('Complexity of Phases are (log2): ')
show('Step 1: ', Step1.simplify_full())
show('Step 2: ', Step2.simplify_full())
show('Step 3: ', Step3.simplify_full())
show('Step 4: ', Step4.simplify_full())
show('Step 5: ', Step5.simplify_full())
show('Step 6: ', Step6.simplify_full())
show('--------------------------------------------------------------------')

for i in range(2, 6):
show(' ------------------------------ ', k == i, ' ------------------------------')
Step2cplx = Step2(k = i)
Step2cplxs = Step2cplx(kappa=log(i, 2)).simplify_full()
show('Complexity is: ', Step2cplxs)

--------------------------------------------------------------------
Complexity of Phases are (log2):
Step 1: $\displaystyle \frac{1}{2} \, n$
Step 2: $\displaystyle t$
Step 3: $\displaystyle \frac{1}{2} \, n$
Step 4: $\displaystyle \mathit{lp}$
Step 5: $\displaystyle -l + n$
Step 6: $\displaystyle n + r - t$
--------------------------------------------------------------------
--------------------------------------------------------------------
When the message length is limited to be no more than (log2): $\displaystyle \frac{1}{2} \, n$
the success of the attack requires: $\displaystyle 2 \, r = -d {\left(k + 1\right)} + k n$
which implies: $\displaystyle r = -\frac{1}{2} \, d k + \frac{1}{2} \, k n - \frac{1}{2} \, d$
--------------------------------------------------------------------
Complexity of Phases are (log2):
Step 1: $\displaystyle \frac{1}{2} \, n$
Step 2: $\displaystyle t$
Step 3: $\displaystyle \frac{1}{2} \, n$
Step 4: $\displaystyle \mathit{lp}$
Step 5: $\displaystyle -l + n$
Step 6: $\displaystyle -\frac{1}{2} \, d k + \frac{1}{2} \, {\left(k + 2\right)} n - \frac{1}{2} \, d - t$
--------------------------------------------------------------------
Balance the Step 2 and 6 by setting:
$\displaystyle t = -\frac{1}{4} \, d k + \frac{1}{4} \, {\left(k + 2\right)} n - \frac{1}{4} \, d$
--------------------------------------------------------------------
Complexity of Phases are (log2):
Step 1: $\displaystyle \frac{1}{2} \, n$
Step 2: $\displaystyle -\frac{1}{4} \, d k + \frac{1}{4} \, {\left(k + 2\right)} n - \frac{1}{4} \, d$
Step 3: $\displaystyle \frac{1}{2} \, n$
Step 4: $\displaystyle \mathit{lp}$
Step 5: $\displaystyle -l + n$
Step 6: $\displaystyle -\frac{1}{4} \, d k + \frac{1}{4} \, {\left(k + 2\right)} n - \frac{1}{4} \, d$
--------------------------------------------------------------------
Optimize the complexity by setting:
$\displaystyle d = \frac{1}{2} \, n$
$\displaystyle \mathit{lp} = \frac{1}{2} \, n$
--------------------------------------------------------------------
Complexity of Phases are (log2):
Step 1: $\displaystyle \frac{1}{2} \, n$
Step 2: $\displaystyle \frac{1}{8} \, {\left(k + 3\right)} n$
Step 3: $\displaystyle \frac{1}{2} \, n$
Step 4: $\displaystyle \frac{1}{2} \, n$
Step 5: $\displaystyle -l + n$
Step 6: $\displaystyle \frac{1}{8} \, {\left(k + 3\right)} n$
--------------------------------------------------------------------
------------------------------ $\displaystyle k = 2$ ------------------------------
Complexity is: $\displaystyle \frac{5}{8} \, n$
------------------------------ $\displaystyle k = 3$ ------------------------------
Complexity is: $\displaystyle \frac{3}{4} \, n$
------------------------------ $\displaystyle k = 4$ ------------------------------
Complexity is: $\displaystyle \frac{7}{8} \, n$
------------------------------ $\displaystyle k = 5$ ------------------------------
Complexity is: $\displaystyle n$
------------------------------ $\displaystyle k = 3$ ------------------------------
Complexity is: $\displaystyle \frac{3}{4} \, n$
------------------------------ $\displaystyle k = 4$ ------------------------------
Complexity is: $\displaystyle \frac{7}{8} \, n$
------------------------------ $\displaystyle k = 5$ ------------------------------
Complexity is: $\displaystyle n$