Wat is een streamcijfer?
Een stroomcodering is een type algoritme dat wordt gebruikt bij gegevenscodering, waarbij de bron die moet worden gecodeerd, wordt verwerkt tegen een willekeurige sleutelreeks. Dit type codering is enigszins flexibel in de zin dat het de codering kan variëren tijdens het verwerken van de tekst. Ze worden soms ook een statuscodering genoemd omdat codering ook afhankelijk is van de huidige status van de bewerking. In tegenstelling tot blokcoders, die 64 bits tegelijk werken, kan een stroomcodering op één bit werken. Om deze reden kan een stroom met hoge snelheden worden verwerkt met zeer weinig verwerkingskracht.
De eerste stroomcodering werd bedacht door Gilbert Vernam in 1917. Vernam hielp later ook bij het maken van een codering die bekend staat als de eenmalige pad, een vorm van stroomcodering die een eenmalige sleutel gebruikt om de gegevens te coderen. In een eenmalige pad heeft de gegenereerde sleutel dezelfde lengte als de gegevens die moeten worden gecodeerd, zijn ze volledig willekeurig en worden ze nooit ergens anders gebruikt, vandaar de naam.
Bij verwerking tegen de te versleutelen gegevens, meestal platte tekst genoemd, is de resulterende cijfertekst onmogelijk te ontsleutelen zonder de sleutel. De eenmalige pad is in de meeste scenario's moeilijk aan te pakken en wordt daarom alleen gebruikt voor zeer exclusieve situaties. Toch wordt een stroomcodering meestal als nuttig beschouwd, dus werden de sleutels ingekort en pseudo-willekeurig gemaakt, wat betekent dat ze statistisch willekeurig zijn, maar in werkelijkheid niet.
Streamcodering heeft de mogelijkheid om direct te coderen. Op deze manier is het zelfs eenvoudig om eenvoudige stroomcoders uit te voeren door mensen op pen en papier, terwijl een blokcodering meestal het gebruik van een computer vereist om te verwerken. De platte tekst stroomt door het coderingsproces samen met de sleutelstroom, de pseudo-willekeurige reeks waaruit de sleutel bestaat, waar deze wordt geconverteerd en aan de andere kant uitkomt als cijfertekst.
Meestal gebeurt deze codering via een exclusieve of (XOR) bewerking op de afzonderlijke bits als deze door de codering gaan. Een eenvoudige XOR-codering gebruikt een type logische disjunctie als basis, die in wezen zegt dat het resultaat waar kan zijn als een operand waar is, maar niet beide. Als bijvoorbeeld een bit dat door het coderingsproces beweegt een nul of een is en het gepaarde keystream-bit niet overeenkomt, is de resulterende uitvoer een. Als het bit en het gepaarde keystream-bit wel overeenkomen, waarbij beide een nul zijn, of beide een nul zijn, is het resultaat een nul. De gecodeerde stroom van enen en nullen worden vervolgens aan de andere kant van de overdracht gedecodeerd met dezelfde sleutelstroom om de bits weer in hun oorspronkelijke platte tekst om te zetten.
Er zijn twee soorten streamcodering. Met behulp van een synchrone methode wordt de keystream gescheiden van de platte tekst of de gecodeerde tekst gemaakt en vervolgens samengevoegd om de codering of decodering te bieden. Met deze methode moeten zowel de verzendende als de ontvangende uiteinden van de verzending gesynchroniseerd blijven waar ze op dezelfde sleutel en dezelfde positie in de sleutel werken. Als er zich een probleem voordoet, moet de decodering opnieuw beginnen of kunnen er met tussenpozen vlaggen in de cijfertekst worden geplaatst die nieuwe startpunten aangeven. Een zelfsynchroniserend cijfer zal daarentegen de sleutelstroom bijwerken op basis van een aantal eerdere cijfers in de cijfertekst.
Een van de meest gebruikte stroomcodering, RC4 genaamd, is gemaakt door RSA Data Security®. Het is gelicentieerd voor en wordt gebruikt in een aantal softwareproducten, evenals het Secure Socket Layer (SSL) -protocol dat wordt gebruikt in beveiligde internetcommunicatie en de WEP-codering (wired equivalent privacy) die wordt gebruikt met draadloze apparaten. Een ander vaak gebruikt cijfer staat bekend als ORYX, dat is gebruikt in datatransmissies van mobiele telefoons die moeten worden gecodeerd. IBM® heeft ook een stroomversleutelingsmethode ontwikkeld die bekend staat als SEAL, die is gebruikt in codering van de harde schijf.