VE475 Cryptography Note 2
All info comes from Manuel’s slides on Lecture 2.
Block Cipher
A block cipher is composed of 2 co-inverse functions:
$$
\begin{aligned}
E:\lbrace 0,1\rbrace^n\times\lbrace0,1\rbrace^k&\to\lbrace 0,1\rbrace^n& D:\lbrace 0,1\rbrace^n\times\lbrace0,1\rbrace^k&\to\lbrace 0,1\rbrace^n\\
(P,K)&\mapsto C&(C,K)&\mapsto P
\end{aligned}
$$
where $n,k$ means the size of a block and key respectively.
The goal is that given a key $K$ and design an invertible function $E$ whose output cannot be distinguished from a random permutation over $\lbrace 0, 1\rbrace^n$.
Mode ECB
Electronic Codebook mode has the basic principle that
- Splits the plaintext in blocks of size $n$.
- Encrypt each block with a function $E$ and a key $K$.
$$
\begin{aligned}
b_1&&b_2&&b_3&&\dots&&b_n\\
\Bigg\downarrow&&\Bigg\downarrow&&\Bigg\downarrow&&&&\Bigg\downarrow\\
E_k&&E_k&&E_k&&\dots&&E_k\\
\Bigg\downarrow&&\Bigg\downarrow&&\Bigg\downarrow&&&&\Bigg\downarrow\\
c_1&&c_2&&c_3&&\dots&&c_n
\end{aligned}
$$
The limitation of ECB mode is that, consider a block is repeated several times over the message, then it is easy to guess what is happening since they share same $K$.
Mode CBC
Cipher Block Chaining mode has the following structure of encryption
$$
\newcommand{\ra}[1]{!!!!!!!!!!!!\xrightarrow{\quad#1\quad}!!!!!!!!}
\newcommand{\da}[1]{\bigg\downarrow\raise.5ex\rlap{\scriptstyle#1}}
\begin{array}{ccccccccc}
&&&&b_0&&&&b_1&&&&b_2&&&&\dots&&&&b_n\newline
&&&&\Big\downarrow&&&&\Big\downarrow&&&&\Big\downarrow&&&&&&&&\Big\downarrow\newline
IV&&\to&&\oplus&&&&\oplus&&&&\oplus&&&&&&&&\oplus\newline
&&&&\da{E_k}&&\nearrow&&\da{E_k}&&\nearrow&&\da{E_k}&&\nearrow&&&&\nearrow&&\da{E_k}\newline
&&&&c_0&&&&c_1&&&&c_2&&&&&&&&c_n
\end{array}
$$
and the structure of decryption of
$$
\newcommand{\ra}[1]{!!!!!!!!!!!!\xrightarrow{\quad#1\quad}!!!!!!!!}
\newcommand{\da}[1]{\bigg\downarrow\raise.5ex\rlap{\scriptstyle#1}}
\begin{array}{ccccccccc}
&&&&c_0&&&&c_1&&&&c_2&&&&\dots&&&&c_n\newline
&&&&\da{E_k^{-1}}&&\searrow&&\da{E_k^{-1}}&&\searrow&&\da{E_k^{-1}}&&\searrow&&&&\searrow&&\da{E_k^{-1}}\newline
IV&&\to&&\oplus&&&&\oplus&&&&\oplus&&&&&&&&\oplus\newline
&&&&\da{}&&&&\da{}&&&&\da{}&&&&&&&&\da{}\newline
&&&&b_0&&&&b_1&&&&b_2&&&&&&&&b_n
\end{array}
$$
It have to be done in a sequential way, so it cannot be parallelized. So we can introduce a new method next.
Mode CTR
$$
\newcommand{\da}[1]{\bigg\downarrow\raise.5ex\rlap{\scriptstyle#1}}
\begin{array}{ccccccccc}
ct &&&& ct+1 &&&& ct+2 &&&& \dots &&&& ct+n\newline
&&&& \da{E_k} &&&& \da{E_k} &&&& &&&& \da{E_k}\newline
&&b_1\longrightarrow&&\oplus&&b_2\longrightarrow&&\oplus&&&&&&b_n\longrightarrow&&\oplus\newline
&&&&\da{}&&&&\da{}&&&&&&&&\da{}\newline
&&&&c_1&&&&c_2&&&&&&&&c_n
\end{array}
$$
CT stands for counter, for a new block, it generates new counter value then XOR with block value. It can be run in parallel.
Randomness Definition
We apply the Kolmogorov randomness definition here, with $x$ be a string
- We way that $x$ is random $\iff$ it is not shorter than any program that can produce it in any language.
- The entropy of $x$ is the minimum number of bits necessary to describe $x$.
Thus, a random string of length $k$ cannot be composed in any way, therefore it has entropy $k$.
Fermat’s Little Theorem
Let $p\in\mathbb{N}, a\in\mathbb{Z}$. If $p$ is prime and $p\nmid a$, then $a^{p-1}\equiv1\text{ mod }p$.
We can try the proof like that:
Consider $S=\lbrace 1,2,\dots,p-1\rbrace$, then $S\equiv S\text{ mod }p$. If we do $a\cdot S=\lbrace 1\cdot a,2\cdot a,\dots,(p-1)\cdot a\rbrace$, then if $a\cdot S\equiv S\text{ mod }p$ ?
If this was the case, we can have $a\cdot v_0\equiv a\cdot v_1\text { mod }p$ for some $1 \le v_0 < v_1\le p-1$. Since $\text{gcd}(a,p)=1$, then $v_0\equiv v_1\text{ mod }p$, which means $v_0=v_1$, leading to contradiction.
Thus $a\cdot S\equiv S\text{ mod }p$. In this way, we can have
$$
\prod (a\cdot S)=(\prod_{i=1}^{p-1}i)\cdot a^{p-1}\equiv (\prod^{p-1}_{i=1}i)\text{ mod }p
$$
But we know that $\forall i \in S, i \nmid p$, thus $a^{p-1}\equiv 1\text{ mod }p$.
Chinese Remainder Theorem
Let $m_1, \dots,m_k\in\mathbb{N}\backslash\lbrace 0\rbrace$ be pairwise relatively prime and $a_1,\dots,a_k\in\mathbb{Z}$. Then the system of congruences
$$
\begin{cases}
x&&\equiv && a_1\text{ mod }m_1,\newline
x&&\equiv && a_2\text{ mod }m_2,\newline
&&\vdots\newline
x&&\equiv && a_k\text{ mod }m_k.
\end{cases}
$$
has a unique solution modulo $M= \prod\limits^{k}_{i=1} m_i$.
Then we setup a table here to see what is required:
$$
\begin{array}{c|c|c|c}
a_i & m_i & M_i & t_i\newline
& & \dfrac{M}{m_i} & t_i\cdot M_i\equiv 1\mod m_i
\end{array}
$$
The solution space is $\lbrace kM+\sum\limits^n_{i=1}a_i t_iM_i\rbrace$ where $k\in\mathbb{Z}$.
Squares Modulo Prime
Lemma: If $p\equiv 3\mod 4$ is prime, then equation $x^2\equiv -1\pmod p$ has no solution.
Proof: Suppose $x$ exists, then by Fermat’s Little Theorem, $(x^2)^{\frac{p-1}{2}}\equiv x^{p-1}\equiv 1\pmod p$.
But the $p\equiv 3\mod 4$, implies $\frac{p-1}{2}$ odd and $(-1)^{\frac{p-1}{2}}\equiv -1\pmod p$.
Proposition
Let $p\equiv 3 \mod 4$ be prime, $y$ be an integer and $x\equiv y^{\frac{p+1}{4}}\pmod p$.
- If $y$ has a square root mod $p$, then its square roots are $\pm x\pmod p$.
- If $y$ has no square root mod $p$, then the square roots of $-y$ are $\pm x\pmod p$.
Proof: According to Fermat’s Little Theorem, we get $x^4 \equiv y^{p+1}\equiv y^2\pmod p$.
According to Bezout Theorem, since $p$ prime, then for all non zero elements, there exists multiplicative inverse.
Therefore we rewrite previous eq into $(x^2 - y)(x^2+y)\equiv 0\pmod p$ implies $x^2\equiv\pm y\pmod p$.
Consider exists $a$ and $b$ satisfying at the same time that $y\equiv a^2\pmod p$ and $-y\equiv b^2\pmod p$.
Then $(b^{-1} a)^2\equiv -1\pmod p$, then this contradicts lemma.
Hence exactly only one of $y$ and $-y$ has square roots $\pm x\pmod p$.
BBS Generator
BBS Generator is a Pseudo-Random Bits Generator.
- Let $p,q$ be 2 large primes with $p\equiv q\equiv 3\pmod 4$.
- Set $n=p\cdot q$.
- Choose a random integer $x$ coprime to $n$.
- Define $\begin{cases}x_0&\equiv x^2\pmod n\\\vdots\\x_{i+1}&\equiv x^2_{i+1}\pmod{n}\end{cases}$
- At each iteration, choose the least significant bit of $x_i$.
Proposition
Let $n=p\cdot q$ with $p,q$ follow BBS Generator requirements.
Let $x\equiv \pm a,\pm b\pmod n$ be the four solutions to $x^2\equiv y\pmod n$.
Then $\gcd(a-b,n)$ is a non-trivial factor of $n$.
Building Block Cipher
A random oracle is a “black box” that returns a truly uniform random output on an input.
Submitting same input leads to same output.
Pseudorandom function emulates a random oracle.
A pseudorandom function that cannot be distinguished from a random permutation is pseudo random permutation. A blockcipher is a pseudorandom permutation.
Feistel Network - DES
This is just one node of Feistel network.
$$
\begin{CD}
L_0 @. R_0\newline
@V VV @V VV\newline
\oplus@<F_K<< R_0\newline
@V VV @V VV\newline
R_1 @.L_1
\end{CD}
$$
- The size of a block: $2n$ bits
- Split the block into 2 blocks of $n$ bits each
- $F:\lbrace 0,1\rbrace^n\times\lbrace 0,1\rbrace^k\to\lbrace 0, 1\rbrace^n$
Then we define function $\begin{aligned}\Psi_F: \lbrace 0,1\rbrace^{2n}&\to\lbrace 0,1\rbrace^{2n}\newline \lbrack L, R\rbrack&\mapsto\lbrack R, L\oplus F(R,K)\rbrack\end{aligned}$
Inverse Function
$\forall F$, $\Psi_F$ is a bijection and $\Psi_F^{-1}=\sigma\circ\Psi_F\circ\sigma$, with $\begin{aligned}\sigma:\lbrace 0,1\rbrace^{2n}&\to\lbrace 0,1\rbrace^{2n}\newline\lbrack L,R\rbrack&\mapsto\lbrack R,L\rbrack\end{aligned}$
This can be shown by definition that $\Psi_F\lbrack L_0,R_0\rbrack = \lbrack R_0,L_0\oplus F(R_0,K)\rbrack=\lbrack L_1,R_1\rbrack$.
Thus $\begin{aligned} \sigma\circ\Psi_F\circ\sigma \lbrack L_1,R_1\rbrack &=\sigma\circ \Psi_F\lbrack R_1,L_1\rbrack\newline &= \sigma\circ\Psi_F\lbrack L_0\oplus F(R_0,K),R_0\rbrack\newline &=\sigma\lbrack R_0, L_0\oplus F(R_0,K)\oplus F(R_0,K)\rbrack\newline &=\lbrack R_0, L_0\rbrack \end{aligned}$
Attack
Setting up 2 black boxes, a random oracle and a Feistel network, the goal for an attack is to distinguish them.
$$
\begin{array}{c|rrr}
\text{Rounds} & \text{KPA} & \text{CPA} & \text{CPCA} \newline
\hline
1 & 1 & 1 & 1 \newline
2 & O(\sqrt{2^n}) & 2 & 2 \newline
3 & O(\sqrt{2^n}) & O(\sqrt{2^n}) & 3\newline
4 & O(2^n) & O(\sqrt{2^n}) & O(\sqrt{2^n})
\end{array}
$$
Two rounds - CPA
For simplify, we donate $\Psi_{F_{K_2}}\circ\Psi_{F_{K_1}}$ by $\Psi_{F_{K_1},F_{K_2}}^2$. $\Psi_{F_{K_1},F_{K_2}}^2\lbrack L_0, R_0\rbrack = \lbrack L_2, R_2\rbrack$ with $\begin{cases} L_2 &=L_0\oplus F_{K_1}(R_0)\newline R_2&= R_0\oplus F_{K_2}(L_2)\end{cases}$ ($L_2 = R_1$ which can be seen in previous part).
Thus the inverse of $\Psi_{F_{K_1},F_{K_2}}^2$ is $\Psi_{F_{K_1},F_{K_2}}^{-2} = \Psi_{F_{K_1}}^{-1}\circ\Psi_{F_{K_2}}^{-1} = \sigma\circ\Psi_{F_{K_2},F_{K_1}}^2\circ\sigma$.
If we use $m_1 = \lbrack m_{1_L}, m_{1_R}\rbrack$ and $m_2=\lbrack m_{2_L},m_{2_R}\rbrack$ such that $\begin{cases} m_{1_L}\neq m_{2_L}\newline m_{1_R}=m_{2_R}\end{cases}$, we can see $\begin{cases}m_1 &\Rightarrow \begin{cases} R_2 &= m_{1_R}\oplus F_{K_2}(L_2)\newline L_2 &=m_{1_L}\oplus F_{K_1}(m_{1_R})\end{cases}\newline m_2 &\Rightarrow \begin{cases}R_2 &= m_{2_R}\oplus F_{K_2}(L_2)\newline L_2 &=m_{2_L}\oplus F_{K_1}(m_{2_R})\end{cases}\end{cases}$.
It is easy to see $\begin{cases}m_{1_{R_2}}\oplus m_{2_{R_2}} &=m_{1_R}\oplus m_{2_R}\newline m_{1_{L_2}}\oplus m_{2_{L_2}} &=m_{1_L}\oplus m_{2_L}\end{cases}$, which only requires 2 test for 2 round Feistel network.
Two rounds - KPA
Find a collision over $m_{i_R}$, where $1 \le i \le 2^n$. By birthday paradox, this requires $O(\sqrt{2^n})$ message.
If a collision is found for $m_j$ and $m_i$, check if $m_{j_{L_2}}\oplus m_{l_{L_2}}=m_{j_{L_0}}\oplus m_{l_{L_0}}$.
The collision on $m_{i_{L_2}}=m_{i_{L_0}}\oplus F_{K_1}(m_{i_{R_0}})$ for 2 messages, just like what is mention in previous 2-round CPA part.
Fix $m_{i_{L_2}}$, $m_{i_{L_0}}$ and $m_{i_{R_0}}$, then the uncertain outcome is $m_{j_{L_2}}$. Since it depends on $F_{K_1}$, which maps variables to $2^n$ different values.
If we take $l$ time same message with probably different $K$, then $\dfrac{l(l-1)}{2}$ pairs can be constructed and the possibility of collision is $\dfrac{l(l-1)}{2\cdot 2^n}$.
Three rounds - CPCA
$\Psi^2_{F_{K_1},F_{K_2},F_{K_3}} \lbrack L_0, R_0\rbrack=\lbrack L_3,R_3\rbrack$ with $\begin{cases} L_3 &=R_0\oplus F_{K_2}(L_2)\newline R_3&=L_2\oplus F_{K_3}(L_3)\end{cases}$ and $L_2=L_0\oplus F_{K_1}(R_0)$.
Notice for a pair of messages $(m_a, m_b)$, $\begin{cases}m_{a_{R_0}} = m_{b_{R_0}} &\Rightarrow m_{a_{L_2}}\oplus m_{b_{L_2}} = m_{a_{L_0}}\oplus m_{b_{L_0}}\newline m_{a_{L_2}} = m_{b_{L_2}} &\Rightarrow m_{a_{L_3}}\oplus m_{b_{L_3}} = m_{a_{R_0}}\oplus m_{b_{R_0}}\newline m_{a_{L_3}} = m_{b_{L_3}} &\Rightarrow m_{a_{R_3}}\oplus m_{b_{R_3}} = m_{a_{L_2}}\oplus m_{b_{L_2}}\newline\end{cases}$ can be used to verify.
The attack strategy is constructed then by taking $m_1$, $m_2$, $m_3$ satisfying $\begin{cases} m_{2_{R_0}} &=m_{1_{R_0}}\newline m_{3_{L_3}} &=m_{2_{L_3}}\newline m_{3_{L_2}} &=m_{1_{L_2}} \end{cases}$ where a graph can be formed like
graph LR subgraph attack A((m1)) B((m2)) C((m3)) A ---|R0| B B ---|L3| C A ---|L2| C end
From the previous equation sets we get $\begin{cases} m_{2_{R_0}} &=m_{1_{R_0}}\newline m_{3_{L_3}} &=m_{2_{L_3}}\newline m_{3_{R_3}} &=m_{2_{R_3}}\oplus m_{1_{L_0}} \oplus m_{2_{L_0}} \end{cases}$ ($m_{1_{L_2}}\oplus m_{2_{L_2}} = m_{1_{L_0}}\oplus m_{2_{L_0}} = m_{1_{R_3}}\oplus m_{2_{R_3}}$)
Finally, $m_{3_{R_0}} = m_{1_{L_3}} \oplus m_{3_{L_3}} \oplus m_{1_{R_0}}$.
AES - Encryption
graph TD A(Plaintext) --> B(Add Round Key) style A fill:#87afff B --> C subgraph Rounds 1 to 9 C(Sub Bytes) --> D(Shift Rows) D --> E(Mix Columns) E --> F(Add Round Key) F -->|1 to 9| C subgraph Round 10 C --> H(Shift Rows) H --> F end end F --> G(Ciphertext) style G fill:#ffd700
There are 128 bits, grouped into 16 bytes, and arranged into a $4\times 4$ matrix: $\begin{bmatrix} a_{0,0} & a_{0,1} & a_{0,2} & a_{0,3}\newline a_{1,0} & a_{1,1} & a_{1,2} & a_{1,3}\newline a_{2,0} & a_{2,1} & a_{2,2} & a_{2,3} \newline a_{3,0} & a_{3,1} & a_{3,2} & a_{3,3}\end{bmatrix}$. (Plaintext is arranged in order $a_{0,0}, a_{1,0},a_{2,0},a_{3,0},a_{0,1}\dots$)
Finite Field
Loosely speaking, a set where addition and multiplication operations are defined and such that non-zero element is invertible for multiplication is called a field.
For each prime $p$ and positive integer $n$ there exists a finite field with $p^n$ elements, donated as $\mathbb{F}_{p^n}$.
Polynomials can also be defined over finite fields. The main difference relies on the coefficients: their values are taken in the base field.
A polynomial, in a field, cannot be written as the product of two polynomials of lower degree is said to be irreducible.
So long it has some root, then it can not be irreducible.
$\mathbb{F}_2\lbrack X\rbrack$, $X^2+3X + 1 = X^2 + X + 1$.
$\mathbb{F}_5\lbrack X\rbrack$, $X^3 + X + 3 = (X + 4)(X ^ 2 + X + 2)$ is not irreducible.
$\mathbb{F}_{17}\lbrack X\rbrack$, $X^3 + X + 3$ is irreducible.
Theorem on Non-Prime Fields
We can construct a non-prime field from prime field.
Let $P(X)$ be an irreducible polynomial of degree $n$ in $\mathbb{F}_p\lbrack X \rbrack$, and $F$ be the set of all polynomial of degree less than $n$. Then $F$ is a finite field with $p^n$ elements.
Proof: $F$ has $p^n$ elements since $n$ monomials and $p$ different values taken.
Assume $A(X),B(X),C(X)$ be distinct non-zero polynomials such that $A(X)B(X)\equiv A(X)C(X)\pmod{P(X)}$, this implies $A(X)(B(X) - C(X))\equiv 0\pmod{P(X)}$.
Contradicting to $P(X)$ irreducible.
Hence, it applies for all polynomial $A(X)$ in $F$ such that there exists $B(X)$ satisfying $A(X)B(X)\equiv 1\pmod{P(X)}$.
We donate these non-prime fields as $\mathbb{F}_{p^n}\lbrack X\rbrack = \mathbb{F}_p\lbrack X\rbrack / \langle F(X)\rangle$.
Finite Fields in AES
Finite fields in AES is used like:
- $P(X) = X^8+X^4+X^3+X+1$ is irreducible over $\mathbb{F}_2\lbrack X\rbrack$.
- The polynomial is described as a byte $a_7 a_6 a_5 a_4 a_3 a_2 a_1 a_0$.
- The sum of 2 polynomials is $b_0 \oplus b_1 = \prod\limits^7_{i=1} (a_{0i}\oplus a_{1i})$.
- Multiplying a polynomial $Q(X)$ by $X$:
- Shift left the byte representation of $Q(X)$ and append a $0$.
- If the first bit is $0$, then stop. Otherwise XOR with $P(X)$. (since $Q(X)$ left shift by 1 equals to $P(X) + Q’(X)$)
- Multiplying $Q(X)$ by $R(X)$:
- Split $R(X)$ into monomials $M_i(X), i\le\deg R(X)$.
- For $M_i(X)$ applying multiplication by $X\deg M_i(X)$ times.
- Add all results using XOR.
S-Box SubBytes Layer
S-Box can be generated by:
Compute $b = a^{-1}$ on $\mathbb{F}_{2^8}$ or set $b=0$ if $a=0$.
Represent $b$ as a column vector $B = (b_0,\dots,b_7)$.
Compute
$$
\begin{pmatrix}
1 & 0 & 0 & 0 & 1 & 1 & 1 & 1\newline
1 & 1 & 0 & 0 & 0 & 1 & 1 & 1\newline
1 & 1 & 1 & 0 & 0 & 0 & 1 & 1\newline
1 & 1 & 1 & 1 & 0 & 0 & 0 & 1\newline
1 & 1 & 1 & 1 & 1 & 0 & 0 & 0\newline
0 & 1 & 1 & 1 & 1 & 1 & 0 & 0\newline
0 & 0 & 1 & 1 & 1 & 1 & 1 & 0\newline
0 & 0 & 0 & 1 & 1 & 1 & 1 & 1
\end{pmatrix} \cdot
\begin{pmatrix}
b_0 \newline b_1 \newline b_2\newline b_3 \newline b_4 \newline b_5 \newline b_6 \newline b_7 \newline
\end{pmatrix}
+
\begin{pmatrix}
1 \newline 1 \newline 0 \newline 0 \newline 0\newline 1 \newline 1 \newline 0
\end{pmatrix}
\begin{pmatrix}
c_0 \newline c_1 \newline c_2\newline c_3 \newline c_4 \newline c_5 \newline c_6 \newline c_7 \newline
\end{pmatrix}
$$
ShiftRows Layer
Cyclically shift to left row $i$ by offset $0 \le i \le 3$.
Mix Columns Layer
Let the original matrix be $A$, then the output is $C(X)\cdot A$ where $C(X) =\begin{pmatrix} 2 & 3 & 1 & 1\newline 1& 2 & 3 & 1\newline 1 & 1 & 2 & 3\newline 3 & 1 & 1 & 2\end{pmatrix}$.
The inverse $C(X)^{-1} = \begin{pmatrix} 14& 11& 13& 9 \newline 9& 14& 11& 13 \newline13& 9&14& 11 \newline 11& 13& 9 & 14\end{pmatrix}$.
Add Round Key Layer
The roundkey is generated by a $4\times4$ matrix $K(X)$.
Label the first four columns $K(0),\dots,K(3)$ and add $40$ more:
- $K(i) = K(i-4)\oplus K(i-1)$ for $i\not\equiv 0\pmod 4$
- $K(i) = K(i-4)\oplus T(K(i-1))$ for $i\equiv 0\pmod 4$
The transformation $T(K(i-1))$ is defined over column $i$:
- Compute $r(i) = 00000010^{\frac{i-4}{4}}$
- Cyclically top shift elements of column by 1: $(a,b,c,d)^{T}\to(b,c,d,a)^{T}$
- Apply S-box to each byte of the column
- Finally the column vector $T(K(i-1))=(s(b)\oplus r(i),s(c),s(d),s(a))^{T}$