Jakie są zwykłe strategie szyfrowania base64?

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:

przykład 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 i Cycling 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *