Achtung: Twoja przeglądarka jest przestarzała. Z tego powodu Gunfinder może nie działać poprawnie w niektórych miejscach. Jak najszybciej zaktualizuj przeglądarkę. Dowiedz się więcej!
Gunfinder is also available in other languages.
Gunfinder Magazyn

AES lub ChaCha20 na platformach mobilnych

AES lub ChaCha20 na platformach mobilnych

Moja krótka odpowiedź: Na nowoczesnych iPhone’ach i high-endowych urządzeniach z Androidem najczęściej wybieram AES-GCM. Na starszych, tanich lub mieszanych urządzeniach z Androidem często lepszym wyborem jest ChaCha20-Poly1305. Nie ze względu na „większe bezpieczeństwo”, lecz z powodu prędkości, obciążenia CPU, ciepła i baterii.

Jeśli miałbym sprowadzić temat do prostej zasady, to takiej:

  • AES-GCM pasuje dobrze, gdy jest sprzętowe wsparcie AES.
  • ChaCha20-Poly1305 często lepiej sprawdza się, gdy AES działa tylko w oprogramowaniu.
  • Oba są bezpieczne tylko wtedy, gdy nonce nigdy się nie powtarzają.
  • Dane przetwarzam dopiero po pomyślnej weryfikacji.
  • Dla aplikacji mobilnych na końcu ważniejsze niż spory o algorytm są klasa urządzenia, lokalne przechowywanie, transmisja, Keystore/Keychain i TLS 1.3.

Jeden punkt jest kluczowy: jeśli AES działa bez sprzętowego wsparcia, kosztuje to według artykułu nawet do 10 razy więcej cykli CPU na bajt. Na podstawowych urządzeniach z Androidem ChaCha20 może być około 3× szybszy. Widać to przy uploadach zdjęć, synchronizacji, wiadomościach i cache.

Na co zwracam uwagę:

  • iOS / flagowe Androidy: zwykle AES-GCM
  • Średnia półka / starsze Androidy: często ChaCha20-Poly1305
  • Dane lokalne: wybór według klasy urządzenia
  • Dane API i wiadomości: solidne zarządzanie kluczami i nonce
  • Na wszelki wypadek: Android Keystore, Apple Keychain, 96-bitowy nonce na operację, TLS 1.3, regularna rotacja kluczy

Krótko mówiąc: jeśli tworzę aplikację dla wielu klas Androida, chcę równomiernej wydajności. Jeśli celuję w nowe urządzenia ze sprzętowym AES, AES-GCM jest często moim pierwszym wyborem.

The Modern Cipher Showdown: A Deep Dive into ChaCha20-Poly1305 vs. AES-GCM

Szybkie porównanie

Aspekt AES-GCM ChaCha20-Poly1305
Bezpieczeństwo przy poprawnym użyciu Wysokie Wysokie
Bliskość sprzętu Mocna Niska
Na nowych iPhone’ach / flagowcach Często z przodu Dobrze
Na starych / tanich urządzeniach Android Często słabsza Często z przodu
Obciążenie CPU bez sprzętowego AES Raczej wysokie Raczej niższe
Ciepło / bateria na słabych urządzeniach Może bardziej rosnąć Często bardziej równomierne
Główne ryzyko Nonce powtórzony, dane przed weryfikacją Nonce powtórzony, dane przed weryfikacją
Typowe zastosowania mobilne dane lokalne, backend z naciskiem na AES Wiadomości, uploady, mieszany park Androida

Podsumowuję artykuł tak: Nie „Który algorytm jest lepszy?” jest kluczowym pytaniem, lecz „Na jakim urządzeniu działa moja aplikacja i gdzie są dane?”

AES-GCM vs. ChaCha20-Poly1305: Jak oba sposoby różnią się w aplikacjach mobilnych

Na końcu chodzi o trzy rzeczy: budowę, wykorzystanie sprzętu i błędy przy implementacji. W codziennym użytkowaniu aplikacji mobilnych liczy się przede wszystkim dostępny sprzęt, czas działania w oprogramowaniu i pytanie, co się stanie, gdy coś pójdzie nie tak przy implementacji.

AES-GCM na Android i iOS

