aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--buch/papers/mceliece/example_code/mceliece_simple.py14
-rw-r--r--buch/papers/mceliece/funktionsweise.tex6
2 files changed, 9 insertions, 11 deletions
diff --git a/buch/papers/mceliece/example_code/mceliece_simple.py b/buch/papers/mceliece/example_code/mceliece_simple.py
index bac3b42..c8d5e9d 100644
--- a/buch/papers/mceliece/example_code/mceliece_simple.py
+++ b/buch/papers/mceliece/example_code/mceliece_simple.py
@@ -187,14 +187,10 @@ def decode_linear_code(c, g, syndrome_table):
q, r=divmod(Poly(c), g)
q=np.r_[q.coef%2, np.zeros(len(c)-len(q)-len(g)+1)]
r=np.r_[r.coef%2, np.zeros(len(g)-len(r))]
- syndrome_index=np.sum([int(a*2**i) for i, a in enumerate(r)])
- while syndrome_index > 0:
- c=c ^ syndrome_table[syndrome_index]
- q, r=divmod(Poly(c), g)
- q=np.r_[q.coef%2, np.zeros(len(c)-len(q)-len(g)+1)]
- r=np.r_[r.coef%2, np.zeros(len(g)-len(r))]
- syndrome_index=np.sum([int(a*2**i) for i, a in enumerate(r)])
- return np.array(q, dtype=int)
+ syndrome_index=np.sum([int(a*2**i) for i, a in enumerate(r)]) #binary to decimal
+ q_corr, r_corr=divmod(Poly(syndrome_table[syndrome_index]), g)
+ q_corr=np.r_[q_corr.coef%2, np.zeros(len(c)-len(q_corr)-len(g)+1)]
+ return q.astype(int) ^ q_corr.astype(int)
def encode_linear_code(d, G):
'''
@@ -324,4 +320,4 @@ if __name__ == '__main__':
print(f'msg_rx: {msg_rx}')
- \ No newline at end of file
+
diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex
index b4f00f0..5aceb24 100644
--- a/buch/papers/mceliece/funktionsweise.tex
+++ b/buch/papers/mceliece/funktionsweise.tex
@@ -71,10 +71,12 @@ hängt vom verwendeten Linearcode ab:
Zum Schluss wird das inzwischen fast entschlüsselte Codewort $c'_k$ mit der inversen der zufälligen Binärmatrix $S^{-1}$ multipliziert,
womit der Inhalt der ursprünglichen Nachricht nun wiederhergestellt wurde:
\begin{align*}
- c_{k}'\,&=S_{k}\cdot d_k \quad | \cdot S_k^{-1}\\
d'_{k}\,=\,S_{k}^{-1} \cdot c'_k&=S_{k}^{-1} \cdot S_{k}\cdot d_k\\
&=d_k\,.
\end{align*}
+Möchte ein Angreifer die verschlüsselte Nachricht knacken, muss dieser die drei privaten Matrizen $S_k$, $G_{n,k}$ und $P_n$ kennen.
+Aus dem Öffentlichen Schlüssel lassen sich diese nicht rekonstruieren
+und eine systematische Analyse der Codeworte wird durch das Hinzufügen von zufälligen Bitfehlern zusätzlich erschwert.
\subsection{Beispiel}
Die Verschlüsselung soll mittels einem numerischen Beispiel demonstriert werden.
@@ -303,7 +305,7 @@ Die Verschlüsselung soll mittels einem numerischen Beispiel demonstriert werden
\end{pmatrix}
\end{align*}
\end{itemize}
- \item Entschlüsselung (Umkehrung des $S_k$-Matrix-Effekts):
+ \item Entschlüsselung (Umkehrung des $S_4$-Matrix-Effekts):
\begin{itemize}
\item[]
\begin{align*}