% Device Drivers (15)
% since 6.13.8

%18
\section{Cryptographic API \texorpdfstring{$\longrightarrow$}{->}}
\textit{(Kryptografische API)}\\*
CONFIG\_CRYPTO [=y] \textbf{[Y]}\\
Diese Option stellt die zentrale kryptografische API bereit.
\english{This option provides the core Cryptographic API.}

%18.1
\subsection{Crypto core or helper \texorpdfstring{$\longrightarrow$}{->}}
\textit{Krypto-Kern oder Hilfsmittel}

%18.1.1
\subsubsection{Cryptographic algorithm manager}
CONFIG\_CRYPTO\_MANAGER [=y] \textbf{[Y]}\\
Erstellen Sie Standardinstanziierungen von kryptografischen Vorlagen wie cbc(aes).
\english{Create default cryptographic template instantiations such as cbc(aes).}

\subsubsection{Userspace cryptographic algorithm configuration}
CONFIG\_CRYPTO\_USER [=m] \textbf{[M]}\\
Userspace-Konfiguration für kryptographische Instanziierungen wie cbc(aes).
\english{Userspace configuration for cryptographic instantiations such as cbc(aes).}

\subsubsection{Disable run-time self tests}
CONFIG\_CRYPTO\_MANAGER\_DISABLE\_TESTS [=y] \textbf{[Y]}\\
Deaktivieren Sie Laufzeit-Selbsttests, die normalerweise bei der Algorithmusregistrierung stattfinden.
\english{Disable run-time self tests that normally take place at algorithm registration.}

\subsubsection{Null algorithms}
CONFIG\_CRYPTO\_NULL [=m] \textbf{[M]}\\
Dies sind \glqq Null\grqq{}-Algorithmen, die von IPsec verwendet werden und nichts bewirken.
\english{These are `Null' algorithms, used by IPsec, which do nothing.}

\subsubsection{Parallel crypto engine}
CONFIG\_CRYPTO\_PCRYPT [=m] \textbf{[M]}\\
Damit wird ein beliebiger Kryptoalgorithmus in einen parallelen Algorithmus umgewandelt, der in Kernel-Threads ausgeführt wird.
\english{This converts an arbitrary crypto algorithm into a parallel algorithm that executes in kernel threads.}

\subsubsection{Software async crypto daemon}
CONFIG\_CRYPTO\_CRYPTD [=m] \textbf{[M]}\\
Dies ist ein generischer asynchroner Software-Krypto-Daemon, der einen beliebigen synchronen Software-Krypto-Algorithmus in einen
asynchronen Algorithmus umwandelt, der in einem Kernel-Thread ausgeführt wird.
\english{This is a generic software asynchronous crypto daemon that converts an arbitrary synchronous software crypto algorithm
into an asynchronous algorithm that executes in a kernel thread.}

\subsubsection{Authenc support}
CONFIG\_CRYPTO\_AUTHENC [=m] \textbf{[M]}\\
Authenc: Kombinierter Modus-Wrapper für IPsec.\\
Dies ist für IPSec ESP (XFRM\_ESP) erforderlich.
\english{Authenc: Combined mode wrapper for IPsec.\\
This is required for IPSec ESP (XFRM\_ESP).}

\subsubsection{Testing module}
CONFIG\_CRYPTO\_TEST [=m] \textbf{[M]}\\
Schnelles und schmutziges Krypto-Testmodul.
\english{Quick \& dirty crypto test module.}

%18.2
\subsection{Public-key cryptography \texorpdfstring{$\longrightarrow$}{->}}
\textit{Kryptographie mit öffentlichem Schlüssel}

\subsubsection{RSA (Rivest-Shamir-Adleman)}
CONFIG\_CRYPTO\_RSA [=y] \textbf{[Y]}\\
RSA (Rivest-Shamir-Adleman) Algorithmus für öffentliche Schlüssel (RFC8017)
\english{RSA (Rivest-Shamir-Adleman) public key algorithm (RFC8017)}

\subsubsection{DH (Diffie-Hellman)}
CONFIG\_CRYPTO\_DH [=y] \textbf{[Y]}\\
DH (Diffie-Hellman)-Schlüsselaustauschalgorithmus
\english{DH (Diffie-Hellman) key exchange algorithm}

\paragraph{RFC~7919 FFDHE groups}\mbox{}\\
CONFIG\_CRYPTO\_DH\_RFC7919\_GROUPS [=y] \textbf{[Y]}\\
FFDHE (Finite-Field-based Diffie-Hellman Ephemeral) Gruppen, definiert in RFC7919.\\
Unterstützung dieser Finite-Field-Gruppen im DH-Schlüsselaustausch:\\
-- \texttt{ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192}\\
Wenn Sie unsicher sind, sagen Sie N.
\english{FFDHE (Finite-Field-based Diffie-Hellman Ephemeral) groups defined in RFC7919.\\
Support these finite-field groups in DH key exchanges:\\
-- ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192\\
If unsure, say N.}

\subsubsection{ECDH (Elliptic Curve Diffie-Hellman)}
CONFIG\_CRYPTO\_ECDH [=y] \textbf{[Y]}\\
ECDH (Elliptic Curve Diffie-Hellman)-Schlüsselaustauschalgorithmus unter Verwendung der Kurven \texttt{P-192},
\texttt{P-256} und \texttt{P-384 (FIPS 186)}
\english{ECDH (Elliptic Curve Diffie-Hellman) key exchange algorithm using curves P-192, P-256, and P-384 (FIPS 186)}

\subsubsection{ECDSA (Elliptic Curve Digital Signature Algorithm)}
CONFIG\_CRYPTO\_ECDSA [=y] \textbf{[Y]}\\
ECDSA (Elliptic Curve Digital Signature Algorithm) (\texttt{FIPS 186}, \texttt{ISO/IEC 14888-3}) unter Verwendung der Kurven
\texttt{P-192}, \texttt{P-256}, \texttt{P-384} und \texttt{P-521}\\
Es ist nur eine Signaturprüfung implementiert.
\english{ECDSA (Elliptic Curve Digital Signature Algorithm) (FIPS 186, ISO/IEC 14888-3) using curves P-192, P-256, P-384 and P-521\\
Only signature verification is implemented.}

\subsubsection{EC-RDSA (Elliptic Curve Russian Digital Signature Algorithm)}
CONFIG\_CRYPTO\_ECRDSA [=m] \textbf{[M]}\\
Russischer digitaler Signaturalgorithmus mit elliptischer Kurve (\texttt{GOST R 34.10-2012}, \texttt{RFC 7091},
\texttt{ISO/IEC 14888-3})\\
Einer der russischen kryptografischen Standardalgorithmen (GOST-Algorithmen genannt). Es ist nur eine Signaturprüfung implementiert.
\english{Elliptic Curve Russian Digital Signature Algorithm (GOST R 34.10-2012, RFC 7091, ISO/IEC 14888-3)\\
One of the Russian cryptographic standard algorithms (called GOST algorithms). Only signature verification is implemented.}

\subsubsection{Curve25519}
CONFIG\_CRYPTO\_CURVE25519 [=m] \textbf{[M]}\\
Elliptische Kurve 25519 (RFC7748)
\english{Curve25519 elliptic curve (RFC7748)}

%18.3
\subsection{Block ciphers \texorpdfstring{$\longrightarrow$}{->}}
\textit{Blockchiffren}

\subsubsection{AES (Advanced Encryption Standard)}
CONFIG\_CRYPTO\_AES [=y] \textbf{[Y]}\\
AES-Verschlüsselungsalgorithmen (Rijndael) (\texttt{FIPS-197}, \texttt{ISO/IEC 18033-3})\\
Rijndael scheint sowohl in der Hardware als auch in der Software in einem breiten Spektrum von Computerumgebungen
durchweg sehr gut zu funktionieren, unabhängig davon, ob er im Feedback- oder im Nicht-Feedback-Modus verwendet wird.
Die Einrichtungszeit für Schlüssel ist ausgezeichnet, und seine Schlüsselagilität ist gut.
Aufgrund seines sehr geringen Speicherbedarfs eignet sich Rijndael sehr gut für Umgebungen mit eingeschränktem Speicherplatz,
in denen es ebenfalls eine hervorragende Leistung zeigt.
Die Operationen von Rijndael gehören zu den am einfachsten zu verteidigenden gegen Energie- und Timing-Angriffe.\\
Der AES sieht drei Schlüsselgrößen vor: \qtylist[list-units=single]{128;192;256}{\bit}.
\english{AES cipher algorithms (Rijndael)(FIPS-197, ISO/IEC 18033-3)\\
Rijndael appears to be consistently a very good performer in both hardware and software across a wide range of computing
environments regardless of its use in feedback or non-feedback modes.
Its key setup time is excellent, and its key agility is good.
Rijndael's very low memory requirements make it very well suited for restricted-space environments, in which it also
demonstrates excellent performance.
Rijndael's operations are among the easiest to defend against power and timing attacks.\\
The AES specifies three key sizes: 128, 192 and 256 bits}

\subsubsection{AES (Advanced Encryption Standard) (fixed time)}
CONFIG\_CRYPTO\_AES\_TI [=m] \textbf{[M]}\\
AES-Verschlüsselungsalgorithmen (Rijndael) (\texttt{FIPS-197}, \texttt{ISO/IEC 18033-3})\\
Dies ist eine generische Implementierung von AES, die versucht, datenabhängige Latenzen so weit wie möglich zu eliminieren,
ohne die Leistung zu stark zu beeinträchtigen.
Sie ist für die Verwendung durch die generischen CCM- und GCM-Treiber und andere CTR- oder CMAC/XCBC-basierte Modi vorgesehen,
die sich ausschließlich auf die Verschlüsselung stützen (obwohl auch die Entschlüsselung unterstützt wird,
allerdings mit einem drastischeren Leistungseinbruch).
Anstelle von 16~Nachschlagetabellen mit je \qty{1}{\kilo\byte} (8 für die Verschlüsselung und 8 für die Entschlüsselung) verwendet diese
Implementierung nur zwei S-Boxen mit je \qty{256}{\byte} und versucht, datenabhängige Latenzen zu eliminieren,
indem die gesamte Tabelle zu Beginn eines jeden Blocks in den Cache vorgeladen wird.
Unterbrechungen sind ebenfalls deaktiviert, um Wettläufe zu vermeiden, bei denen Cache-Zeilen verdrängt werden,
wenn die CPU unterbrochen wird, um etwas anderes zu tun.
\english{AES cipher algorithms (Rijndael)(FIPS-197, ISO/IEC 18033-3)\\
This is a generic implementation of AES that attempts to eliminate data dependent latencies as much as possible
without affecting performance too much.
It is intended for use by the generic CCM and GCM drivers, and other CTR or CMAC/XCBC based modes that rely solely on encryption
(although decryption is supported as well, but with a more dramatic performance hit)\\
Instead of using 16 lookup tables of 1 KB each, (8 for encryption and 8 for decryption), this implementation only uses
just two S-boxes of 256 bytes each, and attempts to eliminate data dependent latencies by prefetching the entire table
into the cache at the start of each block.
Interrupts are also disabled to avoid races where cachelines are evicted when the CPU is interrupted to do something else.}

\subsubsection{ARIA}
CONFIG\_CRYPTO\_ARIA [=m] \textbf{[M]}\\
ARIA-Verschlüsselungsalgorithmus (RFC5794)\\
ARIA ist ein Standard-Verschlüsselungsalgorithmus der Republik Korea.\\
Der ARIA spezifiziert drei Schlüsselgrößen und Runden.\\
128-Bit: 12 Runden.\\
192-Bit: 14 Runden.\\
256-Bit: 16 Runden.\\
Siehe: \url{https://seed.kisa.or.kr/kisa/algorithm/EgovAriaInfo.do}
\english{ARIA cipher algorithm (RFC5794)\\
ARIA is a standard encryption algorithm of the Republic of Korea.\\
The ARIA specifies three key sizes and rounds.\\
128-bit: 12 rounds.\\
192-bit: 14 rounds.\\
256-bit: 16 rounds.\\
See: \url{https://seed.kisa.or.kr/kisa/algorithm/EgovAriaInfo.do}}

\subsubsection{Blowfish}
CONFIG\_CRYPTO\_BLOWFISH [=m] \textbf{[M]}\\
Blowfish-Chiffrieralgorithmus, von Bruce Schneier\\
Es handelt sich um eine Chiffre mit variabler Schlüssellänge, die Schlüssel mit einer Länge von
\qtyrange[range-units=single]{32}{448}{\bit} verwenden kann.
Er ist schnell, einfach und speziell für den Einsatz auf \glqq großen Mikroprozessoren\grqq{} konzipiert.\\
Weitere Informationen finden Sie unter \url{https://www.schneier.com/blowfish.html}.
\english{Blowfish cipher algorithm, by Bruce Schneier\\
This is a variable key length cipher which can use keys from 32 bits to 448 bits in length.
It's fast, simple and specifically designed for use on ``large microprocessors''.\\
See \url{https://www.schneier.com/blowfish.html} for further information.}

\subsubsection{Camellia}
CONFIG\_CRYPTO\_CAMELLIA [=m] \textbf{[M]}\\
Camellia-Verschlüsselungsalgorithmen (ISO/IEC 18033-3)\\
Camellia ist eine Blockchiffre mit symmetrischem Schlüssel, die gemeinsam von NTT und Mitsubishi Electric Corporation entwickelt wurde.
Camellia spezifiziert drei Schlüsselgrößen: \qtylist[list-units=single]{128;192;256}{\bit}.\\
Weitere Informationen finden Sie unter \url{https://info.isl.ntt.co.jp/crypt/eng/camellia/}.
\english{Camellia cipher algorithms (ISO/IEC 18033-3)\\
Camellia is a symmetric key block cipher developed jointly at NTT and Mitsubishi Electric Corporation.\\
The Camellia specifies three key sizes: 128, 192 and 256 bits.\\
See \url{https://info.isl.ntt.co.jp/crypt/eng/camellia/} for further information.}