AES-GCM to procedura AEAD oparta na AES. Na urządzeniach ze sprzętowym przyspieszeniem działa bardzo szybko. Brak tego wsparcia często znacznie obniża wydajność.

ChaCha20-Poly1305 na Android i iOS

ChaCha20-Poly1305 to procedura AEAD oparta na ChaCha20. Jest zaprojektowana do działania w oprogramowaniu i dlatego często ma przewagę na starszych lub tańszych urządzeniach Android.

Wymagania bezpieczeństwa wspólne dla obu metod

Obie metody mają ten sam newralgiczny punkt: Nonce nigdy nie może być użyty ponownie z tym samym kluczem. Jeśli tak się stanie, bezpieczeństwo obu metod zostaje złamane. W przypadku AES-GCM mogą nawet pojawić się fałszerstwa.

Równie ważne: Odszyfrowane dane mogą być przetwarzane dopiero po pomyślnej autoryzacji. Innymi słowy: najpierw sprawdź, potem dotknij. Inaczej to tak, jakby zamykać drzwi dopiero po wejściu do domu.

Cechy AES-GCM ChaCha20-Poly1305
Typ szyfru Procedura AEAD oparta na AES Procedura AEAD oparta na ChaCha20
Uwierzytelnianie GCM Poly1305
Zaleta praktyczna Bardzo szybki ze sprzętowym przyspieszeniem Korzystny na urządzeniach bez przyspieszenia AES
Typowe ryzyka implementacji Powtórne użycie nonce, przetwarzanie przed uwierzytelnieniem Powtórne użycie nonce, przetwarzanie przed uwierzytelnieniem

Jak to wpływa na tempo i baterię, pokazuje następna sekcja.

Tempo i bateria: Dlaczego klasa urządzenia ma znaczenie

AES-GCM vs. ChaCha20-Poly1305: Mobile Encryption Guide by Device Class

AES-GCM vs. ChaCha20-Poly1305: Mobile Encryption Guide by Device Class

Na urządzeniach mobilnych przede wszystkim klasa urządzenia robi różnicę. AES-GCM mocno korzysta z przyspieszenia sprzętowego, podczas gdy ChaCha20-Poly1305 pozostaje szybki nawet, gdy wszystko działa w oprogramowaniu. Właśnie tu widać różnicę między high-end, średnią klasą a starszymi urządzeniami.

Dla aplikacji z zdjęciami, wiadomościami i aktualizacjami aukcji liczy się jedno: Jak dobrze działają synchronizacja i szyfrowanie na starszych smartfonach? Bo tam opóźnienia, duże obciążenie CPU i szybkie rozładowanie baterii są najszybciej odczuwalne.

Nowoczesne iPhone’y i flagowce Androida

Na aktualnych iPhone’ach i high-endowych urządzeniach Android AES-GCM jest zwykle szybszy. Powód jest prosty: sprzęt wykonuje operacje AES bezpośrednio, osiągając bardzo wysoką przepustowość. Jednocześnie obciążenie CPU, nagrzewanie i zużycie baterii są niskie. To sprawia, że wydajność jest bardziej przewidywalna na różnych urządzeniach Android.

Średnia klasa, starsze i budżetowe urządzenia Android

Wiele starszych lub tanich urządzeń Android bez rozszerzeń kryptograficznych ARMv8 musi wykonywać AES całkowicie w oprogramowaniu. To kosztuje zauważalnie więcej czasu procesora: software’owy AES może zużywać do 10 razy więcej cykli CPU na bajt niż sprzętowo przyspieszony AES. Urządzenie szybciej się nagrzewa, a bateria szybciej się rozładowuje.

ChaCha20-Poly1305 jest zaprojektowany do działania w oprogramowaniu i często wyraźnie wygrywa w takich warunkach. Widać to od razu przy synchronizacji, przesyłaniu zdjęć i szyfrowanych danych lokalnych.

Tabela pokazuje, jak bardzo klasa urządzenia wpływa na szybkość i zużycie baterii.

Platforma Klasa urządzenia Przyspieszenie AES Wydajność Obciążenie CPU Nagrzewanie Zużycie baterii
iOS Nowoczesny iPhone (A14+) Pełne (sprzęt) AES-GCM szybszy* Bardzo niskie Minimalne Znikome
Android Flagowiec Pełne (sprzęt) AES-GCM szybszy* Niskie Minimalne Niskie
Android Średnia klasa (np. seria SD 6) Częściowe / zmienne ChaCha20 często szybszy* Średnie Umiarkowane Umiarkowane
Android Budżetowe / starsze urządzenia Brak (oprogramowanie) ChaCha20 ~3× szybszy* Wysokie Szybkie nagrzewanie Wysokie (przy AES)

Wszystkie dane zależą od benchmarków i różnią się w zależności od SoC i implementacji bibliotek.

Jak poprawnie przeprowadzać benchmarki

Pojedynczy wynik szybkości z aktualnego urządzenia testowego ma w praktyce niewielką wartość. Lepiej testować celowo na starszych urządzeniach, które są nadal aktywnie używane.

Mierz przez 5–10 minut pod obciążeniem:

  • Przepustowość
  • Opóźnienie
  • Energię na bajt

Ważne też: używaj na obu platformach tej samej biblioteki. W przeciwnym razie porównujesz nie algorytmy, lecz różnice w implementacji.

Jak bardzo to wpływa na lokalne dane, obrazy i wywołania API, pokazuje następna część.

Offline storage i przesyłanie danych w aplikacjach marketplace

Dla Gunfinder najważniejsze jest jedno: czy dane są przechowywane lokalnie czy przesyłane? Od tego zależy, gdzie jest ryzyko i która ochrona przynosi więcej korzyści.

Offline storage: bazy danych, cache, szkice oraz dane konta i profilu

Lokalnie przechowywane dane są często niedoceniane. A to właśnie tam leży część problemu. Zapisane wyniki wyszukiwania, zawartość koszyka oraz dane konta i profilu znajdują się bezpośrednio na urządzeniu. Jeśli backup nie jest chroniony lub urządzenie zostało naruszone, te dane mogą stać się dostępne.

W przypadku danych lokalnych najważniejsze jest urządzenie docelowe. Jeśli urządzenie ma akcelerację AES, AES-GCM jest mocnym wyborem. Brak tego wsparcia sprawia, że ChaCha20-Poly1305 często działa wydajniej. Klucz powinien być bezpiecznie przechowywany w Android Keystore lub w Apple Keychain lub Secure Enclave. I jest jeden punkt, którego nie można negocjować: każdy plik potrzebuje własnej 96-bitowej nonce. Powtórne użycie nonce łamie bezpieczeństwo i integralność.

To samo podstawowe zasady obowiązują przy transmisji danych. Tam jednak nacisk kładzie się na inne aspekty: dane użytkownika i logowanie.

Transmisja danych: wywołania API, przesyłanie zdjęć, wiadomości i aktualizacje aukcji

TLS chroni ścieżkę transportu. To jednak nie oznacza automatycznie, że same dane użytkownika są chronione. Jeśli prywatne wiadomości między kupującymi a sprzedającymi lub dane ofert w aukcjach trafiają do logów serwera, bez dodatkowego szyfrowania na poziomie aplikacji są czytelne w postaci jawnej. Właśnie tutaj wchodzą w grę AES-GCM i ChaCha20-Poly1305. Uzupełniają one szyfrowanie transportu jako druga warstwa ochrony.

Kluczowy punkt to więc nie sam algorytm. Decydujące jest, czy dane znajdują się na urządzeniu, czy przesyłane są przez sieć.

Co liczy się bardziej niż wybór szyfru

W przypadku danych lokalnych najważniejsza jest klasa urządzenia. Przy danych API, przesyłaniu i wiadomościach liczy się przede wszystkim dobre zarządzanie kluczami i nonce.

Dla Gunfinder liczy się ostatecznie jedno: dobre zarządzanie kluczami i nonce. Która opcja lepiej sprawdza się na co dzień, pokazuje następna część.

Pomoc w decyzji i podsumowanie dla aplikacji Gunfinder

Dla Gunfinder najważniejsze jest jedno: jakie urządzenie używa aplikacja i jakie dane są przetwarzane? To właśnie od tego w praktyce zależy wybór metody. Poniższa tabela podsumowuje to i przypisuje typowe workflow Gunfinder.

