Salsa20

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 2. dubna 2015; ověření vyžaduje 31 úprav .

Salsa20  je systém šifrování streamu vyvinutý Danielem Bernsteinem. Algoritmus byl prezentován na soutěži eSTREAM , jejímž účelem bylo vytvořit evropské standardy pro šifrování dat přenášených poštovními systémy. Algoritmus se stal vítězem soutěže v prvním profilu (streamové šifry pro softwarové aplikace s vysokou propustností).

Šifra Salsa20 používá následující operace:

Algoritmus používá hashovací funkci s 20 cykly . Jeho hlavní transformace se podobají algoritmu AES .

Popis algoritmu

Koncepty

Dále nazveme prvek množiny {0,1,…,2 32 −1} slovem a zapíšeme jej v hexadecimálním tvaru s předponou 0x.

Operace přidání dvou slov modulo 2 32 bude označena znaménkem " ".

Exkluzivní nebo (bitová sumace) bude označeno symbolem " "

- bitový cyklický levý posun slova bude označen . Když si představíte jak , tak

Funkce použité v algoritmu

quarterround(y)

Hlavní jednotkou systému je transformace přes čtyři slova. Z toho jsou konstruovány obecnější transformace popsané níže.

Jeho podstata spočívá v tom, že ke každému slovu sečteme dvě předchozí, posuneme (cyklicky) součet o určitý počet bitů a bit po bitu sečteme výsledek s vybraným slovem. Následné operace se provádějí s novými významy slov.

Řekněme, že  jde o posloupnost 4 slov, pak je funkce kde

Například:

čtvrtletí (0x00000001; 0x00000000; 0x00000000; 0x00000000)
= (0x08008145; 0x00000080; 0x00010200; 0x20500000)

Tuto funkci si můžete představit jako transformaci slov y 0 , y 1 , y 2 a y 3 . Každá z těchto transformací je vratná, stejně jako funkce jako celek.

rowround(y)

V této transformaci vezmeme 16 slov. Reprezentujeme je ve formě matice 4x4. Vezmeme každý řádek této matice a transformujeme slova této matice pomocí funkce . Slova z řádku se berou v pořadí, počínaje i -tým pro i -tý řádek, kde i = {0,1,2,3}.

Nechť  je posloupnost 16 slov, pak  také posloupnost 16 slov kde

columnround(y)

Zde vezmeme sloupce stejné matice. Transformujme je pomocí funkce , analogicky do ní dosadíme hodnoty, počínaje j -tým sloupcem za j -tý sloupec, kde j = {0,1,2,3}.

Funkce columnround(y)=(z) také pracuje se sekvencí 16 slov, takže

doubleround(y)

Funkce doubleround(y) je sekvenční aplikací funkcí columnround a poté rowround : doubleround (y) = rowround(columnround(y))

Salsa20()

Tento algoritmus používá vstup slova začínající nízkým byte . K tomu je zde transformace

Nechť je  4bajtová sekvence, pak  je slovo takové, že

Konečná transformace je bitovým součtem původní sekvence a výsledkem 20 kol střídání sloupcových a řádkových transformací.

Kde

x[i] jsou byty x a xj  jsou slova použitá ve výše uvedených funkcích.

Pokud

,

pak Salsa20(x) je posloupnost výsledků

Rozšíření klíče pro Salsa20

Rozšíření převádí 32bajtový nebo 16bajtový klíč k a 16bajtové číslo n na 64bajtovou sekvenci .

Rozšíření k používá konstanty

pro 32bajtové k a

pro 16bajtové k .

Jedná se o "rozbalit 32 bajtů k" a "rozbalit 16 bajtů k" v kódu ASCII .

Nechť k 0 ,k 1 ,n má 16bajtové sekvence, pak .

Pokud máme pouze jednu 16bajtovou sekvenci k , pak

Funkce šifrování Salsa20

Byte-sequence cipher , for will be

 — jedinečné 8bajtové číslo (nonce).

Šifrovaný text bude mít velikost bajtů , stejně jako prostý text.

Salsa20 k ( v ) je sekvence 270 bajtů.

Kde  je jedinečná sekvence 8 bajtů taková, že resp

Kde

Výkon

Vzhledem k tomu, že transformace každého sloupce a každého řádku jsou na sobě nezávislé, lze výpočty potřebné pro šifrování snadno paralelizovat . To poskytuje významný nárůst rychlosti pro většinu moderních platforem.

Algoritmus nemá prakticky žádné režijní výpočty potřebné ke spuštění šifrovacího cyklu. To platí i pro klíčové změny. Mnoho šifrovacích systémů se spoléhá na předběžné výpočty, jejichž výsledky musí být uloženy v mezipaměti procesoru první úrovně (L1) . Protože závisí na klíči, bude nutné provést výpočty znovu. V Salsa20 stačí klíč jednoduše nahrát do paměti.

Varianty Salsa20/8 a Salsa20/12

Salsa20/8 a Salsa20/12 jsou šifrovací systémy využívající stejný mechanismus jako Salsa20, ale s 8, respektive 12 šifrovacími koly, namísto původních 20. Salsa20 byla vyrobena s velkou výdrží. Zatímco Salsa20/8 vykazuje dobré výsledky v rychlosti, ve většině případů předčí mnoho jiných šifrovacích systémů, včetně AES a RC4 [1] .

Varianta XSalsa20

Existuje varianta algoritmu Salsa20, rovněž navržená Danielem Bernsteinem, která zvyšuje délku nonce z 64 bitů na 192 bitů. Tato varianta se nazývá XSalsa20. Zvětšená velikost nonce umožňuje použít k jeho generování kryptograficky silný generátor pseudonáhodných čísel , zatímco bezpečné šifrování s 64bitovým nonce vyžaduje použití čítače kvůli vysoké pravděpodobnosti kolizí [2] .

Kryptoanalýza

V roce 2005 Paul Crowley oznámil útok na Salsu20/5 s odhadovanou časovou složitostí 2165 . Tento a následující útoky jsou založeny na zkrácené diferenciální kryptoanalýze . Za tuto kryptoanalýzu obdržel od autora Salsa20 odměnu 1 000 $.

V roce 2006 Fischer, Meier, Berbain , Biasse a Robshaw ohlásili útok na složitost 2117 proti Salsa/6 a složitost 2217 proti Salsa20 /7 s propojenými klíči .

V roce 2008 Aumasson, Fischer, Khazaei, Meier a Rechberger ohlásili útok na Salsu20/7 s obtížností 2153 a první útok na Salsu20/8 s obtížností 2251 .

Dosud nebyly zveřejněny žádné veřejné zprávy o útocích na Salsu20/12 a celou Salsu20/20.

ChaCha

V roce 2008 publikoval Daniel Bernstein příbuznou rodinu proudových šifer nazvanou ChaCha, jejímž cílem bylo zlepšit míchání dat v jednom kole a údajně zlepšit šifrovací sílu při stejné nebo dokonce mírně vyšší rychlosti [3] .

ChaCha20 je popsán v RFC 7539 (květen 2015).

Hlavní jednotka systému zde funguje jinak. Nyní každá operace změní jedno ze slov. Změny probíhají cyklicky „v opačném směru“, počínaje 0. slovem. Operace sčítání a bitového součtu se střídají spolu s posunem, slovo je přidáno k předchozímu.

Funkce čtvrtletí (a, b, c, d), kde slova a, b, c, d, v ChaCha vypadá takto:

Jsou zde použity stejné aritmetické operace, ale každé slovo se při převodu změní dvakrát místo jednou.

Navíc je oproti Salse změněn počáteční stav šifry (rozšíření klíče): prvních 128 bitů jsou konstanty, následuje 256 bitů klíče, 32 bitů čítače a poté 96 bitů jedinečné sekvence nonce.

Poznámky

  1. Archivovaná kopie . Získáno 11. listopadu 2010. Archivováno z originálu 15. prosince 2017.
  2. Archivovaná kopie . Získáno 13. září 2016. Archivováno z originálu 18. září 2018.
  3. Archivovaná kopie . Získáno 11. listopadu 2010. Archivováno z originálu 2. května 2018.

Odkazy