Voordelen en nadelen van Stream versus Block Ciphers

Versleutelingsalgoritmen zoals Blowfish, AES, RC4, DES en Seal zijn geïmplementeerd in een van de twee categorieën van cijfers. Wat zijn de voor- / nadelen van het type cijfers?

Antwoord

Hoewel beide symmetrische cijfers zijn, zijn stroomcijfers gebaseerd op het genereren van een oneindige cryptografische sleutelstroom en die gebruiken om één bit of byte tegelijk te versleutelen (vergelijkbaar met de eenmalige pad), terwijl blokcijfers werken op grotere brokken gegevens (dwz blokken) per keer, vaak door blokken te combineren voor extra beveiliging (bijv. AES in CBC-modus).

  • Streamcijfers zijn doorgaans sneller dan blokcijfers, maar dat heeft zijn eigen prijs.
  • Blokcijfers vereisen doorgaans meer geheugen, omdat ze werken met grotere hoeveelheden gegevens en hebben vaak “carry-over” van eerdere blokken, terwijl stroomcijfers slechts op een paar bits tegelijk werken, ze relatief weinig geheugen nodig hebben (en daarom goedkoper te implementeren zijn in beperkte scenarios zoals embedded apparaten, firmware en vooral hardware) .
  • Stroomcijfers zijn moeilijker correct te implementeren en vatbaar voor zwakke punten op basis van gebruik – aangezien de principes vergelijkbaar zijn met one-time pad, heeft de keystream zeer strikte vereisten. Aan de andere kant, dat ” s meestal het lastige deel, en kan worden overgebracht naar bv een externe doos.
  • Omdat blokcijfers een heel blok tegelijk versleutelen (en bovendien “feedback” -modi hebben die het meest worden aanbevolen), zijn ze gevoeliger voor ruis tijdens de verzending, dat wil zeggen als je een deel van de gegevens, al de rest kan waarschijnlijk niet worden hersteld. Terwijl met stroomcijfers bytes afzonderlijk worden gecodeerd zonder verbinding met andere brokken gegevens (in de meeste cijfers / modi), en vaak ondersteuning bieden voor onderbrekingen op de lijn.
  • Bovendien bieden stroomcijfers geen integriteitsbescherming of authenticatie, terwijl sommige blokcijfers (afhankelijk van de modus) naast vertrouwelijkheid ook integriteitsbescherming kunnen bieden.
  • Vanwege al het bovenstaande zijn stroomcijfers meestal het beste voor gevallen waarin de hoeveelheid gegevens ofwel onbekend of continu is, zoals netwerkstreams. Blokcijfers, aan de andere kant, of nuttiger wanneer de hoeveelheid gegevens vooraf bekend is – zoals een bestand, gegevensvelden of verzoek- / antwoordprotocollen, zoals HTTP waarvan de lengte van het totale bericht al bekend is bij de begin.

Opmerkingen

  • Het 2e bolletje is niet nauwkeurig. Het verschil in geheugen als gevolg van ” overdracht ” van eerdere blokken is verwaarloosbaar en veel kleiner dan het verschil in geheugen van algoritme tot algoritme ( vergelijk bijvoorbeeld RC4, met zijn 256 bytes interne status, met AES, met 0 bytes interne status in sommige implementaties). Het laatste bolletje trekt een vals onderscheid en is een slecht advies.
  • @ D.W. Het tweede opsommingsteken was ” in het algemeen “, zoals meestal het geval is (maar ik accepteer dat het niet strikt nauwkeurig is).
  • @DW heb je een basis voor je commentaar op de laatste bullet? Waar is het valse onderscheid, en waarom zegt u dat dit een slecht advies is?
  • ja, ik heb een basis voor mijn opmerking over het laatste punt. Het lijkt gewoon over de hele linie verward. Blokcijfers zijn prima voor het streamen van gegevens; zie bijvoorbeeld CBC-modus, CTR-modus, enz., voor verschillende bedieningsmodi die goed werken met streaminggegevens. Blokcijfers zijn niet beperkt tot gevallen waarin de hoeveelheid gegevens van tevoren bekend is. Ik ‘ ben me niet bewust van enige reden om streamcijfers beter te beschouwen dan blokcijfers voor het streamen van gegevens (ondanks de naam).
  • D.W. is correct: het woord ‘ Stream ‘ in Stream Cipher geeft aan dat er een sleutelstroom is – een stroom bits die wordt gecombineerd met platte tekst naar produceer de cijfertekst. Het weerspiegelt niet de compositie in leesbare tekst. Dit is duidelijk een detail dat ontwikkelaars en ingenieurs vaak in verwarring brengt met wie dit laatste meestal wordt geïmpliceerd. Blokcijfers kunnen worden gebruikt om streaming platte tekst prima te manipuleren. Ook vaak verwarrend is dat blokcijfers kunnen worden gebruikt als een stroomcijfer met een geschikte werkingsmodus en wanneer de blokgrootte atomair is (bijv. 1 byte).

Antwoord

Een blokcijfer is een veelzijdig algoritme dat een sleutel implementeert afhankelijke permutatie van waarden die reeksen zijn van een vast aantal bits (“blokken” genoemd). Het kan worden gebruikt voor verschillende rollen in vele soorten cryptografische protocollen. Een van die functies is bulkversleuteling van lange gegevensstromen; om zoiets te bereiken, moet de blokcodering worden gebruikt met een geschikte werkingsmodus (ook bekend als “kettingmodus”), de traditionele is CBC, en de trendy nieuwere modus is CTR.

Een stroomcijfer is een gespecialiseerd algoritme voor bulkversleuteling van lange gegevensstromen. Het idee is dat, door de veelzijdigheid van het blokcijfer te verspelen, het mogelijk zou zijn om een efficiënter algoritme te creëren (dwz iets dat gegevens sneller versleutelt).

Beide blokcijfers met een stroomgeoriënteerde versleutelingsmodus en stroomcijfers, kunnen beveiligingsproblemen tegenkomen als dezelfde sleutel twee keer wordt gebruikt, voor twee verschillende stromen, zonder een geschikte, uniek / willekeurig genoeg Initialisatie Vector . Voor CBC-codering moet de IV voor elk nieuw bericht een nieuwe uniform willekeurige reeks bits zijn, van dezelfde grootte als een blok. Goede stroomcijfers accepteren ook een IV. Een traditioneel stroomcijfer met de naam RC4 is IV-loos (de specificatie geeft niet aan waar en hoe een infuus kan worden ingevoegd), wat tot veel chaos leidde en een slechte naam voor het concept van streamcijfers.

Voor nieuwere, veiligere (en snellere) streamcijfers, zie de eSTREAM-portfolio . Deze algoritmen zijn door veel cryptografen grondig geanalyseerd en worden als “redelijk veilig” beschouwd.

Een stroomcijfer kan worden omgezet in een Pseudorandom Number Generator door een lange reeks bytes met waarde nul te versleutelen. Eigenlijk werken veel (maar niet alle) stroomcijfers intern door een PRNG te zijn en een lange reeks sleutelafhankelijke pseudo-willekeurige bytes te genereren, die vervolgens worden gecombineerd (door bitsgewijze XOR) met de gegevens die moeten worden gecodeerd (of gedecodeerd), dus het versleutelen van nul bytes is dan gelijk aan het helemaal weglaten van de XOR. Daarom worden streamcijfers vaak gebruikt als aangepaste PRNG.

Opmerkingen

  • Je vergat te vermelden welke over het algemeen veiliger is (stream versus blok).
  • Ik vergat het niet, omdat de bewering geen algemene zin heeft. Zowel blokcijfers als stroomcijfers kunnen voldoende beveiliging bieden, als ze correct worden toegepast en geen ‘ structurele zwakheden hebben.
  • ” de veelzijdigheid van het blokcijfer ” Ik heb problemen met dit onderdeel. Wat maakt een blokcijfer inherent veelzijdiger? Blokcijfers kunnen worden gebruikt om beide streams (bijv.TLS) of pakketgegevens (bijv.ESP) te versleutelen en te authenticeren en hetzelfde voor stroomcijfers (bijv.TLS of DTLS). Er zijn gevallen waarin een stroomcijfer meer ” natuurlijk ” lijkt (bijv. Audio versleutelen) of een blokcijfer meer ” natuurlijk ” (bijv. Versleutelde schijven) maar ik zie ‘ niet veel hiaten in redelijke applicaties voor beide.

Answer

Een voordeel van stroomcijfers die niet eerder zijn genoemd, is dat ze niet “t heeft geen opvulling nodig (blokcijfers werken op volledige blokken, dus als je niet genoeg gegevens hebt, moet je op de een of andere manier meer genereren). En verrassing (niet echt, cryptografie is het veld waar Murphy overal is), opvulling kan worden gedaan fout, zoals bijvoorbeeld geïllustreerd in Practical Padding Oracle Attacks .

Ook de beveiliging van blokcijfers hangt grotendeels af van hun manier van werken. zie ECB hier en daar soms nog en het is niet veel beter dan geen crypto a t allemaal.

