Two uses for codes in cryptography:
Decryption: In \(U(p)\), Bob uses the secret \(a\) to compute \[ tr^{-a} = \beta^km(\alpha^k)^{-a} = (\alpha^a)^km\alpha^{-ak} = m \]
Exercise: For the linear code generated by the following matrix,
\[ G = \begin{bmatrix} 1&0&0&1&1 \\ 0&1&1&1&0 \end{bmatrix} \]
Brute force or syndrome decoding is hard (NP-hard).
Goal: Find codes with additional structure so that decoding is easy. Use these for one-way functions.
\[ G = \begin{bmatrix} 1&0&0&1&1 \\ 0&1&1&1&0 \end{bmatrix} \]
So \(t = 1\), \(n=5\), \(k=2\).
$M
[,1] [,2]
[1,] 1 1
[2,] 1 0
$Minv
[,1] [,2]
[1,] 0 1
[2,] 1 1
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 1 0 0
[2,] 0 0 0 0 1
[3,] 1 0 0 0 0
[4,] 0 0 0 1 0
[5,] 0 1 0 0 0
Exercise: Compute the matrix \(G_1\) that Bob publishes.
Alice wants to send \(x= \begin{bmatrix} 1 & 1 \end{bmatrix}\). She picks a random error vector \(e\):
[1] 0 0 1 0 0
and sends \(y = xG_1 + e\).
Exercise: Compute the vector \(y\) that Alice sends.
Compute \(y_1\). (Hint: The inverse of a permutation matrix is its transpose.)
Check that this works.
To suffice as a one-way function, the number of code words needs to be large (e.g., \(n \approx 1024\) gives about \(1.8 \times 10^{308}\) bit strings.)
Codes this large can’t be decoded using syndrome decoding.
Parameters: Given \(m\) and \(t\), there is a binary Goppa code with \(n = 2^m\), \(k = n-mt\), and distance \(2t+1\).
To construct a Goppa code, you need:
Decoding is fast, if you know this polynomial and these chosen elements. (Patterson)
Example: There are several \([1024, 524]\) Goppa codes that can correct 50 errors.
Source: A Summary of McEliece-Type Cryptosystems and their Security, by D. Engelbert, R. Overbeck and A. Schmidt.
Advantages of McEliece:
Disadvantages: