Även om base64-kodning inte har för avsikt att kryptera, är det inte långt hämtat att tro att kodningsprocessen kan tempereras med på något sätt för att skapa en kryptering. Visst är jag inte den första personen som tänker på ett sådant krypteringsförsök med base64-kodning. Därför vill jag fråga vilka typer av base64-krypteringsstrategier som är kända?
Kommentarer
- Som en 6-bitars strömkryptering?
- i allmänhet sker krypteringen innan data körs via Base64
- I ’ har sett base64-krypteringsscheman som använts tidigare, men alla kan vara trivialt den här frågan är meningsfull eftersom människor kanske letar efter algoritmer som denna. Men sunt förnuft betyder förmodligen att vi anger att base64 inte är tänkt som en chiffer och är resultatet av att förvirra kodning med kryptering. Observera att många av oss kommer att anta att förutsättningen för denna fråga är fel: att ett kodningsschema kan användas för kryptering. Detta kan resultera i nedröstningar, även om frågan är åtminstone intressant för många startande kryptografer.
- Kanske tangentiellt relevant: crypto.stackexchange.com/questions/62425/… , crypto.stackexchange.com/questions/5862/… och crypto.stackexchange. com / frågor / 45215 / …
Svar
Detta hämtas från Wiki-post för Base64:
Om du verkligen avsedd att manipulera Base64-kodning för att tillhandahålla kryptering, kan det göras på indexnivån markerad ovan. Du behöver en hemlig nyckel, en nyckelavledningsfunktion skräddarsydd för att skapa en hög entropifrö som sedan startade en pseudo slumpgenerator. Generatorns (6 bitars) utdata skulle sedan XORas med indexet för att ändra kodningen för varje tecken. Och den här tekniken kan vändas för att dechiffrera det krypterade meddelandet.
Du ser att det är allt lite besvärande. Traditionellt skulle du skapa krypteringstexten och sedan koda den. Förutom att beskära en typisk 8-bitars slumpmässig sekvens till 6 bitar är arbetsbelastningen identisk med den traditionella strömkryptering . Egentligen behöver du 33% extra beräkningar, men det är varken här eller där.
Du kanske är den första som har tänkt på denna Base64-variant eftersom ingen verkar vara medveten om liknande beteende. Detta borde dock fungera.
Kommentarer
- Tack för detta intressanta förslag! Egentligen tänkte jag på enkla saker, som att permutera 6-bitars bokstavsförening. Eller introducera en nyckel och ha en bitvis xor-operation på varje bokstav som cyklar genom nyckeln eller liknande.
- @Kagaratsch Jag tror att vi ’ tänker på liknande rader. För att permutera dig ’ kommer du att behöva PRNG-funktionalitet och för att länka en nyckel till en PRNG så behöver du ’ någon form av nyckelavledningsfunktion annars ’ Det kommer att vara en oöverensstämmelse mellan nyckelformatet och det format / tillstånd som krävs för att driva PRNG. Om du helt enkelt permuterar utan en nyckel eller använder din nyckeltecken cykling, är schemat ’ inte särskilt säkert och detta är trots allt krypto.SE 🙂
- @PaulUszak Det tekniska namnet är faktiskt ganska uppenbart så snart du vet det … det ’ heter helt enkelt ” XOR-chiffer ”. 😉 Ändå, notera att frekvensanalys trivialt kommer att bryta den. Samma sak gäller kända klartextattacker. Åh, och för att vara fullständig angående den tekniska namngivningen: när du slänger in en prng, blir en sådan ” XOR-chiffer ” till en ” strömkryptering ”. Men det visste du förmodligen redan, visste du inte ’?
- @PaulUszak Inte säker på varför du säger ” nej ”. Du kan också vara säker på att jag vet vad ” cykling ” betyder. En XOR-chiffer cyklar igenom samma nyckel om och om igen och i samma ordning, precis som du beskriver. Kontrollera ” exempel ” för den wikilänken; det matchar dina beskrivningar 100% …
a bitwise xor operation on each letter cycling through the key
ochCycling round through the key means that the plain text will be XORed with the same sequence over and over, and in the same order.
– att ’ heter ” XOR-chiffer ”. Inget misstag eller språkgap där. - Hur som helst som du justerar base64 så här kan du tänka på (a) definiera en chiffer på byte-strängar och sedan (b) tillämpa standard base64 på dess utdata, mappa ciphertext-byte-strängar till vanlig text. Det finns ’ ingen mening med att slå samman (a) och (b) – det ger ingen säkerhet och komplicerar i onödan beskrivningen av både den underliggande chiffran och den underförstådda standardbasen64.
Svar
Detta är inte meningsfullt. Det finns ingen hemlig nyckel i base64: base64-kodning och avkodning är offentliga funktioner som vem som helst kan utvärdera.
Det enda sättet som base64 är relaterat till kryptografi är att det är bekvämt att koda ciphertext från något kryptosystem, vilket är jämnt fördelat i åtta-bitars strängar, i en begränsad uppsättning US-ASCII som inte kommer att förväxlas eller avvisas i sammanhang som är begränsade till vanlig text, till exempel XML.
Kommentarer
- +1 (… och base64 ger kortare utdata än hex-kodning, varför den utvecklades och varför den ofta används i applikationer.)
- Det gör perfekt sense 🙂 Frågan ställdes som hypotetisk och OP: n letar efter implementeringsmöjligheter. Det finns ’ ingen naturlig lag som kräver att all kryptering måste vara super dooper effektiv. Det måste bara krypteras / dekrypteras. Vet du att människor fortfarande bygger ångmotorer och är väldigt stolta över dem ..?
- @PaulUszak Det är inte ’ t meningsfullt som base64, en offentlig omvandling mellan två likvärdiga representationer av data, är en annan typ av objekt från ett krypteringsschema som innefattar hemligheter som inte är kända för en motståndare. Hur som helst du ändrar gränssnittet och interna delar av base64 för att placera någon typ av nyckel och chiffer i det kan tas med i standard base64-representationstransformationen och någon underliggande chiffer vars säkerhet är irrelevant för base64-delen. Om du skapade en ångdriven Enigma-maskin, skulle du säga att du modifierade konceptet ångkraft till ett krypteringsschema?
- @SqueamishOssifrage Ja.
Svar
Den gyllene regeln för kryptografi bör vara: ”Det är inte för att du inte kan läsa texten att den är krypterad”. Base64 är inte avsedd att användas för att skapa ciphertext och den ska inte användas för det ändamålet.
Krypteringsmetoder är alltid beroende av en hemlighet eller artefakter som säkerställer att endast kommunikationens aktörer kan vända ciphertext. Om det inte gör det, som med Base64, är det inte kryptering.
Base64 är avsett att koda binärt som text med olika fördelar jämfört med andra kodningsscheman. Sekretess hör inte till dessa fördelar.
Svar
Ja, det finns ett intresse av att kryptera uppströmsbas64: det är ekonomin i iterationer. När vi krypterar data och sedan kodar det måste vi göra minst två slingor: en om kryptering av data och den andra om kodning av data som genereras. Genom att kryptera uppströms kan vi reducera till en slinga och därför få betydande prestanda.
@ e-sushi: Det finns faktiskt inte många exempel utom den som bara använder en slinga: php_base64encrypted
Det finns förmodligen andra sätt att göra bättre men det visar att det är möjligt …
Redigera: förlåt, jag är inte särskilt bekant med den här webbplatsen.
Kommentarer
- Kan du ge ett exempel (länk till papper eller något) av ett sådant `intresse för att kryptera uppströms base64`? Jag försökte hitta mer info med min favoritsökmotor , men på något sätt misslyckades jag. En pekare skulle därför vara mycket ungefär eciated.
- Base64-kodning är en strömbar process (dvs. det gör att en dataström kan kodas stegvis då den ’ genereras utan att först behöva läsa allt). Således skulle det vara helt möjligt att få ett konventionellt krypteringsschema att mata utmatningen till en inkrementell base64-kodare utan att behöva ” göra minst två slingor ” över data. Den enda anledningen till att detta inte görs ’ t är oftast det faktum att det för dataströmmar som är tillräckligt långa för att göra det användbart är ’ är vanligtvis mycket effektivare att hoppa över base64-kodning helt och bara sända och / eller lagra dem som rå binär data.