Stroomvercijfering

In de cryptografie is een stream-cijfer een symmetrisch sleutelnummer waarbij de gewone tekstbits worden gecombineerd met een pseudorandom-cijferbitstream (keystream) door middel van een exclusieve- of (xor) bewerking. In een streamcodering worden de plaintext-cijfers één voor één versleuteld, en de transformatie van opeenvolgende cijfers varieert tijdens de vercijferingstoestand. Een alternatieve naam is een staatsvercijfering, aangezien de vercijfering van elk cijfer afhankelijk is van de huidige staat. In de praktijk zijn de cijfers meestal enkelvoudige bits of bytes.

Stroomcijfers vertegenwoordigen een andere benadering van symmetrische versleuteling dan blokcijfers. Blokcijfers werken op grote blokken met een vaste lengte. Streamcijfers worden meestal met een hogere snelheid uitgevoerd dan blokcijfers en hebben lagere hardwarevereisten. Stroomcijfers kunnen echter gevoelig zijn voor ernstige beveiligingsproblemen als ze verkeerd worden gebruikt; in het bijzonder mag dezelfde starttoestand nooit twee keer worden gebruikt.

Een streamcodering maakt gebruik van een veel kleinere en handigere cryptografische sleutel, bijvoorbeeld 128 bits sleutels. Op basis van deze sleutel genereert het een pseudorandom keystream die gecombineerd kan worden met de cijfers van de platte tekst op een gelijkaardige manier als het one-time pad vercijferingsalgoritme. Omdat de keystream echter pseudorandom is, en niet echt willekeurig, kan de beveiliging van het one-time pad niet worden toegepast en is het heel goed mogelijk dat een stream-codering volledig onveilig is.

De werking van de keystreamgenerator in A5/1, een op LFSR gebaseerd stroomcijfer dat wordt gebruikt om mobiele telefoongesprekken te versleutelen.Zoom
De werking van de keystreamgenerator in A5/1, een op LFSR gebaseerd stroomcijfer dat wordt gebruikt om mobiele telefoongesprekken te versleutelen.

Soorten stroomcijfers

Een stroomvercijfering genereert opeenvolgende elementen van de keystream op basis van een interne toestand. Deze toestand wordt op twee manieren geüpdatet:

  1. Als de toestand onafhankelijk van de klaartekst- of cijfertekstberichten verandert, wordt de versleuteling geclassificeerd als een synchrone stroomvercijfering.
  2. Als de toestand wordt bijgewerkt op basis van eerdere wijzigingen van de cijferreeksen, wordt het cijfer geclassificeerd als een zelf-synchroniserende stroomcijfers.

Synchrone stroomcijfers

In een synchrone stream wordt een stroom van pseudo-willekeurige cijfers gegenereerd, onafhankelijk van de platte tekst en de cijfertekst, en vervolgens gecombineerd met de platte tekst (om te versleutelen) of met de cijfertekst (om te ontsleutelen). In de meest voorkomende vorm worden binaire cijfers (bits) gebruikt, en de keystream wordt gecombineerd met de platte tekst met behulp van de exclusieve of bewerking (XOR). Dit wordt een binaire additieve stream-codering genoemd.

In een synchrone stroomvercijfering moeten de zender en de ontvanger synchroon zijn om de ontcijfering te laten slagen. Als er tijdens de verzending cijfers worden toegevoegd of verwijderd, gaat de synchronisatie verloren. Om de synchronisatie te herstellen, kunnen verschillende offsets systematisch worden uitgeprobeerd om de juiste ontcijfering te verkrijgen. Een andere aanpak is het markeren van de cijfertekst met markers op regelmatige punten in de uitvoer.

Als er echter een cijfer beschadigd is in de transmissie, in plaats van dat het is toegevoegd of verloren, wordt slechts een enkel cijfer in de platte tekst beïnvloed en de fout verspreidt zich niet naar andere delen van het bericht. Deze eigenschap is nuttig wanneer de overdrachtsfoutpercentage hoog is; het maakt het echter minder waarschijnlijk dat de fout zonder verdere mechanismen zou worden gedetecteerd. Bovendien zijn synchrone stroomcijfers door deze eigenschap zeer gevoelig voor actieveaanvallen - als een aanvaller een cijfer in de cijfertekst kan veranderen, zou hij voorspelbare veranderingen kunnen aanbrengen in de corresponderende bit in de platte tekst; bijvoorbeeld, door een bit in de cijfertekst om te draaien wordt hetzelfde bit omgedraaid (Toggled) in de platte tekst.

Zelf-synchroniserende stroomcijfers

Zelf-synchroniserende stroomcijfers is een andere techniek die een deel van de vorige N-cijfertjes gebruikt om de keystream te berekenen. Zulke schema's staan ook bekend als asynchrone stroomcijfers of cijfertoetsen (CTAK). Het idee van zelf-synchronisatie werd gepatenteerd in 1946, en heeft het voordeel dat de ontvanger automatisch synchroniseert met de keystreamgenerator na ontvangst van N-cijfertjes, waardoor het gemakkelijker is om te herstellen als er cijfers worden gedropt of toegevoegd aan de berichtenstroom. Fouten met één cijfer zijn beperkt in hun effect en hebben alleen invloed op de N-cijferige tekst. Het is iets moeilijker om actieve aanvallen uit te voeren op zelf-synchroniserende stream-cijfers dan op synchrone tegenhangers.

Een voorbeeld van een zelf-synchroniserende stroomcodering is een blokcodering in de cipher-feedbackmodus (CFB).

Lineaire feedbackverschuivingsregister-gebaseerde stroomcijfers

