6
votes

Une chaîne «Secret» dans une application OBJ-C compilée peut-elle être découverte?

J'ai besoin d'envoyer des données de mon application iPhone à mon serveur Web Web et de retour. Pour ce faire correctement, j'utilise un algorithme de cryptage. Il nécessite une clé qui doit être connue à la fois par le serveur et l'utilisateur afin que le décryptage puisse avoir lieu. Je pensais à simplement utiliser une simple chaîne statique dans mon application et sur le serveur comme clé, mais je me suis rappelé que ce code compilé peut toujours être désassemblé et considéré, mais seulement dans une certaine mesure.

Alors, quelle sécurité est-ce que je serais en plaçant les méthodes de cryptage et la chaîne "Secret" dans le code source de mon application? Y a-t-il d'autres moyens d'accomplir la communication entre une application et un serveur de manière sécurisée?

Merci.


0 commentaires

5 Réponses :


4
votes

Quelle "certaine étendue" pensez-vous que c'est exactement? Chaque instruction et chaque morceau de données que votre application contient est ouverte à une possible visualisation. En outre, en utilisant la même clé pour chaque appareil est l'ultime dans la folie cryptographique.

Utilisez simplement HTTPS. SSL / TLS est une technologie sécurisée et éprouvée intégrée à tous les principaux serveurs HTTP et toutes les principales bibliothèques client HTTP.


0 commentaires

6
votes

Oui, on peut trouver assez facilement. Exécutez le programme Strings sur votre exécutable et vous le trouverez probablement probablement. En outre, tout ce qui est dans votre programme peut être "trouvé", car il est nécessairement ouvert pour la lecture.

Utilisez SSL pour connexions sécurisées. Il utilise un cryptage asymétrique, ce qui signifie que la clé de chiffrement des données n'est pas la même qui sera nécessaire pour la déchiffrer. De cette façon, même si les attaquants découvrent votre clé de cryptage, ils ne peuvent toujours pas l'utiliser pour décoder. Tous les grands serveurs HTTP et les bibliothèques de clients prennent en charge HTTPS, et c'est ce que cela fait.


5 commentaires

Merci, SSL semble être la plus simple à mettre en œuvre mais la plus sécurisée, après avoir examiné la façon dont les algorithmes asymétriques fonctionnent ...


Est-il possible pour un pirate informatique de décharger des chaînes internes lorsqu'une application est en cours d'exécution? Si oui, est-il un moyen de se protéger contre cela?


@vinnybad, il est généralement possible de jeter toute la mémoire d'un programme et de le scanner et de le scanner et de ne pas le prévenir.


@zneak J'ai déjà utilisé des tableaux d'octets en Java pour masquer le contenu des chaînes. Existe-t-il un moyen de sélectionner des valeurs d'un champ de texte dans iOS et de contourner Nstring Nstring to Créer une chaîne C à la place? Bien que cela ne se défendra pas contre toutes les attaques, cela rend certainement plus difficile de comprendre le contenu. Savez-vous comment faire cela?


@vinnybad, que ne fait pas grand chose même dans Java . Si vous ne voulez pas que la chaîne soit vumpable, elle doit être en mémoire que pour le temps le plus bref.



2
votes

Vous utilisez un algorithme symétrique. Peut-être devriez-vous envisager d'avoir une méthode antimétrique si vous avez besoin d'une sécurité élevée. De cette façon, vous pouvez même recréer les clés à I.e. Chaque session et seulement besoin d'échanger la clé publique.

Voici quelques exemples:

  • RSA
  • DIFFIE-HELLMAN
  • elgamal
  • ECDSA
  • xtr

0 commentaires

0
votes

Comme d'autres l'ont dit, ce que vous proposez est complètement insécurisé. Si quelqu'un se soucie de votre application, ils publieront la clé secrète sur Internet dans les 10 minutes suivant sa publication.

choses que vous devez rechercher sont:

  1. Algorithmes de cryptage asymétrique
  2. Exchange de clé DIFFIE-HELLMAN

    (Note - Je ne dis pas que ce sont la solution à votre problème, mais que vous apprenez à leur sujet vous éduquera dans les problèmes impliqués et mieux vous préparer à choisir une solution)

    Sur une note supplémentaire, pourquoi ne pouvez-vous pas utiliser une connexion HTTPS?

    Enfin, si ce schéma de cryptage protège les données critiques, vous seriez probablement bien servi à embaucher un consultant pour vous aider, car comme un débutant au sujet, vous êtes sûr de faire des erreurs de base.


0 commentaires

1
votes

iOS a des services de porte-clés pour stocker des éléments comme des clés de cryptage solidement et (relativement) facilement. Découvrez Programmation des services de porte-clés .

Toutes les API de crypto que vous aurez probablement besoin sont également disponibles dans la bibliothèque CommonCrypto incluse dans Libsystem. En bref, il n'est pas nécessaire de prendre des raccourcis lorsqu'il s'agit de sécuriser vos applications iOS.


0 commentaires