Secret Key zur Laufzeit unter ios?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Secret Key zur Laufzeit unter ios?

    Hallo
    ist es möglich zur Laufzeit einen eindeutigen Key auszulesen?
    Der Key darf natürlich nicht im Code hinterlegt sein oder von einer anderen App erzeugt werden können.
    Ich dachte an das normale Codesigning aber das kann man scheinbar nicht zur Laufzeit auslesen.
    Ich möchte den Key nutzen um sicherzustellen, dass nur meine App meinen Webservice nutzen kann.
  • Den key wollte ich ja zum verschlüsseln nutzen, denn hätte man mit der A

    gritsch schrieb:

    Erebos1988 schrieb:

    Das würde ja bedeuten, dass ich Hardcode ein Passwort hinterlegen / generieren müsste. Dieses könnte man aber herausbekommen, wenn die app dekompiliert wird.


    so ist es. das bekommt man immer raus. vor allem wenn du die infos an einen server schicken willst.
    Den Key wollte ich ja zum verschlüsseln nutzen, dann hätte man mit der Anfrage nichts anfangen können.
  • Erebos1988 schrieb:

    gritsch schrieb:

    Erebos1988 schrieb:

    Das würde ja bedeuten, dass ich Hardcode ein Passwort hinterlegen / generieren müsste. Dieses könnte man aber herausbekommen, wenn die app dekompiliert wird.


    so ist es. das bekommt man immer raus. vor allem wenn du die infos an einen server schicken willst.
    Den Key wollte ich ja zum verschlüsseln nutzen, dann hätte man mit der Anfrage nichts anfangen können.


    versteh nicht was du meinst.
  • Erebos1988 schrieb:

    Wenn ich mit dem Key die relevanten Daten Verschlüssel und der Angreifer den Key nicht hat, kann er mit der Kommunikation zwischen Client und Server ja nichts anfangen. Der Server kennt den key ebenfalls und entschlüsselt die Daten dann wieder.


    und wie soll der server den key kennen wenn du ihn auf dem gerät jedesmal neu erzeugst?
    außerdem kann jeder angreifer alles lesen ob dus verschlüsseltst oder nicht.
    weil ich schau mir einfach die daten an bevor sie verschlüsselt werden - feddisch ;)
  • Erebos1988 schrieb:

    Hallo
    ist es möglich zur Laufzeit einen eindeutigen Key auszulesen?
    Der Key darf natürlich nicht im Code hinterlegt sein oder von einer anderen App erzeugt werden können.
    Ich dachte an das normale Codesigning aber das kann man scheinbar nicht zur Laufzeit auslesen.
    Ich möchte den Key nutzen um sicherzustellen, dass nur meine App meinen Webservice nutzen kann.


    Die unvermeidbare Frage des Chef-Langeweilers: Was genau willst Du machen?
  • gritsch schrieb:

    Erebos1988 schrieb:

    Wenn ich mit dem Key die relevanten Daten Verschlüssel und der Angreifer den Key nicht hat, kann er mit der Kommunikation zwischen Client und Server ja nichts anfangen. Der Server kennt den key ebenfalls und entschlüsselt die Daten dann wieder.


    und wie soll der server den key kennen wenn du ihn auf dem gerät jedesmal neu erzeugst?
    außerdem kann jeder angreifer alles lesen ob dus verschlüsseltst oder nicht.
    weil ich schau mir einfach die daten an bevor sie verschlüsselt werden - feddisch ;)
    Naja die Idee war eigentlich das ich mir den Key im debug modus ausgeben lasse. Und damit hätte der server ihn gehabt. Der Key sollte ja immer der selber sein.
    Wenn ich das codesigning ausgeben könnte, wäre dies genau das was ich will. Denn dieses ändert sich ja nicht. Aber eine andere App kommt ohne weiteres nicht an diesen Schlüssel ran.
    Um an die Daten zu kommen bevor sie verschlüsselt werden, ist der Aufwand schon recht groß. Ich will nicht die NSA aussperren sondern eher scriptkiddies.

    Momentan ist es so, dass ich mit einem webservice kommuniziere. Und ich will verhindern, dass man den einfach nutzen kann ohne die app zu nutzen.
    Leider kenne ich mich mit Sicherheitskonzepten nicht sonderlich gut aus.
  • Erebos1988 schrieb:


    Leider kenne ich mich mit Sicherheitskonzepten nicht sonderlich gut aus.


    Schade. Einfache Lösung: Passwort-Authorisierung reicht in der Annahme, dass sich für Deine App nicht so viele Leute interessieren. Wenn sich genug Leute interessieren hast du auch das Geld dir jemanden zu leisten der sich damit auskennt:

    kmr schrieb:


    Die unvermeidbare Frage des Chef-Langeweilers: Was genau willst Du machen?
  • Klar, du willst mit der App Geld verdienen. Die Arbeit steckt aber im Server. Wenn den jetzt jeder nutzen kann, dann verdienen andere das Geld für deine Arbeit.

    Machen die? Setze recht primitiv ein Secret in die App. Musst es ja nicht gleich als NSString-Instanz machen, sondern vielleicht aus zweien irgendwie zusammenbauen. Jetzt kommt einer daher und hackt deine App und findet das raus. Er bringt eine App heraus.

    Du änderst die API des Servers.

    Du hast einen Wettbewerber weniger.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:


    Machen die? Setze recht primitiv ein Secret in die App. Musst es ja nicht gleich als NSString-Instanz machen, sondern vielleicht aus zweien irgendwie zusammenbauen. Jetzt kommt einer daher und hackt deine App und findet das raus. Er bringt eine App heraus.

    Du änderst die API des Servers.

    Du hast einen Wettbewerber weniger.


    Ehmt. Für diesen Anwendungsfall ist Pragmatismus ausreichend. Verstecke das Secret sinnvoll und gib' in der Kommunikation mit dem Server irgend ein unbedeutend anmutendes Flag mit. Das Secret kann auch ein Client-Zertifikat sein, dem Du ein vernünftiges Passwort mitgibst. Selbiges natürlich auch sinnvoll im Code verteilen. Über das Flag, das nicht funktionsverhindernd ist, kontrollierst Du auf dem Server, ob die Kommunikation von Deiner App oder von einem Trittbrettfahrer kommt. Bei einer kritischen Anzahl von Requests ohne das Flag änderst Du die API und der Kreislauf fängt von vorne an. Wie der ehemalige und aktuelle Innenminister ja schon sagte: "Irgendwelche Hacker werden immer irgend etwas hacken können.". Für Dich kommt es drauf an, Deine Maßnahme so wirtschaftlich wie möglich zu gestalten. Ein dogmatisches Sicherheitskonzept ist da ebenso wenig hilfreich wie gar kein Schutz.
  • Abgesehen davon, dass ich die Authentifizierung wohl als Challenge-Response machen würde: Wie geheim und wie einmalig ist denn Dein Server-Dienst?

    Vielleicht muss man den ja gar nicht derart abschotten, wenn er auch für andere interessant ist:

    - Lizenzmodell veröffentlichen, sodass andere Entwickler den Dienst auch legal nutzen können und Du davon auch etwas hast (wenn es niemand sonst nutzen soll, können die Preise ja absurd hoch sein)
    - Kein Schlüssel nur für Dich, sondern Lizenzschlüssel
    - Nachsehen, welche Schlüssel genutzt werden
    - Wenn jemand anderes eine Lizenz erwirbt und den Dienst legal nutzt: Glücklich sein, Geld verdienen
    - Wenn jemand anderes einen Lizenzschlüssel illegal nutzt: Legalen Schlüssel wechseln, alten Schlüssel sperren, Rechnung schicken, verklagen. Bedingungen und Preise waren davor klar.
    Multigrad - 360°-Produktfotografie für den Mac