2010-08-09 4 views
6

Ich muss Daten von meiner iPhone-Anwendung zu meinem Webserver und zurück senden. Um dies sicher zu tun, verwende ich einen Verschlüsselungsalgorithmus. Es erfordert einen Schlüssel, der sowohl dem Server als auch dem Benutzer bekannt sein muss, damit die Entschlüsselung stattfinden kann. Ich dachte daran, nur eine einfache statische Zeichenfolge in meiner App und auf dem Server als Schlüssel zu verwenden, aber dann erinnerte ich mich, dass kompilierter Code immer noch zerlegt und angesehen werden kann, aber nur bis zu einem gewissen Grad.Kann eine "geheime" Zeichenfolge in einer kompilierten Obj-C-App gefunden werden?

Also, wie sicher wäre ich, wenn ich die Verschlüsselungsmethoden und die "geheime" Zeichenfolge im Quellcode meiner App platziere? Gibt es andere Möglichkeiten, die Kommunikation zwischen einer App und einem Server sicher herzustellen?

Danke.

Antwort

6

Ja, es kann ziemlich leicht gefunden werden. Führen Sie das Programm strings auf Ihrer ausführbaren Datei und Sie werden es wahrscheinlich finden. Außerdem kann alles in Ihrem Programm "gefunden" werden, da es notwendigerweise zum Lesen geöffnet ist.

Verwenden Sie SSL für sichere Verbindungen. Es verwendet asymmetrische Verschlüsselung, was bedeutet, dass der Schlüssel zum Verschlüsseln der Daten nicht derselbe ist, der zum Entschlüsseln benötigt wird. Auf diese Weise können Angreifer, selbst wenn sie Ihren Verschlüsselungsschlüssel finden, diese nicht zum Decodieren verwenden. Alle wichtigen HTTP-Server und Client-Bibliotheken unterstützen HTTPS, und das ist es auch.

+0

Danke, SSL scheint am einfachsten zu implementieren, aber am sichersten Weg, nachdem Sie untersucht haben, wie unsymetrische Algorithmen funktionieren ... – pop850

+0

ist es für einen Hacker möglich, interne Strings zu löschen, wenn eine App läuft? Wenn ja, gibt es eine Möglichkeit, dies zu verhindern? – vinnybad

+0

@vinnybad, ist es generell möglich, den gesamten Speicher eines Programms zu löschen und zu scannen, und keine sichere Möglichkeit, dies zu verhindern. – zneak

4

Welchen "gewissen Umfang" glaubst du genau? Jede Anweisung und jedes Datenelement, das in Ihrer Anwendung enthalten ist, kann geöffnet werden. Außerdem ist die Verwendung des gleichen Schlüssels für jedes Gerät der ultimative kryptographische Irrsinn.

Verwenden Sie einfach HTTPS. SSL/TLS ist eine sichere, bewährte Technologie, die in jeden größeren HTTP-Server und jede größere HTTP-Client-Bibliothek integriert ist.

2

Sie verwenden einen symmetrischen Algorithmus. Vielleicht sollten Sie eine unsymmetrische Methode wählen, wenn Sie eine hohe Sicherheit benötigen. Auf diese Weise können Sie sogar die Schlüssel bei jeder Sitzung neu erstellen und müssen nur den öffentlichen Schlüssel austauschen.

Hier einige Beispiele:

  • RSA
  • Diffie-Hellman
  • ElGamal
  • ECDSA
  • XTR
0

Wie andere gesagt haben, was Sie vorschlagen, ist völlig unsicher. Wenn sich jemand für Ihre App interessiert, wird der geheime Schlüssel innerhalb von 10 Minuten nach seiner Veröffentlichung im Internet veröffentlicht.

Dinge, die Sie für die Forschung benötigen, sind:

  1. Asymmetrisches Verschlüsselungsalgorithmen
  2. Diffie-Hellman-Schlüsselaustausch

(Hinweis - ich sage diejenigen, die nicht die Lösung für Ihr Problem sind, aber lernen über sie wird dich in den beteiligten Fragen erziehen und dich besser darauf vorbereiten, eine Lösung zu wählen)

Auf eine zusätzliche Anmerkung, warum können Sie nicht einfach eine verwenden HTTPS-Verbindung?

Schließlich, wenn dieses Verschlüsselungsschema kritische Daten schützt, würden Sie wahrscheinlich gut bedient, einen Berater zu engagieren, um Sie zu helfen, da als Neuling auf das Thema, Sie sicher sind, grundlegende Fehler zu machen.

1

iOS verfügt über Keychain Services, um Dinge wie Verschlüsselungsschlüssel sicher und (relativ) einfach zu speichern. Schauen Sie sich Keychain Services Programming an.

Alle Crypto-APIs, die Sie wahrscheinlich benötigen, sind auch in der CommonCrypto-Bibliothek verfügbar, die im libSystem enthalten ist. Kurz gesagt, es gibt keine Notwendigkeit, Abkürzungen zu nehmen, wenn es darum geht, Ihre iOS-Anwendungen zu sichern.