Chociaż kodowanie base64 nie ma na celu szyfrowania, nie jest przesadą myślenie, że proces kodowania można w jakiś sposób złagodzić, aby stworzyć szyfrowanie. Z pewnością nie jestem pierwszą osobą, która pomyślała o takiej próbie szyfrowania z wykorzystaniem kodowania base64. Dlatego chciałbym zapytać, jakie rodzaje strategii szyfrowania base64 są znane?
Komentarze
- Jak 6-bitowy szyfr strumieniowy?
- generalnie szyfrowanie ma miejsce przed przepuszczeniem danych przez Base64
- ' widziałem wcześniej stosowane schematy szyfrowania base64, ale wszystkie z nich mogą być trywialne zepsuty. To pytanie ma sens, ponieważ ludzie mogą szukać takich algorytmów. Jednak zdrowy rozsądek prawdopodobnie oznacza, że wskazujemy, że base64 nie jest pomyślany jako szyfr i jest wynikiem mylenia kodowania z szyfrowaniem. Pamiętaj, że wielu z nas założy że założenie tego pytania jest błędne: do szyfrowania można użyć schematu kodowania. Może to skutkować negatywnymi opiniami, nawet jeśli pytanie jest przynajmniej interesujące dla wielu początkujących kryptologów.
- Być może istotnie istotne: crypto.stackexchange.com/questions/62425/… , crypto.stackexchange.com/questions/5862/… i crypto.stackexchange. pl / questions / 45215 / …
Answer
Pochodzi z wpisu Wiki dotyczącego Base64:
Jeśli naprawdę w celu manipulowania kodowaniem Base64 w celu zapewnienia szyfrowania, można to zrobić na poziomie indeksu wyróżnionym powyżej. Potrzebowałbyś tajnego klucza, funkcji wyprowadzania klucza dostosowanej do tworzenia zarodka o wysokiej entropii, który następnie uruchamia generator liczb pseudolosowych. Wyjście generatora (6-bitowe) byłoby następnie poddane XOR-owaniu z indeksem, aby zmienić kodowanie dla każdego znaku. Ta technika może zostać odwrócona, aby odszyfrować zaszyfrowaną wiadomość.
Widzisz, że to wszystko trochę kłopotów. Tradycyjnie „tworzysz zaszyfrowany tekst, a następnie go kodujesz. Oprócz przycinania typowej 8-bitowej losowej sekwencji do 6 bitów, obciążenie jest identyczne z tradycyjnym szyfrowaniem strumieniowym . Właściwie potrzebujesz 33% dodatkowych obliczeń, ale tego nie ma ani tu, ani tam.
Być może jako pierwszy pomyślałeś o tym wariancie Base64, ponieważ wydaje się, że nikt nie jest świadomy podobnego zachowania. To powinno jednak zadziałać.
Komentarze
- Dziękujemy za tę interesującą sugestię! Właściwie miałem na myśli proste rzeczy, takie jak permutacja 6-bitowego skojarzenia tabeli liter. Albo wprowadzić klucz i wykonać bitową operację xor na każdej literze, przechodząc przez klucz lub podobną.
- @Kagaratsch Cóż, myślę, że ' myślimy o podobnych linie. Aby cię permutować ' będziesz potrzebować funkcji PRNG i aby połączyć klucz z PRNG, ' będziesz potrzebować jakiejś funkcji wyprowadzania klucza w przeciwnym razie ' będzie to niezgodność między formatem klucza a formatem / stanem wymaganym do działania PRNG. Jeśli po prostu permutujesz bez klucza lub używasz cyklicznej zmiany znaku klucza, schemat ' nie jest zbyt bezpieczny i jest to w końcu crypto.SE 🙂
- @PaulUszak Ta nazwa techniczna jest właściwie oczywista, gdy tylko ją znasz… ' nazywa się po prostu ” Szyfr XOR „. 😉 Pamiętaj jednak, że analiza częstotliwości w trywialny sposób to złamie. To samo dotyczy znanych ataków tekstem jawnym. Aha, i żeby być kompletnym, jeśli chodzi o nazewnictwo techniczne: kiedy wrzucisz prng, taki ” szyfr XOR ” zamienia się w ” szyfrowanie strumieniowe „. Ale prawdopodobnie już to wiedziałeś, czy nie ' co?
- @PaulUszak Nie wiem, dlaczego mówisz ” nie „. Możesz też mieć pewność, że wiem, co oznacza ” jazda na rowerze „. Szyfr XOR przechodzi przez ten sam klucz w kółko iw tej samej kolejności, tak jak opisujesz. Sprawdź ” przykład ” tego linku wiki; w 100% pasuje do twoich opisów…
a bitwise xor operation on each letter cycling through the key
iCycling round through the key means that the plain text will be XORed with the same sequence over and over, and in the same order.
– to ' nazywa się ” Szyfr XOR „. Nie ma tam błędu ani luki językowej. - Każdy sposób, w jaki dostosujesz base64 w ten sposób, może zostać uwzględniony w (a) zdefiniowaniu szyfru na łańcuchach bajtów, a następnie (b) zastosowaniu standardowego base64 na wyjściu, mapowaniu ciągów bajtów zaszyfrowanego tekstu na zwykły tekst. ' nie ma sensu łączyć (a) i (b) – nie dodaje to żadnych zabezpieczeń i niepotrzebnie komplikuje opis zarówno podstawowego szyfru, jak i domyślnego standardu base64.
Odpowiedź
To nie ma sensu. W base64 nie ma tajnego klucza: kodowanie i dekodowanie base64 to funkcje publiczne, które każdy może ocenić.
Jedynym sposobem, w jaki base64 jest powiązany z kryptografią, jest wygoda kodowania tekstu zaszyfrowanego z jakiegoś systemu kryptograficznego, którym jest równomiernie rozprowadzane w 8-bitowych ciągach, w ograniczonym zestawie US-ASCII, który nie zostanie zmieniony ani odrzucony w kontekstach ograniczonych do zwykłego tekstu, takich jak XML.
Komentarze
- +1 (… a base64 daje krótsze wyniki niż kodowanie szesnastkowe, dlatego zostało opracowane i jest często używane w aplikacjach).
- Doskonale sens 🙂 Pytanie zostało postawione hipotetycznie, a PO szuka możliwości realizacji. ' nie ma naturalnego prawa wymagającego, aby szyfrowanie było super wydajne. Po prostu musi zaszyfrować / odszyfrować. Czy wiesz, że ludzie nadal budują silniki parowe i są z nich bardzo dumni?
- @PaulUszak To nie ' nie ma sensu jako base64, transformacja publiczna pomiędzy dwiema równoważnymi reprezentacjami danych jest inny typ obiektu niż schemat szyfrowania, który obejmuje sekrety nieznane przeciwnikowi. Każdy sposób, w jaki zmodyfikujesz interfejs i elementy wewnętrzne base64, aby umieścić w nim jakiś klucz i szyfr, może zostać uwzględniony w standardowej transformacji reprezentacji base64 i pewnym podstawowym szyfrze, którego bezpieczeństwo nie ma znaczenia dla części base64. Jeśli stworzyłeś maszynę Enigma napędzaną parą, czy powiedziałbyś, że zmodyfikowałeś koncepcję mocy parowej w schemat szyfrowania?
- @SqueamishOssifrage Tak.
Odpowiedź
Złota zasada kryptografii powinna brzmieć: „Nie dlatego, że Ty nie możesz odczytać tekstu, jest to zaszyfrowane”. Base64 nie jest przeznaczony do tworzenia tekstu zaszyfrowanego i nie powinien być używany do tego celu.
Metody szyfrowania zawsze opierają się na tajemnicy lub artefaktach, które zapewniają, że tylko uczestnicy komunikacji mogą odwrócić szyfrogram. Jeśli tak nie jest, jak w przypadku Base64, to nie jest to szyfrowanie.
Base64 jest przeznaczony do kodowania binarnego jako tekstu z różnymi zaletami w porównaniu z innymi schematami kodowania. Prywatność nie jest jedną z tych zalet.
Odpowiedź
Tak, istnieje zainteresowanie szyfrowaniem upstream base64: to ekonomia w iteracjach. Kiedy szyfrujemy dane, a następnie kodujemy je, musimy wykonać co najmniej dwie pętle: jedną na szyfrowaniu danych, a drugą na kodowaniu generowanych danych. Szyfrując w górę strumienia możemy zredukować do pętli, a zatem uzyskać znaczną wydajność.
@ e-sushi: Rzeczywiście, nie ma wielu przykładów poza tym, który używa tylko jednej pętli: php_base64encrypted
Prawdopodobnie są inne sposoby na lepsze, ale to dowodzi, że jest to możliwe …
Edycja: przepraszam, nie znam tej strony zbyt dobrze.
Komentarze
- Czy możesz podać przykład (link do artykułu czy coś) takiego `zainteresowania szyfrowaniem upstream base64`? Próbowałem znaleźć więcej informacji używając mojej ulubionej wyszukiwarki , ale jakoś mi się nie udało, więc wskaźnik byłby dużo w przybliżeniu eciated.
- Kodowanie Base64 jest procesem strumieniowym (tj. pozwala na przyrostowe kodowanie strumienia danych podczas generowania go ', bez konieczności uprzedniego czytania ich wszystkich). W związku z tym byłoby całkowicie możliwe, aby konwencjonalny schemat szyfrowania przekazywał swoje dane wyjściowe do przyrostowego kodera base64 bez konieczności ” tworzenia co najmniej dwóch pętli ” nad danymi. Jedynym powodem, dla którego nie jest to ' często wykonywane, jest prawdopodobnie fakt, że w przypadku strumieni danych wystarczająco długich, aby było to przydatne, ' zwykle znacznie bardziej wydajne jest całkowite pominięcie kodowania base64 i po prostu przesyłanie i / lub przechowywanie ich jako surowych danych binarnych.