Table of Contents
Asymmetrische Verschlüsselung für mobile Apps verstehen
Asymmetrische Verschlüsselung, auch bekannt als Public-Key-Kryptographie, ist ein grundlegender Sicherheitsmechanismus, der zwei mathematisch verwandte, aber unterschiedliche Schlüssel verwendet: einen öffentlichen Schlüssel, der frei geteilt werden kann, und einen privaten Schlüssel, der geheim bleiben muss. In mobilen Anwendungen ermöglicht dieser Ansatz eine sichere Kommunikation ohne die Notwendigkeit, einen geheimen Schlüssel vorab zu teilen, wodurch er ideal für den Schlüsselaustausch, digitale Signaturen und die Authentifizierung von Benutzern oder Servern ist. Im Gegensatz zur symmetrischen Verschlüsselung, die auf einem einzigen gemeinsamen Schlüssel beruht, löst die asymmetrische Verschlüsselung das Problem der anfänglichen Schlüsselverteilung, aber es kommt mit Rechenaufwand, der sorgfältig auf ressourcenbeschränkten mobilen Geräten verwaltet werden muss.
Das Kernprinzip beruht auf der Schwierigkeit bestimmter mathematischer Probleme. Zum Beispiel nutzt RSA die Rechenkomplexität der Faktorisierung großer Prime-Produkte, während Elliptic Curve Cryptography (ECC) auf dem diskreten Logarithmusproblem über elliptische Kurven beruht. Beide bieten starke Sicherheit, aber ECC bietet gleichwertige Sicherheit mit deutlich kleineren Schlüsselgrößen, was besonders für mobile Umgebungen von Vorteil ist, in denen Bandbreite und Speicher begrenzt sind. Diese Kompromisse zu verstehen ist entscheidend, bevor Sie einen Algorithmus für Ihre App auswählen.
Den richtigen Algorithmus für Mobile wählen
RSA: Weit verbreitet, aber ressourcenintensiv
RSA bleibt der am weitesten verbreitete asymmetrische Algorithmus, der in fast jeder kryptographischen Bibliothek verfügbar ist. Seine Stärkeskalen mit Schlüssellänge; ein 2048-Bit-Schlüssel ist das von NIST ab 2025 empfohlene Minimum. RSA-Verschlüsselung und -Entschlüsselung sind jedoch rechnerisch teuer, insbesondere für lange Klartexte. In der Praxis wird RSA selten verwendet, um große Nutzlasten direkt zu verschlüsseln; stattdessen wird es oft mit einer symmetrischen Chiffre (Hybridverschlüsselung) kombiniert.
ECC: Kleinere Schlüssel, schnellere Operationen
Elliptische Kurvenkryptographie (ECC) ist die bevorzugte Wahl für moderne mobile Anwendungen geworden. Ein 256-Bit-ECC-Schlüssel bietet eine vergleichbare Sicherheit wie ein 3072-Bit-RSA-Schlüssel, wodurch die Größe der Zertifikate und übertragenen Daten drastisch reduziert wird. ECC-Operationen sind in der Regel schneller für die Schlüsselgenerierung und -signierung, was ein erheblicher Vorteil für mobile CPUs mit geringem Stromverbrauch ist. Apples iOS und Android bieten beide hardwarebeschleunigtes ECC über die Secure Enclave und Trusted Execution Environment. Die am häufigsten verwendeten Kurven sind P-256 (secp256r1) und X25519 für den Schlüsselaustausch. Verwenden Sie bei der Implementierung von ECC immer gut geprüfte Kurven; vermeiden Sie benutzerdefinierte Kurven, die möglicherweise versteckte Schwächen haben.
Diffie-Hellman und Key Exchange Protocols
Diffie-Hellman (DH) und seine elliptische Kurvenvariante (ECDH) werden nicht direkt zur Verschlüsselung von Daten verwendet, sind aber entscheidend für die Festlegung eines gemeinsamen Geheimnisses über einen unsicheren Kanal. In mobilen Apps wird ECDH häufig als Teil des TLS-Handshakes zur Generierung von Sitzungsschlüsseln eingesetzt. Implementierungen sollten ephemere Schlüssel (ECDHE) verwenden, um eine perfekte Vorwärtsgeheimnis zu gewährleisten. Bibliotheken wie libsodium bieten hochgradige, geprüfte Primitive für den Schlüsselaustausch, die viele Komplexitätsfallen abstrahieren.
Plattformspezifische Implementierungstipps
iOS: Nutzung der sicheren Enklave und CryptoKit
Apple stellt zwei primäre APIs für asymmetrische Kryptographie bereit: das alte Sicherheits-Framework und das moderne CryptoKit-Framework, das in iOS 13 eingeführt wurde. CryptoKit unterstützt Operationen auf hoher Ebene zum Signieren, Verifizieren und zum Schlüsselvertrag unter Verwendung von NIST-Kurven (P-256, P-384, P-512) und Curve25519. Zum Speichern von privaten Schlüsseln verwenden Sie immer die Secure Enclave, wenn verfügbar (auf iPhone 5s und höher). Schlüssel, die in der Secure Enclave gespeichert sind, sind für den Anwendungsprozessor niemals direkt zugänglich; Operationen wie das Signieren werden innerhalb der Enklave durchgeführt und nur das Ergebnis wird zurückgegeben. Verwenden Sie die Funktion mit dem , die auf eingestellt ist. Verwenden Sie den Schlüsselbund für private Schlüssel ohne Hardware-gestützten Schutz, da er möglicherweise weniger widerstandsfähig gegen physische Angriffe ist.
Android: KeyStore und StrongBox
Android bietet den -Anbieter an, der es ermöglicht, app-generierte Schlüssel in einer Hardware-gestützten vertrauenswürdigen Ausführungsumgebung (TEE) oder einem dedizierten Sicherheitschip (StrongBox) zu speichern. Ab Android 9 (API-Level 28) können Sie StrongBox-gestützte Schlüssel mit anfordern. Verwenden Sie mit dem -Anbieter und geben Sie Algorithmen wie oder an. Moderne Android-Geräte mit StrongBox-Unterstützung bieten auch integrierte Unterstützung für ECDSA- und RSA-Sign-/Verifizierungsoperationen, ohne den privaten Schlüssel dem Hauptbetriebssystem auszusetzen. Für den Schlüsselaustausch sollten Sie mit ECDH verwenden, aber beachten Sie, dass auf älteren Geräten ohne Hardwarebeschleunigung die Leistung sinken kann. Testen Sie immer auf einer Reihe von Geräten, um die Benutzerfreundlichkeit zu gewährleisten.
Plattformübergreifende Frameworks
Frameworks wie Flutter, React Native und Xamarin fügen eine weitere Abstraktionsebene hinzu. Für Flutter werden das -Paket oder plattformspezifische Plugins (z. B. in Kombination mit nativer Schlüsselgenerierung empfohlen. React Native-Entwickler können Bibliotheken wie für die Schlüsselverarbeitung verwenden, aber Speicher sollte immer an plattformnative Keychain/KeyStore delegieren. Vermeiden Sie die Implementierung reiner JavaScript-Kryptografieoperationen für sensible Daten, da die JavaScript-Umgebung nicht für Seitenkanal-Widerstand ausgelegt ist.
Secure Key Management: Die Grundlage der asymmetrischen Verschlüsselung
Niemals Hard-Code Private Keys
Die Verwendung von sicheren Plattformen (Keychain auf iOS, Android KeyStore) oder eines Remote Key Management Service (KMS) für die Schlüsselbereitstellung. Für server-authentifizierte Apps sollten ephemere gerätespezifische Schlüssel zum Zeitpunkt der Registrierung ausgegeben werden.
Hardware-gestützter Speicher
Moderne mobile Geräte umfassen dedizierte sichere Hardware wie Apples Secure Enclave und Androids Trusted Execution Environment (TEE) oder StrongBox. Diese Komponenten führen Entschlüsselung und Signierung durch, ohne den privaten Schlüssel dem Hauptanwendungsprozessor auszusetzen. Wenn verfügbar, bevorzugen Sie immer Hardware-gestützte Schlüssel. Wenn Hardware-Unterstützung obligatorisch ist (z. B. für Apps, die Zahlungs- oder Gesundheitsdaten verarbeiten), verwenden Sie auf Android oder auf iOS. Wenn Hardware nicht verfügbar ist, greifen Sie auf softwarebasierten Speicher zurück, der durch Verschlüsselung auf Geräteebene geschützt ist (z. B. Keychain auf iOS mit Accessibility-Attribut, das auf eingestellt ist).
Hauptrotation und -entzug
Asymmetrische Schlüssel sollten eine begrenzte Lebensdauer haben. Schlüsselrotationspolitik implementieren: z. B. alle sechs Monate neue Signierschlüssel generieren und alte ersetzen. Serverseitig eine schwarze Liste führen oder öffentliche Schlüssel-Pinning verwenden, um kompromittierte Schlüssel zu widerrufen. Mobile Apps sollten den Server regelmäßig nach aktualisierten öffentlichen Schlüsseln abfragen und überprüfen, ob sie von einer vertrauenswürdigen Behörde signiert sind. Vermeiden Sie das Zwischenspeichern öffentlicher Schlüssel auf unbestimmte Zeit; aktualisieren Sie sie mit sicheren Netzwerkanrufen.
Backup Überlegungen
Entscheiden Sie beim Sichern von Benutzerdaten, ob private Schlüssel ausgeschlossen werden sollen. Schlüssel, die an ein bestimmtes Gerät gebunden sind (z. B. für lokale Verschlüsselung), sollten nicht mit iCloud oder Google Drive gesichert werden, da dies das Sicherheitsmodell untergräbt. Stellen Sie auf iOS die Zugänglichkeit auf ein, um ein Schlüssel-Backup zu verhindern. Verwenden Sie auf Android und stellen Sie sicher, dass Schlüssel nicht über Backup-Agenten exportiert werden.
Best Practices für sichere Kommunikation
Hybride Verschlüsselung für große Daten
Asymmetrische Verschlüsselung ist für große Nutzlasten ineffizient. Verwenden Sie stattdessen ein Hybridschema: Generieren Sie einen einmaligen symmetrischen Schlüssel (z. B. AES-256-GCM), verschlüsseln Sie die Daten mit diesem Schlüssel und verschlüsseln Sie dann den symmetrischen Schlüssel mit dem öffentlichen Schlüssel des Empfängers. Dieser Ansatz kombiniert die Effizienz der symmetrischen Verschlüsselung mit der sicheren Schlüsselverteilung der asymmetrischen Verschlüsselung. Bibliotheken wie libsodiums oder NaCl bieten Hybrid-Verschlüsselungsprimitive auf hohem Niveau, die automatisch die Schlüsselerzeugung handhaben.
Immer die Vertrauenskette validieren
Wenn Sie öffentliche Schlüssel über einen Server austauschen, validieren Sie, dass der öffentliche Schlüssel dem beabsichtigten Empfänger gehört. Verwenden Sie Zertifikatsketten, die in einer vertrauenswürdigen CA verwurzelt sind, oder implementieren Sie eine Out-of-Band-Verifizierung (z. B. QR-Code-Scannen für Peer-to-Peer-Szenarien). Für die Serverkommunikation erzwingen Sie immer TLS 1.3 mit Zertifikatspinning. Coden Sie den öffentlichen Schlüssel-Fingerprint des Servers fest oder verwenden Sie eine angepinnte Zwischen-CA, um Man-in-the-Middle-Angriffe zu verhindern. iOS bietet mit benutzerdefinierten Vertrauensankern; Android verwendet von OkHttp oder Jetpack Security.
Perfekte Vorwärts-Geheimhaltung (PFS)
In Schlüsselaustauschprotokollen verwenden Sie immer ephemere Schlüssel (ECDHE), so dass die Kompromittierung des langfristigen privaten Schlüssels keine vergangenen Sitzungsschlüssel aussetzt. Diese Eigenschaft, die als perfekte Vorwärtsgeheimnisse bezeichnet wird, stellt sicher, dass ein Angreifer, der später den privaten Schlüssel des Servers erhält, den zuvor aufgezeichneten Datenverkehr nicht entschlüsseln kann. Sowohl iOS als auch Android TLS-Stacks unterstützen standardmäßig ECDHE-Verschlüsselungssuiten; vergewissern Sie sich, dass die Netzwerksicherheitskonfiguration Ihrer App oder die Konfiguration von diese Verschlüsselungen durchsetzt.
Fehler ohne Informationen zu verlieren
Kryptographische Operationen können aufgrund ungültiger Schlüssel, beschädigter Daten oder Timeouts fehlschlagen. Setzen Sie dem Benutzer niemals detaillierte Fehlermeldungen aus oder protokollieren Sie Rohschlüsselmaterial. Wenn die Signaturverifizierung fehlschlägt, zeigen Sie beispielsweise einen generischen "Kommunikationsfehler" anstelle von "ECDSA-Signatur ungültig", der einem Angreifer helfen könnte. Verwenden Sie Zeitkonstantenvergleiche, wenn Sie Signaturen oder MACs überprüfen, um Timing-Angriffe zu verhindern. Vermeiden Sie es, Ihre eigene Vergleichslogik zu rollen; Verwenden Sie Bibliotheksfunktionen wie auf iOS oder auf Android.
Testen und Auditieren Ihrer Implementierung
Unit Tests mit bekannten Testvektoren
Validieren Sie Ihre Verschlüsselungs- und Signierfunktionen mit veröffentlichten Testvektoren von NIST oder RFCs. Testen Sie beispielsweise die RSA-OAEP-Verschlüsselung mit den NIST CAVP Vektoren. Schreiben Sie Unit-Tests, die Edge-Fälle abdecken: Nulllängen-Key-Größen, abgelaufene Schlüssel und große Eingaben. Verwenden Sie einen sicheren Scheinspeicher, um zu überprüfen, ob Schlüssel korrekt gespeichert und abgerufen werden, ohne echte Hardware während CI zu treffen.
Penetrationstest und statische Analyse
Führen Sie regelmäßige Penetrationstests durch, die sich auf die kryptographische Implementierung konzentrieren. Übliche Angriffsvektoren sind Downgrade-Angriffe (erzwingen eine schwächere Chiffre), Seitenkanalleckage (z. B. durch Power-Analyse oder CPU-Cache-Timing) und Padding-Orakel-Angriffe (z. B. auf RSA mit PKCS#1 v1.5) Verwendung statischer Analysetools (z. B. BlackDuck oder MobSF), um Fehlkonfigurationen wie fest codierte Schlüssel, veraltete Bibliotheken oder unsichere Chiffriersuiten zu erkennen.
Regressionstests nach Bibliotheksaktualisierungen
Kryptographische Bibliotheken veröffentlichen häufig Patches für entdeckte Schwachstellen. Nach dem Aktualisieren einer Bibliothek (z. B. OpenSSL, Bouncy Castle, Conscrypt) führen Sie vollständige Regressionstests durch, um sicherzustellen, dass Schlüsselerzeugungs-, Signierungs- und Verschlüsselungsfunktionen weiterhin gültige Ausgaben erzeugen. Achten Sie auf die veralteten Funktionen: Apple hat die FLT:24-Funktion für RSA zugunsten von CryptoKit veraltet; Google hat die älteren FLT:25-Anbieter veraltet. Migration zu unterstützten APIs, um zukünftige Unterbrechungen zu vermeiden.
Häufige Fallstricke und wie man sie vermeidet
Verwendung von unvorhersehbaren Zufallszahlengeneratoren
Alle kryptographischen Operationen hängen von sicheren Zufallszahlen ab. Mobile Apps müssen für iOS und für Android verwenden. Verlassen Sie sich niemals auf oder von , da diese vorhersehbar sind und die Schlüsselgenerierung unterbrechen können. Stellen Sie sicher, dass der Zufallsgenerator durch Hardware-Entropie durch Beratungssystemeigenschaften ausgesät wird.
Unsachgemäße Schlüsselcodierung und Übertragung
Öffentliche Schlüssel müssen in einem Standardformat (z. B. DER oder PEM) codiert sein. Beim Senden öffentlicher Schlüssel über das Netzwerk verwenden Sie die Base64-Kodierung in einem JSON-Feld oder einem Standardcontainer wie JWK (JSON Web Key). Seien Sie vorsichtig mit Zeilenumbrüchen und Fluchten. Auf der Empfangsseite validieren Sie das Schlüsselformat vor dem Import. iOS und Android können Standardkodierungen analysieren; dokumentieren Sie das erwartete Format für die Interoperabilität.
Fehler beim Umgang mit Key Expiration
Schlüssel, die niemals ablaufen, werden zu einem langfristigen Risiko. Implementieren Sie Ablaufüberprüfungen in Ihrer App: Wenn das Erstellungsdatum eines Schlüssels älter als ein Schwellenwert ist (z. B. 90 Tage), fordern Sie den Benutzer auf, sich erneut anzumelden. Auf der Serverseite lehnen Sie abgelaufene Schlüssel ab. Verwenden Sie einen vertrauenswürdigen Zeitstempel oder verlassen Sie sich darauf, dass der Server die aktuelle Zeit über eine sichere API bereitstellt. Vermeiden Sie die Verwendung der lokalen Zeit für die Ablaufvalidierung des Geräts, da Benutzer sie manipulieren können.
Seitenkanalwiderstand vernachlässigen
Mobile Prozessoren sind anfällig für Timing- und Power-Analyse-Angriffe. Verwenden Sie zeitkonstante Implementierungen für alle kryptographischen Operationen. Die meisten Plattform-APIs (z. B. CryptoKit, ) sind vom Design her zeitkonstante, aber wenn Sie eine Bibliothek eines Drittanbieters verwenden, überprüfen Sie dessen Seitenkanalwiderstand. Vermeiden Sie bei benutzerdefinierten Implementierungen die Verzweigung von geheimen Daten und verwenden Sie, wenn möglich, bitweise Operationen.
Schlussfolgerung
Die Implementierung asymmetrischer Verschlüsselung in mobilen Apps ist nicht nur eine Frage des Aufrufs einiger Bibliotheksfunktionen; es erfordert ein tiefes Verständnis der Algorithmusauswahl, des Schlüsselmanagements, plattformspezifischer APIs und Sicherheitstests. Durch die Einhaltung der hier beschriebenen Praktiken - die Wahl von ECC über RSA, wo möglich, die Nutzung von Hardware-gestütztem sicheren Speicher, die Durchsetzung perfekter Vorwärtsgeheimnisse und das rigorose Testen gegen bekannte Vektoren - können Entwickler Anwendungen erstellen, die Benutzerdaten vor einer Vielzahl von Bedrohungen schützen. Das mobile Ökosystem entwickelt sich weiter: Bleiben Sie informiert über neue kryptographische Standards und veraltete Hinweise von Apple und Google. Überprüfen Sie Ihre Codebasis regelmäßig auf veraltete Muster und fördern Sie eine Sicherheitskultur zuerst in Ihrem Team. Mit sorgfältiger Implementierung wird asymmetrische Verschlüsselung zu einem zuverlässigen Schutz für sensible Kommunikation, digitale Signaturen und Authentifizierung in der mobilen Welt.