Krypteringsalgoritmer som Blowfish, AES, RC4, DES och Seal implementeras i en av två kategorier av kodningar. Vilka är fördelarna / nackdelarna med typen av chiffer?
Svar
Även om båda är symmetriska chiffer, är strömkodningar baserade på generera en ”oändlig” kryptograpisk nyckelström och använda den för att kryptera en bit eller byte åt gången (liknar engångsblocket), medan blockkodningar fungerar på större bitar av data (dvs. block) åt gången, ofta kombinerar block för ytterligare säkerhet (t.ex. AES i CBC-läge).
- Strömkodare är vanligtvis snabbare än block, men det har sitt eget pris.
- Blockkodare kräver vanligtvis mer minne eftersom de fungerar på större bitar av data och har ofta ”överför” från tidigare block, medan eftersom strömkodare fungerar på bara några bitar åt gången har de relativt låga minneskrav (och därför billigare att implementera i begränsade scenarier som inbäddade enheter, firmware och speciell hårdvara) .
- Strömkodare är svårare att implementera korrekt och benägna att svagheter baserade på användning – eftersom principerna liknar en engångskod har nyckelströmmen mycket strikta krav. Å andra sidan, att ” s vanligtvis den knepiga delen, och kan laddas ner till t.ex. en extern låda.
- Eftersom blockkodare krypterar ett helt block åt gången (och dessutom har ”feedback” -lägen som är mest rekommenderade) är de mer mottagliga för brus vid överföring, det vill säga om du förstör en del av data är allt förmodligen oåtervinnbart. Medan strömkodare bytes krypteras individuellt utan anslutning till andra bitar av data (i de flesta kodningar / lägen), och har ofta stöd för avbrott på linjen.
- Strömkodare ger inte integritetsskydd eller autentisering, medan vissa blockkoder (beroende på läge) kan ge integritetsskydd, utöver konfidentialitet.
- På grund av allt ovan är strömkodningar vanligtvis bäst för fall där datamängden antingen är okänd eller kontinuerlig – till exempel nätverksströmmar. Blockera chiffer, å andra sidan, eller mer användbar när datamängden är förkänd – såsom en fil, datafält eller förfrågnings- / svarsprotokoll, såsom HTTP där längden på det totala meddelandet är känt redan vid början.
Kommentarer
- Den andra punkten är inte korrekt. Skillnaden i minne på grund av ” överföring ” från tidigare block är försumbar och mycket mindre än skillnaden i minne från algoritm till algoritm ( t.ex. jämför RC4 med dess 256 byte internt tillstånd med AES, med 0 byte internt tillstånd i vissa implmeentationer). Den sista punkten drar falska skillnader och är dåligt råd.
- @ D.W. Den andra punkten var ” allmänt sett ”, eftersom det vanligtvis är fallet (men jag accepterar att det inte är strikt noggrant).
- @DW har du någon grund för din kommentar till den sista punkten? Var är den falska skillnaden, och varför säger du att detta är dåligt råd?
- ja, jag har en grund för min kommentar till den sista punkten. Det verkar bara förvirrat över hela linjen. Blockkodare är bra för streaming av data; se t.ex. CBC-läge, CTR-läge etc. för olika driftsätt som fungerar bra med strömmande data. Blockkoder är inte begränsade till fall där mängden data är känd i förväg. Jag ’ är inte medveten om någon anledning att överväga strömkodare bättre än att blockera krypter för strömmande data (trots namnet).
- D.W. är korrekt: Ordet ’ Ström ’ i Stream Cipher återspeglar att det finns en nyckelström – en ström av bitar som kombineras med klartext till producera ciffertexten. Det återspeglar inte kompositionen i klartext. Uppenbarligen är detta en detalj som ofta förvirrar utvecklare och ingenjörer som de senare brukar antydas med. Blockkodare kan användas för att manipulera strömmande klartext bra. Förvirrande är också ofta att blockkodare kan användas som en strömkodning med lämpligt driftsätt och när blockstorleken är atomär (t.ex. 1 byte).
Svar
A blockcipher är en mångsidig algoritm som implementerar en nyckel- beroende permutation av värden som är sekvenser av ett fast antal bitar (kallas ”block”). Den kan användas för olika roller i många typer av kryptografiska protokoll. En sådan roll är masskryptering av långa dataströmmar; för att uppnå en sådan sak, måste blockchiffran användas med ett lämpligt driftsätt (aka ”chaining mode”), den traditionella är CBC, och trendigare nyare läge är CTR.
En streamcipher är en specialiserad algoritm för masskryptering av långa dataströmmar. Tanken är att genom att förlora mångsidigheten hos blockkodningen skulle det vara möjligt att skapa en effektivare algoritm (dvs. något som krypterar data snabbare ).
Båda blockkodningarna med ett strömorienterat krypteringsläge och strömkodare kan stöta på säkerhetsfrågor om samma nyckel används två gånger, för två distinkta strömmar, utan att ha en lämplig, unik / slumpmässig nog Initieringsvektor . För CBC-kryptering måste IV vara en ny enhetligt slumpmässig sekvens av bitar, av samma storlek än ett block, för varje nytt meddelande. Bra streamcifrar accepterar också en IV. En traditionell strömkodning kallad RC4 är IV-mindre (specifikationen anger inte var eller hur en IV kan sättas in), vilket ledde till mycket kaos och gav en dåligt namn på begreppet strömkodare.
För nyare, säkrare (och snabbare) strömkodningar, se eSTREAM-portföljen . Dessa algoritmer har genomgått en noggrann analys av många kryptografer och anses vara ”ganska säkra”.
En strömkodning kan omvandlas till en Pseudorandom Number Generator genom att kryptera en lång sekvens av byte med värdet noll. Egentligen fungerar många (men inte alla) strömkodare internt genom att vara en PRNG, vilket genererar en lång sekvens av nyckelberoende pseudo-slumpmässiga byte, som sedan kombineras (av bitvis XOR) med data för att kryptera (eller dekryptera), så kryptering av nollbyte motsvarar då att XOR helt och hållet utelämnas. Därför används strömkodare ofta som anpassad PRNG.
Kommentarer
- Du glömde att nämna vilket som i allmänhet är säkrare (stream vs block).
- Jag glömde inte, eftersom påståendet inte ger någon allmän mening. Både blockkoder och strömkodare kan ge tillräcklig säkerhet om de tillämpas korrekt och inte ’ t har strukturella svagheter.
- ” mångsidigheten för blockchiffer ” Jag har problem med den här delen. Vad gör en blockkodning till sin natur mer mångsidig? Blockkodare kan användas för att kryptera och autentisera antingen båda strömmarna (t.ex. TLS) eller paketerade data (t.ex. ESP) och samma för strömkrypteringar (t.ex. TLS eller DTLS). Det finns fall där en strömkodning verkar mer ” naturlig ” (t.ex. kryptering av ljud) eller om en blockkodning verkar mer ” naturlig ” (t.ex. krypterande skivor) men jag ser bara ’ inte mycket gap i rimliga applikationer för någon av dem.
Svar
En fördel med strömkodare som inte har nämnts tidigare är att de inte ”t behöver stoppning (blockkoder fungerar på kompletta block, så om du inte har tillräckligt med data måste du generera lite mer på något sätt). Och överraskning (inte riktigt, kryptografi är fältet där Murphy är överallt), vaddering kan göras fel, som exemplifieras till exempel i Praktiska Padding Oracle Attacks .
Säkerheten för blockkodningar beror ganska mycket på deras driftsätt, du fortfarande ser ECB används här och där ibland och det är inte mycket bättre än ingen krypto a t alla.
I grund och botten kan du inte säga att den ena är bättre än den andra, man måste titta på ett komplett kryptosystem för att göra en säkerhetsbedömning.
Kommentarer
- på ditt första stycke: det finns driftlägen för blockkodare som inte ’ inte behöver stoppa, antingen: t.ex. CTR-läge. Så detta är inte en fördel som är unik för strömkodare. Men +1 till ditt sista stycke – väl sagt!
- Tja jag ’ säger CTR och OFB är konstruktioner för att göra en strömkryptering från en blockkodning. Att ’ är en annan bra sak med blockkodningar, de kan lätt användas som byggstenar för andra saker, vare sig det är strömkodningar eller envägs hash. Strömkodare är inte så mångsidiga.
- Du glömde att nämna vilken som i allmänhet är säkrare (ström vs block).
- Ingen är säkrare av naturen, den ’ är verkligen hur du använder dem.
Svar
Strömkodare krypterar klartextdata med en slumpmässig ström av bitar (vanligtvis med en XOR eftersom den lätt kan vändas). Om du har en 128bit-data kommer du att använda en 128-bitars psedurandom-strem (din nyckel) för att kryptera.
Blockera krypter krypterar data i klartext ett block i taget med samma transformation (baserat på nyckeln ).Så du har dina 128 bitars data, chiffrering bryter dem i block (som 4 block med 32 bitar) och tillämpar samma transformation på varje block som får 4 krypterade block, som tillsammans kommer att bilda det slutliga kryptogrammet.
Of naturligtvis på grund av detta Block Cyphers är säkrare men dyra att använda när det gäller hårdvarukomplexitet. Strömkodare är snabbare och ”billiga” men de kan vara känsliga för säkerhetsproblem om de implementeras felaktigt.
Kommentarer
- Det sista stycket har ett antal faktiska fel. Blockkodningar är inte säkrare i allmänhet och inte nödvändigtvis sämre i hårdvara. Strömkodare är inte nödvändigtvis snabbare eller billigare.
- @DW: Trots det är strömkodare vanligtvis snabbare eller billigare än blockkodningar, för att ’ s affären: en mindre mångsidig algoritm som handlas för förbättrad prestanda. En strömkryptering som råkar vara långsammare och dyrare än AES / CTR brukar inte användas alls.
- Du glömde att nämna vilket som i allmänhet är säkrare (stream vs block).
Svar
Data (de saker som ska krypteras) kommer vanligtvis i strömmar. För att kryptera det måste vi använda en strömkryptering, det vill säga en krypteringsalgoritm som är lämplig för användning i en dataström. En ström är en sekvens av bitar (eller byte) med godtycklig, varierande eller ospecificerad längd.
De bästa koderna vi hittills har uppfunnit är vanligtvis blockkodningar. En blockchiffer kan kryptera ett enda block av fast storlek; och enligt bevisen omkring oss är det tydligen lättare att bygga bra blockkodare än strömkodare.
Goda nyheter, dock. Genom att använda en viss blockkodning i vissa specifika mönster (ett ”driftsätt”) och med hjälp av särskilda utfyllnadsstrategier kan vi förvandla alla blockkoder till en strömkodning! Det betyder att vi kan använda de bättre chiffrerna, som är blockchiffrer, för att kryptera alla data, varav de flesta kommer i strömmar.
Kommentarer
- den andra meningen verkar vilseledande. Du kan kryptera strömmande data med hjälp av en blockchiffer genom att använda någon av ett antal standarddriftlägen: t.ex. CBC-läge, CTR-läge etc. AES-CBC är fortfarande en blockkodning. Faktum är att nästan alla vanliga driftsätt för blockkodare redan stöder strömmande data. Dessutom är en blockkodning inte säker utan ett driftsätt, så det ’ är inte som ett driftsläge är något valfritt som du bara behöver när du vill kryptera streamingdata .