„Salsa20“ – Versionsunterschied

[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
MerlBot (Diskussion | Beiträge)
InternetArchiveBot hat 1 Archivlink(s) ergänzt und 0 Link(s) als defekt/tot markiert.) #IABot (v2.0.9.5
 
(31 dazwischenliegende Versionen von 23 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Salsa20''' (auch ''Snuffle 2005'') ist eine [[Stromverschlüsselung]], die 2005 von [[Daniel J. Bernstein]] entwickelt wurde. Im europäischen Projekt [[eSTREAM]] ist die auf 12 Runden reduzierte Version Salsa20/12 einer der Finalisten (Profil 1 Software-Anwendungen).<ref>{{Webarchiv|url=http://www.ecrypt.eu.org/stream/portfolio.pdf |wayback=20120813112048 |text=The eSTREAM Portfolio |archiv-bot=2024-05-02 22:19:19 InternetArchiveBot }} (PDF, 118&nbsp;kB).</ref> Salsa20 ist frei von Patenten.
{{QS-Antrag|10. November 2013| [[WP:Wikifizieren]]: [[Wikipedia:Kategorien|Kategorien]] fehlen, [[Wikipedia:WikiProjekt Verwaiste Seiten|verwaist]] -- [[Benutzer:MerlBot/AutoQS|MerlBot]] 03:02, 10. Nov. 2013 (CET)}}
{{SEITENTITEL:Salsa20}}
'''Salsa20''' (auch Snuffle 2005) ist eine [[Stromverschlüsselung]], die 2005 von [[Daniel J. Bernstein]] entwickelt wurde. Im europäischen Projekt [[eSTREAM]] ist die auf 12 Runden reduzierte Version Salsa20/12 einer der Finalisten (Profil 1 - Software-Anwendungen)<ref>[http://www.ecrypt.eu.org/stream/portfolio.pdf The eSTREAM Portfolio (pdf)]</ref>. Salsa20 ist frei von Patenten.


== Entstehung ==
== Entstehung ==
Daniel J. Bernstein entwickelte Shuffle 2005 als Antwort auf die früheren Versuche der USA, [[Kryptographie|kryptographische]] Publikationen zu beschränken. Von den Beschränkungen waren [[Hashfunktion]]en ausgenommen; mit Shuffle 2005 wurde gezeigt, dass eine starke [[Verschlüsselung]] auch mittels Hashfunktionen vorgenommen werden kann. <ref>D. J. Bernstein: [http://cr.yp.to/snuffle/design.pdf Snuffle 2005: the Salsa20 encryption function (pdf)]</ref>
Daniel J. Bernstein entwickelte Snuffle 2005 als Antwort auf die früheren Versuche der USA, [[Kryptographie|kryptographische]] Publikationen zu beschränken. Von den Beschränkungen waren [[Hashfunktion]]en ausgenommen; mit Snuffle 2005 wurde gezeigt, dass eine starke [[Verschlüsselung]] auch mittels Hashfunktionen vorgenommen werden kann.<ref>D. J. Bernstein: [http://cr.yp.to/snuffle/design.pdf Snuffle 2005: the Salsa20 encryption function] (PDF, 98&nbsp;kB).</ref>


== Varianten ==
== Varianten ==
''Salsa20 Core'' ist der Kern verschiedener Hashfunktionen und Stromverschlüsselungen.
''Salsa20 Core'' ist der Kern verschiedener Hashfunktionen und Stromverschlüsselungen.
* Salsa20 oder Snuffle 2005 ist eine Familie von 256-Bit-Stromverschlüsselungen<ref>D. J. Bernstein: [http://cr.yp.to/snuffle/salsafamily-20071225.pdf The Salsa20 family of stream ciphers].</ref>:
* Salsa20 oder Snuffle 2005 ist eine Familie von 256-Bit-Stromverschlüsselungen:<ref>D. J. Bernstein: [http://cr.yp.to/snuffle/salsafamily-20071225.pdf The Salsa20 family of stream ciphers] (PDF, 176&nbsp;kB).</ref>
** Salsa20/20 mit 20 Runden ist als Standard gedacht.
** Salsa20/20 mit 20 Runden ist als Standard gedacht.
** Salsa20/12 mit 12 Runden für zeitkritische Anwendungen war Finalist im [[eSTREAM]]-Projekt, einem europäischen Auswahlverfahren für [[Stromverschlüsselung]]en.
** Salsa20/12 mit 12 Runden für zeitkritische Anwendungen war Finalist im [[eSTREAM]]-Projekt, einem europäischen Auswahlverfahren für Stromverschlüsselungen.
** Salsa20/8 mit 8 Runden für zeitkritische Anwendungen wird in der Schlüsselableitungsfunktion [[scrypt]] benutzt<ref>Colin Percival: [http://www.tarsnap.com/scrypt/scrypt.pdf Stronger Key Derivation via Sequential Memory-Hard Functions (pdf)]. </ref>.
** Salsa20/8 mit 8 Runden für zeitkritische Anwendungen wird in der Schlüsselableitungsfunktion [[scrypt]] benutzt.<ref>Colin Percival: [http://www.tarsnap.com/scrypt/scrypt.pdf Stronger Key Derivation via Sequential Memory-Hard Functions] (PDF, 207&nbsp;kB).</ref>
* XSalsa20 ist eine Variante mit erweitertem [[Nonce]] (192 Bit statt 64 Bit)<ref>D. J. Bernstein: [http://cr.yp.to/snuffle/xsalsa-20110204.pdf Extending the Salsa20 nonce (pdf)].</ref>.
* XSalsa20 ist eine Variante mit erweiterter [[Nonce]] (192 Bit statt 64 Bit).<ref>D. J. Bernstein: [http://cr.yp.to/snuffle/xsalsa-20110204.pdf Extending the Salsa20 nonce] (PDF, 349&nbsp;kB).</ref>
* [[#ChaCha-Variante|ChaCha]]
* ChaCha oder Snuffle 2008 sind Varianten von Salsa20<ref>D. J. Bernstein: [http://cr.yp.to/chacha.html ChaCha, a variant of Salsa20]. </ref>. Die Hashfunktion BLAKE basiert auf ChaCha<ref>[https://131002.net/blake/ SHA-3 proposal BLAKE].</ref>.


Salsa10<ref>D. J. Bernstein [http://cr.yp.to/salsa10.html The Salsa10 hash function].</ref> ist der 2004 eingeführte Vorläufer von Salsa20.
Salsa10<ref>D. J. Bernstein [http://cr.yp.to/salsa10.html The Salsa10 hash function].</ref> ist der 2004 eingeführte Vorläufer von Salsa20.


Komponenten von Salsa20 werden auch in der Kompressionsfunktion Rumba20<ref>D. J. Bernstein: [http://cr.yp.to/rumba20/expandxor-20070503.pdf The Rumba20 compression function (pdf)]. </ref> benutzt.
Komponenten von Salsa20 werden auch in der Kompressionsfunktion Rumba20<ref>D. J. Bernstein: [http://cr.yp.to/rumba20/expandxor-20070503.pdf The Rumba20 compression function] (PDF, 168&nbsp;kB).</ref> benutzt.


== Design ==
== ChaCha-Variante ==
'''ChaCha''' (oder ''Snuffle 2008'') ist eine Variante von Salsa20, die entwickelt wurde, um die [[Diffusion (Kryptologie)|Diffusion]] pro Runde bei gleichbleibender bis schnellerer Geschwindigkeit zu erhöhen. Der Zahlensuffix bei ChaCha entspricht der Rundenzahl, also entspricht ChaCha8 beispielsweise einem modifizierten Salsa20/8.<ref>D. J. Bernstein: [http://cr.yp.to/chacha.html ChaCha, a variant of Salsa20].</ref><ref>{{Internetquelle |autor=Daniel J. Bernstein |url=https://cr.yp.to/chacha/chacha-20080128.pdf |titel=ChaCha, a variant of Salsa20 |werk=Department of Mathematics, Statistics, and Computer Science |hrsg=The University of Illinois at Chicago |format=PDF |abruf=2024-03-06}}</ref>


Analog zu XSalsa20 gibt es auch die XChaCha-Variante mit erweiterter Nonce.<ref>{{Literatur |Autor=Scott Arciszewski |Titel=XChaCha: eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305 |Nummer=draft-irtf-cfrg-xchacha-03 |Verlag=Internet Engineering Task Force |Datum=2020-01-10 |Online=https://datatracker.ietf.org/doc/draft-irtf-cfrg-xchacha/03/ |Abruf=2024-03-06}}</ref>
Salsa20 beruht auf wenigen, einfachen Operationen und ist damit ähnlich aufgebaut wie die Verschlüsselungsfunktionen [[XTEA]] und [[International Data Encryption Algorithm|IDEA]]. Durch das konservative Design wird eine gute und konstante Software-[[Rechenleistung|Performance]] auf vielen CPUs und eine weitgehende Resistenz gegen einige [[Seitenkanalattacke]]n (''time-attacks'') erreicht.
Der Kern besteht aus einer Funktion, die [[Schlüssel (Kryptologie)|Schlüssel]], [[Nonce]] und Zähler auf einen 64-Byte-Block abbildet. Die Funktion besteht aus einer langen Verkettung von nur drei Operationen: 32-Bit-Addition, 32-Bit-[[XOR-Gatter|XOR]], 32-Bit-Rotation (mit konstanten Abständen).
Für die Stromverschlüsselung wird das Ergebnis der Funktion im [[Counter Mode]] benutzt und mit dem [[Klartext (Kryptographie)|Klartext]] [[Kontravalenz|exklusiv-Oder]] (XOR) verknüpft.
Die empfohlene Schlüssellänge beträgt 256 Bit, kürzere Schlüssel sind jedoch möglich. Salsa20 hat eine kompakte Implementierung, ist schnell und Speicher-schonend.


[[ChaCha20-Poly1305]] ist ein [[Authenticated Encryption|AEAD]]-Betriebsmodus, der auf ChaCha20 und der ebenfalls von Bernstein entwickelten [[Poly1305|Poly1305-Hashfunktion]] basiert. Es ist neben [[Advanced Encryption Standard|AES]]-[[Galois/Counter Mode|GCM]] das einzige andere Verfahren das in [[TLS 1.3]] angewendet wird.<ref>{{RFC-Internet |RFC=8446 |Titel=The Transport Layer Security (TLS) Protocol Version 1.3 |Autor=Eric Rescorla |Datum=}}</ref>
== Sicherheit ==


ChaCha20 wird als [[kryptographisch sicherer Zufallszahlengenerator]] in [[Linux]]<ref>{{Internetquelle |url=https://lwn.net/Articles/686033/ |titel=Replacing /dev/urandom |werk=LWN.net |abruf=2024-03-06}}</ref>, [[FreeBSD]]<ref>{{Internetquelle |url=https://svnweb.freebsd.org/base?view=revision&revision=r317015 |titel=&#91;base&#93; Revision 317015 |werk=FreeBSD |abruf=2024-03-06}}</ref>, [[OpenBSD]],<ref>{{Internetquelle |url=http://bxr.su/OpenBSD/lib/libc/crypt/arc4random.c |titel=Super User’s BSD Cross Reference: /OpenBSD/lib/libc/crypt/arc4random.c |werk=bxr.su |abruf=2024-03-06}}</ref> [[NetBSD]]<ref>{{Internetquelle |url=http://bxr.su/NetBSD/lib/libc/gen/arc4random.c |titel=Super User’s BSD Cross Reference: /NetBSD/lib/libc/gen/arc4random.c |werk=bxr.su |abruf=2024-03-06}}</ref> und [[DragonFly BSD]]<ref>{{Internetquelle |url=http://bxr.su/DragonFly/sys/kern/subr_csprng.c |titel=Super User’s BSD Cross Reference: /DragonFly/sys/kern/subr_csprng.c |werk=bxr.su |abruf=2024-03-06}}</ref> verwendet. Die Programmiersprache [[Rust (Programmiersprache)|Rust]] nutzt dafür ChaCha12<ref>{{Internetquelle |url=https://github.com/rust-random/rand/issues/932 |titel=rand_chacha: consider ChaCha12 (or possibly ChaCha8) over ChaCha20 · Issue #932 · rust-random/rand |werk=github.com |sprache=en |abruf=2024-03-06}}</ref> und [[Go (Programmiersprache)|Go]] nutzt ChaCha8.<ref>{{Internetquelle |url=https://pkg.go.dev/math/rand/v2 |titel=rand package – math/rand/v2 – Go Packages |werk=pkg.go.dev |abruf=2024-03-06}}</ref>
In einem neuen Verfahren, basierend auf den ''probabilistic neutral bits'' (PNBs), stellten Aumassen et al 2008 <!--Bernstein schreibt 2007 -?-->einen Angriff auf Salsa20/7, Salsa20/8, Chaha6, ChaCha7 und Rumba3 vor, in dem unter anderem Salsa20/7 (128-Bit-Schlüssel) mit einer Zeitkomplexität von 2<sup>111</sup>, einer Datenkomplexität von 2<sup>21</sup> und einer Erfolgsquote von 50% gebrochen werden konnte<ref>Jean-Philippe Aumasson, Simon Fischer, Shahram Khazaei, Willi Meier, and Christian Rechberger: [http://eprint.iacr.org/2007/472 New Features of Latin Dances: Analysis of Salsa, ChaCha, and Rumba]. Cryptology ePrint Archive: Report 2007/472 ''(englisch)''</ref>.

2012 wurde dieser Angriff von Shi et al noch einmal verbessert<ref>Zhenqing Shi, Bin Zhang, Dengguo Feng, Wenling Wu: Improved Key Recovery Attacks on Reduced-Round Salsa20 and ChaCha. In: Information Security and Cryptology – ICISC 2012. Springer Berlin Heidelberg 2013. ISBN 978-3-642-37681-8, S. 337-351. </ref>. Die beste [[Kryptoanalyse]]n für die Runden-reduzierten Varianten von Salsa20 und ChaCha sind demnach (Stand November 2013):
Außerdem basiert die Hashfunktion [[BLAKE (Hashfunktion)|BLAKE]] auf ChaCha.<ref>{{Internetquelle |autor=Jean-Philippe Aumasson |url=http://131002.net/blake/ |titel=SHA-3 proposal BLAKE |werk=131002.net |datum=2019-07-10 |offline=1 |archiv-url=https://web.archive.org/web/20190710063341/http://131002.net/blake/ |abruf=2024-03-06}}</ref>
* Salsa20/7 (128-Bit-Schlüssel): [[Zeitkomplexität]] 2<sup>109</sup>, [[Platzkomplexität]] 2<sup>19</sup>. Zur Veranschaulichung: der Superrechner [[IBM Roadrunner|Roadrunner]] bräuchte ungefähr 20580831662&nbsp;Jahre dafür und müsste außerdem für frei gewählte Klartexte Zugang zu den entsprechenden Geheimtexten haben ([[Chosen-Plaintext-Attacke]]). Unberücksichtigt bleibt dabei jedoch die Möglichkeit der Parallelisierung; Daniel J. Bernstein, der Erfinder von Salsa20, hält daher 128-Bit-Schlüssel für „uncomfortably risky“<ref>Daniel J. Bernstein: [http://cr.yp.to/snuffle/keysizes.pdf Notes on the Salsa20 key size]. S.2. </ref> (beunruhigend riskant).

* ChaCha6 (128-Bit-Schlüssel): Zeitkomplexität 2<sup>105</sup>, Platzkomplexität 2<sup>28</sup>
== Design ==
Salsa20 beruht auf wenigen einfachen Operationen und ist damit ähnlich aufgebaut wie die Verschlüsselungsfunktionen [[Extended Tiny Encryption Algorithm|XTEA]] und [[International Data Encryption Algorithm|IDEA]]. Durch das konservative Design wird eine gute und konstante Software-[[Rechenleistung|Performance]] auf vielen CPUs und eine weitgehende Resistenz gegen einige [[Seitenkanalattacke]]n ''(time-attacks)'' erreicht.
Der Kern besteht aus einer Funktion, die [[Schlüssel (Kryptologie)|Schlüssel]], Nonce und Zähler auf einen 64-Byte-Block abbildet. Die Funktion besteht aus einer langen Verkettung von nur drei Operationen: 32-Bit-Addition, 32-Bit-[[Kontravalenz|XOR]], 32-Bit-Rotation (mit konstanten Abständen).
Für die Stromverschlüsselung wird das Ergebnis der Funktion im [[Counter Mode]] benutzt und mit dem [[Klartext (Kryptographie)|Klartext]] [[Kontravalenz|exklusiv-Oder]]-verknüpft (XOR).
Die empfohlene Schlüssellänge beträgt 256 Bit, kürzere Schlüssel sind jedoch möglich. Salsa20 hat eine kompakte Implementierung, ist schnell und Speicher-schonend.

== Sicherheit ==
In einem neuen Verfahren, basierend auf den ''probabilistic neutral bits (PNBs)'', stellten Aumasson et al. 2008 <!--Bernstein schreibt 2007 -?-->einen Angriff auf Salsa20/7, Salsa20/8, ChaCha6, ChaCha7 und Rumba3 vor, in dem unter anderem Salsa20/7 (128-Bit-Schlüssel) mit einer Zeitkomplexität von 2<sup>111</sup>, einer Datenkomplexität von 2<sup>21</sup> und einer Erfolgsquote von 50 % gebrochen werden konnte.<ref>Jean-Philippe Aumasson, Simon Fischer, Shahram Khazaei, Willi Meier, and Christian Rechberger: [http://eprint.iacr.org/2007/472 New Features of Latin Dances: Analysis of Salsa, ChaCha, and Rumba.] Cryptology ePrint Archive, iacr.org, Report 2007/472 (englisch).</ref>
2012 wurde dieser Angriff von Shi et al. noch einmal verbessert.<ref>Zhenqing Shi, Bin Zhang, Dengguo Feng, Wenling Wu: Improved Key Recovery Attacks on Reduced-Round Salsa20 and ChaCha. In: Information Security and Cryptology – ICISC 2012. Springer Berlin Heidelberg 2013. ISBN 978-3-642-37681-8, S. 337–351.</ref> Die besten [[Kryptoanalyse]]n für die rundenreduzierten Varianten von Salsa20 und ChaCha sind demnach (Stand: September 2014):
* Salsa20/7 (128-Bit-Schlüssel): [[Zeitkomplexität]] 2<sup>109</sup>, [[Platzkomplexität]] 2<sup>19</sup>. Zur Veranschaulichung: der Superrechner [[IBM Roadrunner|Roadrunner]] bräuchte ungefähr 20.580.831.662&nbsp;Jahre dafür und müsste außerdem für frei gewählte Klartexte Zugang zu den entsprechenden Geheimtexten haben ([[Chosen-Plaintext-Attacke]]). Unberücksichtigt bleibt dabei jedoch die Möglichkeit der Parallelisierung; Daniel J. Bernstein, der Erfinder von Salsa20, hält daher 128-Bit-Schlüssel für „uncomfortably risky“ ''(„beunruhigend riskant“)''.<ref>Daniel J. Bernstein: [http://cr.yp.to/snuffle/keysizes.pdf Notes on the Salsa20 key size.] (PDF, 32&nbsp;kB) S. 2.</ref>
* ChaCha6 (128-Bit-Schlüssel): Zeitkomplexität 2<sup>105</sup>, Platzkomplexität 2<sup>28</sup>.
<!--* Salsa20/7 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>148</sup>, Platzkomplexität 2<sup>24</sup>
<!--* Salsa20/7 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>148</sup>, Platzkomplexität 2<sup>24</sup>
* Salsa20/8 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>250</sup>, Platzkomplexität 2<sup>27</sup>
* Salsa20/8 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>250</sup>, Platzkomplexität 2<sup>27</sup>
* ChaCha6 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>136</sup>, Platzkomplexität 2<sup>48</sup>
* ChaCha6 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>136</sup>, Platzkomplexität 2<sup>48</sup>
* ChaCha7 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>246,5</sup> Platzkomplexität 2<sup>27</sup>-->
* ChaCha7 (256-Bit-Schlüssel): Zeitkomplexität 2<sup>246,5</sup> Platzkomplexität 2<sup>27</sup>-->



== Weblinks ==
== Weblinks ==
* [http://cr.yp.to/snuffle.html D. J. Bernsteins Seite zu Salsa20] ''(englisch)''
* [https://cr.yp.to/snuffle.html D. J. Bernsteins Seite zu Salsa20] (englisch)
* [http://www.ecrypt.eu.org/stream/e2-salsa20.html eSTREAM Portfolio zu Salsa20/12 ]''(englisch)''.
* [https://www.ecrypt.eu.org/stream/e2-salsa20.html eSTREAM Portfolio zu Salsa20/12.] ecrypt.eu.org (englisch).
* S. Josefsson: [http://tools.ietf.org/html/draft-josefsson-salsa20-tls-02 The Salsa20 Stream Cipher for Transport Layer Security draft-josefsson-salsa20-tls-02] ''(englisch)''
* S. Josefsson: [https://datatracker.ietf.org/doc/html/draft-josefsson-salsa20-tls-04 The Salsa20 Stream Cipher for Transport Layer Security.] ietf.org (englisch).


== Einzelnachweise ==
== Einzelnachweise ==
<references />
<references responsive />



<nowiki>
[[Kategorie:Stromverschlüsselung]]
[[Kategorie:Stromverschlüsselung]]
</nowiki>

Aktuelle Version vom 3. Mai 2024, 00:19 Uhr

Salsa20 (auch Snuffle 2005) ist eine Stromverschlüsselung, die 2005 von Daniel J. Bernstein entwickelt wurde. Im europäischen Projekt eSTREAM ist die auf 12 Runden reduzierte Version Salsa20/12 einer der Finalisten (Profil 1 – Software-Anwendungen).[1] Salsa20 ist frei von Patenten.

Entstehung

Daniel J. Bernstein entwickelte Snuffle 2005 als Antwort auf die früheren Versuche der USA, kryptographische Publikationen zu beschränken. Von den Beschränkungen waren Hashfunktionen ausgenommen; mit Snuffle 2005 wurde gezeigt, dass eine starke Verschlüsselung auch mittels Hashfunktionen vorgenommen werden kann.[2]

Varianten

Salsa20 Core ist der Kern verschiedener Hashfunktionen und Stromverschlüsselungen.

  • Salsa20 oder Snuffle 2005 ist eine Familie von 256-Bit-Stromverschlüsselungen:[3]
    • Salsa20/20 mit 20 Runden ist als Standard gedacht.
    • Salsa20/12 mit 12 Runden für zeitkritische Anwendungen war Finalist im eSTREAM-Projekt, einem europäischen Auswahlverfahren für Stromverschlüsselungen.
    • Salsa20/8 mit 8 Runden für zeitkritische Anwendungen wird in der Schlüsselableitungsfunktion scrypt benutzt.[4]
  • XSalsa20 ist eine Variante mit erweiterter Nonce (192 Bit statt 64 Bit).[5]
  • ChaCha

Salsa10[6] ist der 2004 eingeführte Vorläufer von Salsa20.

Komponenten von Salsa20 werden auch in der Kompressionsfunktion Rumba20[7] benutzt.

ChaCha-Variante

ChaCha (oder Snuffle 2008) ist eine Variante von Salsa20, die entwickelt wurde, um die Diffusion pro Runde bei gleichbleibender bis schnellerer Geschwindigkeit zu erhöhen. Der Zahlensuffix bei ChaCha entspricht der Rundenzahl, also entspricht ChaCha8 beispielsweise einem modifizierten Salsa20/8.[8][9]

Analog zu XSalsa20 gibt es auch die XChaCha-Variante mit erweiterter Nonce.[10]

ChaCha20-Poly1305 ist ein AEAD-Betriebsmodus, der auf ChaCha20 und der ebenfalls von Bernstein entwickelten Poly1305-Hashfunktion basiert. Es ist neben AES-GCM das einzige andere Verfahren das in TLS 1.3 angewendet wird.[11]

ChaCha20 wird als kryptographisch sicherer Zufallszahlengenerator in Linux[12], FreeBSD[13], OpenBSD,[14] NetBSD[15] und DragonFly BSD[16] verwendet. Die Programmiersprache Rust nutzt dafür ChaCha12[17] und Go nutzt ChaCha8.[18]

Außerdem basiert die Hashfunktion BLAKE auf ChaCha.[19]

Design

Salsa20 beruht auf wenigen einfachen Operationen und ist damit ähnlich aufgebaut wie die Verschlüsselungsfunktionen XTEA und IDEA. Durch das konservative Design wird eine gute und konstante Software-Performance auf vielen CPUs und eine weitgehende Resistenz gegen einige Seitenkanalattacken (time-attacks) erreicht. Der Kern besteht aus einer Funktion, die Schlüssel, Nonce und Zähler auf einen 64-Byte-Block abbildet. Die Funktion besteht aus einer langen Verkettung von nur drei Operationen: 32-Bit-Addition, 32-Bit-XOR, 32-Bit-Rotation (mit konstanten Abständen). Für die Stromverschlüsselung wird das Ergebnis der Funktion im Counter Mode benutzt und mit dem Klartext exklusiv-Oder-verknüpft (XOR). Die empfohlene Schlüssellänge beträgt 256 Bit, kürzere Schlüssel sind jedoch möglich. Salsa20 hat eine kompakte Implementierung, ist schnell und Speicher-schonend.

Sicherheit

In einem neuen Verfahren, basierend auf den probabilistic neutral bits (PNBs), stellten Aumasson et al. 2008 einen Angriff auf Salsa20/7, Salsa20/8, ChaCha6, ChaCha7 und Rumba3 vor, in dem unter anderem Salsa20/7 (128-Bit-Schlüssel) mit einer Zeitkomplexität von 2111, einer Datenkomplexität von 221 und einer Erfolgsquote von 50 % gebrochen werden konnte.[20] 2012 wurde dieser Angriff von Shi et al. noch einmal verbessert.[21] Die besten Kryptoanalysen für die rundenreduzierten Varianten von Salsa20 und ChaCha sind demnach (Stand: September 2014):

  • Salsa20/7 (128-Bit-Schlüssel): Zeitkomplexität 2109, Platzkomplexität 219. Zur Veranschaulichung: der Superrechner Roadrunner bräuchte ungefähr 20.580.831.662 Jahre dafür und müsste außerdem für frei gewählte Klartexte Zugang zu den entsprechenden Geheimtexten haben (Chosen-Plaintext-Attacke). Unberücksichtigt bleibt dabei jedoch die Möglichkeit der Parallelisierung; Daniel J. Bernstein, der Erfinder von Salsa20, hält daher 128-Bit-Schlüssel für „uncomfortably risky“ („beunruhigend riskant“).[22]
  • ChaCha6 (128-Bit-Schlüssel): Zeitkomplexität 2105, Platzkomplexität 228.

Einzelnachweise

  1. The eSTREAM Portfolio (Memento des Originals vom 13. August 2012 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.ecrypt.eu.org (PDF, 118 kB).
  2. D. J. Bernstein: Snuffle 2005: the Salsa20 encryption function (PDF, 98 kB).
  3. D. J. Bernstein: The Salsa20 family of stream ciphers (PDF, 176 kB).
  4. Colin Percival: Stronger Key Derivation via Sequential Memory-Hard Functions (PDF, 207 kB).
  5. D. J. Bernstein: Extending the Salsa20 nonce (PDF, 349 kB).
  6. D. J. Bernstein The Salsa10 hash function.
  7. D. J. Bernstein: The Rumba20 compression function (PDF, 168 kB).
  8. D. J. Bernstein: ChaCha, a variant of Salsa20.
  9. Daniel J. Bernstein: ChaCha, a variant of Salsa20. (PDF) In: Department of Mathematics, Statistics, and Computer Science. The University of Illinois at Chicago, abgerufen am 6. März 2024.
  10. Scott Arciszewski: XChaCha: eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305. draft-irtf-cfrg-xchacha-03. Internet Engineering Task Force, 10. Januar 2020 (ietf.org [abgerufen am 6. März 2024]).
  11. Eric Rescorla: RFC 8446 – The Transport Layer Security (TLS) Protocol Version 1.3. (englisch).
  12. Replacing /dev/urandom. In: LWN.net. Abgerufen am 6. März 2024.
  13. [base] Revision 317015. In: FreeBSD. Abgerufen am 6. März 2024.
  14. Super User’s BSD Cross Reference: /OpenBSD/lib/libc/crypt/arc4random.c. In: bxr.su. Abgerufen am 6. März 2024.
  15. Super User’s BSD Cross Reference: /NetBSD/lib/libc/gen/arc4random.c. In: bxr.su. Abgerufen am 6. März 2024.
  16. Super User’s BSD Cross Reference: /DragonFly/sys/kern/subr_csprng.c. In: bxr.su. Abgerufen am 6. März 2024.
  17. rand_chacha: consider ChaCha12 (or possibly ChaCha8) over ChaCha20 · Issue #932 · rust-random/rand. In: github.com. Abgerufen am 6. März 2024 (englisch).
  18. rand package – math/rand/v2 – Go Packages. In: pkg.go.dev. Abgerufen am 6. März 2024.
  19. Jean-Philippe Aumasson: SHA-3 proposal BLAKE. In: 131002.net. 10. Juli 2019, archiviert vom Original (nicht mehr online verfügbar); abgerufen am 6. März 2024.
  20. Jean-Philippe Aumasson, Simon Fischer, Shahram Khazaei, Willi Meier, and Christian Rechberger: New Features of Latin Dances: Analysis of Salsa, ChaCha, and Rumba. Cryptology ePrint Archive, iacr.org, Report 2007/472 (englisch).
  21. Zhenqing Shi, Bin Zhang, Dengguo Feng, Wenling Wu: Improved Key Recovery Attacks on Reduced-Round Salsa20 and ChaCha. In: Information Security and Cryptology – ICISC 2012. Springer Berlin Heidelberg 2013. ISBN 978-3-642-37681-8, S. 337–351.
  22. Daniel J. Bernstein: Notes on the Salsa20 key size. (PDF, 32 kB) S. 2.