Wymaganie aplikacji Środowisko urządzenia Priorytet Rekomendowany algorytm
Zaszyfrowane szkice iOS / flagowe Androidy Bezpieczeństwo sprzętowe AES-GCM
Buforowane listingi Mieszany park urządzeń Android Spójność wydajności ChaCha20-Poly1305
Dane konta i transakcji Wszystkie platformy Integralność danych AES-GCM
Przesyłanie zdjęć Starsze lub podstawowe urządzenia Android Efektywność baterii ChaCha20-Poly1305
Wiadomości na rynku Mieszany park urządzeń Android Niska latencja ChaCha20-Poly1305
Aktualizacje aukcji Ruch backendowy Istniejąca standaryzacja AES AES-GCM

Dla wszystkich przypadków obowiązuje ta sama podstawowa struktura: bezpieczny magazyn kluczy przez Android Keystore lub Apple Keychain, unikalne nonces dla każdej operacji, TLS 1.3 dla każdej transmisji oraz regularna rotacja kluczy. Bez tych elementów nawet najlepszy algorytm pomaga tylko w połowie.

Kiedy AES-GCM jest lepszym wyborem

AES-GCM dobrze pasuje do nowoczesnych iPhone’ów i flagowych urządzeń z Androidem, jeśli dostępny jest sprzętowy AES i backend już na tym bazuje. Wtedy metoda pokazuje swoje zalety tam, gdzie urządzenia ją bezpośrednio dobrze wspierają.

Kiedy ChaCha20-Poly1305 jest lepszym wyborem

Gdy w grę wchodzą także starsze lub tańsze urządzenia z Androidem, ChaCha20-Poly1305 często jest bardziej niezawodnym wyborem. Powód jest prosty: wydajność na takich urządzeniach zwykle jest bardziej stabilna niż przy programowym AES.

Najważniejsze wnioski

Oba algorytmy są bezpieczne, jeśli są poprawnie używane. Krótko mówiąc: AES-GCM dobrze pasuje do środowisk z dużym wsparciem sprzętowym, ChaCha20-Poly1305 raczej do mieszanych flot Androida.

FAQs

Jak rozpoznać, czy moje urządzenie docelowe ma sprzętowy AES?

Czy twoje urządzenie docelowe ma sprzętowe przyspieszenie AES, zależy od zamontowanego procesora. Wiele nowszych procesorów wspiera AES-NI. To znacznie zwiększa efektywność szyfrowania.

W przypadku urządzeń z Androidem i iOS najlepiej sprawdzić to w specyfikacji technicznej procesora. W smartfonach i tabletach opartych na ARM sprzętowe przyspieszenie operacji kryptograficznych jest często już wbudowane. System operacyjny zwykle korzysta z niego automatycznie.

Co się dzieje przy ponownym użyciu nonce?

Jeśli użyjesz nonce więcej niż raz, obniżasz bezpieczeństwo szyfrowania.

Wtedy atakujący mogą zobaczyć wzorce w zaszyfrowanych danych lub nawet wywnioskować użyty klucz.

To uderza w poufność twoich danych z pełną siłą. Dlatego nonce musi być przy każdej operacji szyfrowania nowa i unikalna.

Czy TLS 1.3 wystarczy bez dodatkowego szyfrowania w aplikacji?

Nie. TLS 1.3 chroni dane w trakcie transmisji. Nie zabezpiecza lokalnie przechowywanych danych aplikacji na urządzeniu.

Jeśli chcesz chronić dane kompleksowo, potrzebujesz dodatkowo szyfrowania lokalnego. Przy wrażliwych transakcjach może być też wskazany AES-256.

Dopiero połączenie bezpiecznej transmisji i szyfrowania lokalnego pomaga także wtedy, gdy pojawią się problemy techniczne lub ktoś nieuprawniony uzyska dostęp do urządzenia końcowego.

Pokrewne wpisy na blogu

Pasujące oferty

Oferty sponsorowane

To może cię również zainteresować

Więcej artykułów na ten temat

Zobacz wszystkie artykuły
Zobacz wszystkie artykuły