Binaire stroomcijfers worden vaak geconstrueerd met behulp van lineaire feedbackverschuivingsregisters (LFSR's) omdat ze eenvoudig in hardware kunnen worden geïmplementeerd en snel wiskundig kunnen worden geanalyseerd. Het gebruik van alleen LFSR's is echter onvoldoende om een goede beveiliging te bieden. Er zijn verschillende regelingen ontworpen om de veiligheid van LFSR's te verhogen.

Niet-lineaire combinatiefuncties

Omdat LFSR's inherent lineair zijn, is een techniek om de lineariteit te verwijderen het voeden van de uitgangen van een groep parallelle LFSR's in een niet-lineaire Booleaanse functie om een combinatiegenerator te vormen. Verschillende eigenschappen van een dergelijke combinatiefunctie zijn belangrijk om de veiligheid van het resulterende schema te waarborgen, bijvoorbeeld om correlatie-aanvallen te voorkomen.

Klokgestuurde generatoren

Normaal gesproken worden LFSR's regelmatig getrapt. Een techniek om niet-lineariteit in te voeren is om de LFSR onregelmatig te laten klokken, gecontroleerd door de uitgang van een tweede LFSR. Dergelijke generatoren zijn onder andere de stop-and-go generator, de alternerende stapgenerator en de krimpgenerator.

De stop-and-go generator (Beth en Piper, 1984) bestaat uit twee LFSR's. Eén LFSR wordt geklokt als de uitgang van een seconde een "1" is, anders herhaalt hij zijn vorige uitgang. Deze uitgang wordt dan (in sommige versies) gecombineerd met de uitgang van een derde LFSR geklokt met een normale snelheid.

De krimpgenerator maakt gebruik van een andere techniek. Er worden twee LFSR's gebruikt, die beide regelmatig op de volgende manier worden geklokt:

  1. Als de uitgang van de eerste LFSR "1" is, wordt de uitgang van de tweede LFSR de uitgang van de generator.
  2. Als de uitgang van de eerste LFSR "0" is, wordt de uitgang van de tweede weggegooid, en wordt er geen bit door de generator geproduceerd.

Deze techniek heeft te lijden onder tijdsaanvallen op de tweede generator, omdat de snelheid van de uitgang variabel is op een manier die afhankelijk is van de toestand van de tweede generator. Dit kan worden verbeterd door de uitgang te bufferen.

Filtergenerator

Een andere aanpak om de veiligheid van een LFSR te verbeteren is om de hele toestand van een enkele LFSR door te geven aan een niet-lineaire filterfunctie.

Andere ontwerpen

In plaats van een lineaire aandrijving kan men gebruik maken van een niet-lineaire updatefunctie. Zo hebben Klimov en Shamir bijvoorbeeld driehoekige functies (T-Functies) voorgesteld met een enkele cyclus op n bit woorden.

Beveiliging

Om veilig te zijn, moet de periode van de keystream (het aantal cijfers dat wordt uitgevoerd voordat de stroom zich herhaalt) groot genoeg zijn. Als de sequentie zich herhaalt, dan kunnen de overlappende cijferteksten "in de diepte" tegen elkaar worden uitgelijnd, en er zijn technieken die het mogelijk maken om de klaartekstvormende cijferteksten die met deze methoden worden gegenereerd, te extraheren.

Gebruik

Stroomcijfers worden vaak gebruikt in toepassingen waarbij de tekst in onbekend formaat wordt geleverd, zoals bij beveiligde draadloze verbindingen. Als een blokcodering zou worden gebruikt in dit soort toepassingen, zou de ontwerper moeten kiezen voor de efficiëntie van de transmissie of de complexiteit van de implementatie, aangezien blokcoderingen niet direct kunnen werken op blokken die korter zijn dan hun blokgrootte. Als een 128-bits blokcodering bijvoorbeeld afzonderlijke 32-bits uitbarstingen van platte tekst ontvangt, moet driekwart van de verzonden gegevens worden opgevuld. Blokcijfers moeten worden gebruikt in de modus voor het stelen van cijfertekst of de modus voor het afsluiten van een restblok om opvulling te voorkomen, terwijl streamcijfers dit probleem elimineren door te werken op de kleinste verzonden eenheid (meestal bytes).

Een ander voordeel van stream-cijfers in militaire cryptografie is dat de codeerstroom kan worden gegenereerd door een versleutelingsapparaat dat onderworpen is aan strikte veiligheidsmaatregelen en vervolgens wordt gevoed aan andere apparaten, bijvoorbeeld een radioset, die de xor-bewerking als onderdeel van hun functie zullen uitvoeren. Het andere apparaat kan worden ontworpen voor gebruik in minder veilige omgevingen.

RC4 is de meest gebruikte stroomvercijfering in software; anderen zijn dat ook: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 en WAKE.

RC4 is een van de meest gebruikte stroomcoderingsontwerpen.Zoom
RC4 is een van de meest gebruikte stroomcoderingsontwerpen.

Vergelijking van Stream Cijfers

StreamCipher

CreationDate

Snelheid
(cycli/byte)

(beetjes)

Aanval

Effectief
Sleutel-lengte

Initialisatievector

InternalState

Best bekend

Computationele complexiteit

A5/1

1989

Stem (Wphone)

54

114

64

Actieve KPA OR
KPA Tijdherinnering Tradeoff

~2 seconden OR239.91

A5/2

1989

Stem (Wphone)

54

114

64?

Actief

4,6 milliseconden

FISH

1993

Vrij snel (Wsoft)

Enorme

?

?

Bekendheid van de aanval

211

Korrel

Voor 2004

Snelle

80

64

160

Key-Derivatie

243

HC-256

Voor 2004

4 (WP4)

256

256

65536

?

?

ISAAC

1996

2.375 (W64-bit) -4
.6875
(W32-bit)

8-8288 meestal
40-256

N.V.T.

8288

(2006) Eerste-ronde-zwake-interne-staat-afwijking

4.67×101240 (2001)

MUGI

1998-2002

?

128

128

1216

N.V.T. (2002)

~282

PANAMA

1998

2

256

128?

1216?

Hash Collisions (2001)

282

Phelix

Voor 2004

tot 8 (Wx86)

256 + een 128-bits Nonce

128?

?

Verschil (2006)

237

Snoek

1994

0.9 x FISH (Wsoft)

Enorme

?

?

N.V.T. (2004)

N.V.T. (2004)

Py

Voor 2004

2.6

8-2048?
Meestal 40-256?

64

8320

Cryptanalytische theorie (2006)

275

Konijn

2003-februari

3.7 (WP3)-9.7 (WARM7)

128

64

512

N.V.T. (2006)

N.V.T. (2006)

RC4

1987

Indrukwekkend

8-2048 meestal
40-256

8

2064

Shamir Initial-Bytes Key-Derivation OR KPA

213 OR 233

Salsa20

Voor 2004

4,24 (WG4) -11
,84
(WP4)

128 + een 64-bits Nonce

512

512 + 384 (sleutel+IV+index)

Verschil (2005)

N.V.T. (2005)

Schreeuw

2002

4 - 5 (Wsoft)

128 + een 128-bits Nonce

32?

64-bits ronde functie

?

?

SEAL

1997

Zeer snel (W32-bit)

?

32?

?

?

?

NIEUW

Pre-2003

Zeer goed (W32-bit)

128 OR 256

32

?

?

?

SOBER-128

2003

?

tot 128

?

?

Berichtensmeedkunst

2−6

SOSEMANUK

Voor 2004

Zeer goed (W32-bit)

128

128

?

?

?

Trivium

Voor 2004

4 (Wx86) - 8 (WLG)

80

80

288

Brute kracht aanval (2006)

2135

Turing

2000-2003

5,5 (Wx86)

?

160

?

?

?

VEST

2005

42 (WASIC) -64 (WFPGA)

Variabel
80-256

Variabel
80-256

256 - 800

N.V.T. (2006)

N.V.T. (2006)

WAKE

1993

Snelle

?

?

8192

CPA & CCA

Kwetsbare

StreamCipher

CreationDate

Snelheid
(cycli/byte)

(beetjes)

Aanval

Effectief
Sleutel-lengte

Initialisatievector

InternalState

Best bekend

Computationele complexiteit

Gerelateerde pagina's

  • eSTREAM

Vragen en antwoorden

V: Wat is een streamcipher?


A: Een streamcipher is een symmetrisch sleutelcijfer waarbij klare tekstbits worden gecombineerd met een pseudorandom cipher bit stream (keystream) met behulp van een exclusive-or (xor) operatie.

V: Wat is het verschil met blokcijfers?


A: Streamcijfers worden doorgaans met een hogere snelheid uitgevoerd dan blokcijfers en vereisen minder hardware. Blokcijfers werken op grote blokken van vaste lengte, terwijl streamcijfers cijfers één voor één versleutelen en de transformatie van opeenvolgende cijfers varieert tijdens de versleuteling.

V: Welk type sleutels worden gebruikt?


A: Streamcijfers maken gebruik van veel kleinere en handigere cryptografische sleutels, bijvoorbeeld sleutels van 128 bits.

V: Hoe wordt de sleutelstroom gegenereerd?


A: De keystream wordt gegenereerd op basis van de gebruikte cryptografische sleutel, op dezelfde manier als het one-time pad-coderingsalgoritme. Omdat de sleutelstroom echter pseudo-willekeurig is en niet echt willekeurig, kan de beveiliging van het one-time pad niet worden toegepast.

V: Waarom mag u nooit twee keer dezelfde begintoestand gebruiken?


A: Twee keer dezelfde begintoestand gebruiken kan leiden tot ernstige veiligheidsproblemen omdat het voor aanvallers gemakkelijker wordt om gegevens te decoderen zonder dat zij uw cryptografische sleutel kennen of er toegang toe hebben.

V: Zijn er risico's verbonden aan het gebruik van stream ciphers?


A: Ja, indien verkeerd gebruikt of zonder de juiste voorzorgsmaatregelen te nemen, zijn er risico's verbonden aan het gebruik van stream ciphers, aangezien ze volledig onveilig kunnen zijn indien er niet goed mee wordt omgegaan.

AlegsaOnline.com - 2020 / 2023 - License CC3