In principe kun je “niet zeggen dat het een beter is dan het ander, de een moet naar een compleet cryptosysteem kijken om een veiligheidsoordeel te vellen.

Opmerkingen

  • op je eerste paragraaf: er zijn modi voor blokcijfers die geen ‘ opvulling nodig hebben, ofwel: bijv. CTR-modus. Dit is dus geen voordeel dat uniek is voor het streamen van cijfers. Maar +1 aan je laatste alinea – goed gezegd!
  • Nou ik ‘ zou zeggen dat CTR en OFB constructies zijn om een stroomcijfer te maken van een blokcijfer. Dat ‘ ook geweldig is met blokcijfers, ze kunnen gemakkelijk worden gebruikt als bouwstenen voor andere dingen, of het nu stroomcijfers zijn of eenzijdige hashes. Streamcijfers zijn niet zo veelzijdig.
  • Je vergat te vermelden welke over het algemeen veiliger is (stream versus blok).
  • Geen enkele is van nature veiliger, het is ‘ s echt hoe u ze gebruikt.

Answer

Stream Ciphers versleutelt de gegevens in platte tekst met een willekeurige bitstroom (meestal met een XOR omdat deze gemakkelijk kan worden teruggedraaid). Als u 128-bits gegevens hebt, gebruikt u een 128-bits psedurandom-strem (uw sleutel) om te versleutelen.

Block Ciphers crypteert de platte tekstgegevens blok voor blok met dezelfde transformatie (op basis van de sleutel ).Dus je hebt je 128-bits gegevens, het cijfer breekt het in blokken (zoals 4 blokken van 32 bits) en past dezelfde transformatie toe op elk blok om 4 gecodeerde blokken te verkrijgen, die gecombineerd het uiteindelijke cryptogram vormen.

Of Hierdoor zijn Block Cyphers natuurlijk veiliger, maar duur in het gebruik in termen van hardware-complexiteit. Streamcodes zijn sneller en ‘goedkoop’, maar ze kunnen gevoelig zijn voor beveiligingsproblemen als ze onjuist zijn geïmplementeerd.

Opmerkingen

  • De laatste alinea bevat een aantal feitelijke fouten. Blokcijfers zijn over het algemeen niet veiliger en ook niet per se slechter in hardware. Streamcijfers zijn niet per se sneller of goedkoper.
  • @DW: niettegenstaande zijn streamcijfers meestal sneller of goedkoper dan blokcijfers, omdat ‘ div is de deal: een minder veelzijdig algoritme dat wordt ingeruild voor betere prestaties. Een streamcode die toevallig langzamer en duurder is dan AES / CTR, wordt gewoon helemaal niet gebruikt.
  • Je vergat te vermelden welke over het algemeen veiliger is (stream versus block).

Antwoord

Gegevens (de dingen die moeten worden versleuteld) komen meestal in streams. Om het te versleutelen, hebben we een stroomcijfer nodig, dat wil zeggen een versleutelingsalgoritme dat geschikt is voor gebruik op een gegevensstroom. Een stream is een reeks bits (of bytes) van willekeurige, variërende of niet-gespecificeerde lengte.

De beste cijfers die we tot nu toe hebben uitgevonden, zijn meestal blokcijfers. Een blokcijfer is in staat een enkel gegevensblok met een vaste grootte te versleutelen; en, door het bewijs om ons heen, is het blijkbaar gemakkelijker om goede blokcijfers te bouwen dan stroomcijfers.

Maar goed nieuws. Door een bepaald blokcijfer in bepaalde patronen te gebruiken (een “werkingsmodus”), en met behulp van bepaalde opvulstrategieën, kunnen we elk blokcijfer omzetten in een stroomcijfer! Dat betekent dat we de betere cijfers, die blokcijfers zijn, kunnen gebruiken om alle gegevens te versleutelen, waarvan het merendeel in streams komt.

Opmerkingen

  • de tweede zin lijkt misleidend. U kunt streaminggegevens versleutelen met een blokcijfer, door een aantal standaard werkwijzen te gebruiken: bijvoorbeeld CBC-modus, CTR-modus, enz. AES-CBC is nog steeds een blokcijfer. In feite ondersteunt bijna elke standaardmodus voor blokcijfers al streaminggegevens. Bovendien is een blokcijfer niet veilig zonder een bedieningsmodus, dus het ‘ is niet zoals een bedieningsmodus iets optioneels dat je alleen nodig hebt als je streaminggegevens wilt versleutelen .

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *