Question

Un grand nombre de clients de mon entreprise utilisent notre logiciel d'acquisition de données dans une base de recherche. En raison de la nature de la recherche en général, certains des clients demandent que les données sont cryptées afin d'éviter toute manipulation - il pourrait y avoir des conséquences graves si leurs données a été montré à falsifier

.

Certains de nos binaire logiciel encrypte les fichiers de sortie avec un mot de passe stocké dans la source, qui ressemble à des caractères aléatoires. Au niveau logiciel, nous sommes en mesure d'ouvrir des fichiers cryptés pour les opérations en lecture seule. Si quelqu'un vraiment a voulu savoir le mot de passe afin qu'ils puissent modifier les données, il serait possible, mais ce serait beaucoup de travail.

Je suis à la recherche en utilisant Python pour le développement rapide d'un autre logiciel. Pour dupliquer les fonctionnalités de chiffrement à l'échec / décourager la falsification des données, la meilleure idée que je suis venu avec à ce jour est d'utiliser simplement ctypes avec une DLL pour la lecture de fichiers / opérations d'écriture, de sorte que la méthode de chiffrement et de déchiffrement est « suffisamment "obscurcie.

Nous sommes bien conscients qu'une méthode « uncrackable » est impossible à atteindre, mais en même temps, je ne suis évidemment pas à l'aise avec juste avoir les approches de chiffrement / déchiffrement assis dans le texte brut dans le code source Python. Un « découragement très forte altération des données » serait assez bon, je pense.

Quelle serait la meilleure approche pour atteindre un juste milieu de cryptage ou toute autre preuve de l'intégrité des données en utilisant Python? J'ai vu un autre poste parler de générer un « autoprotection signature la preuve », mais si une signature a été générée en Python pur, il serait alors trivial de générer une signature pour les données arbitraires. Nous peut être en mesure de téléphoner à la maison pour prouver l'intégrité des données, mais cela semble être un inconvénient majeur pour tout le monde.

Était-ce utile?

La solution

En tant que principe général, vous ne voulez pas utiliser le cryptage pour protéger contre les manipulations, au lieu que vous souhaitez utiliser une signature numérique. Le chiffrement vous donne confidentialité , mais vous êtes après l'intégrité .

Calculer une valeur de hachage sur vos données et soit stocker la valeur de hachage dans un endroit où vous savez qu'il ne peut pas être falsifié ou signer numériquement.

Dans votre cas, il semble que vous voulez vous assurer que votre logiciel ne peut avoir généré les fichiers? Comme vous dites, il ne peut exister un moyen vraiment sûr de le faire lorsque vos utilisateurs ont accès au logiciel, car ils peuvent déchirer et trouver des clés secrètes que vous intégrez. Compte tenu de cette contrainte, je pense que votre idée d'utiliser une DLL est à peu près aussi bon que vous pouvez le faire.

Autres conseils

Si vous intégrez des mots de passe quelque part, vous êtes déjà arrosé. Vous ne pouvez pas garantir quoi que ce soit.

Cependant, vous pouvez utiliser le chiffrement à clé de clé publique / privée pour vous assurer que les données n'a pas été falsifié.

Le fonctionnement est le suivant:

  1. Vous générez une paire de clés de clé publique / privée.
  2. Gardez la clé privée sécurisée, distribuer la clé publique.
  3. Hash les données, puis signe le hachage avec la clé privée.
  4. Utilisez la clé publique pour vérifier le hachage.

Cela rend efficacement les données en lecture seule en dehors de votre entreprise, et fournit à votre programme un moyen simple de vérifier que les données n'a pas été modifié sans distribuer des mots de passe.

Voici une autre question. On peut supposer que votre logiciel d'acquisition de données recueille des données à partir d'une source externe (comme une sorte de dispositif de mesure), puis en faisant tout ce qui est nécessaire processsing sur les données brutes et le stockage des résultats. Quelle que soit la méthode que vous utilisez dans votre programme, un autre vecteur d'attaque possible serait de nourrir dans de mauvaises données au programme, et le programme lui-même n'a aucun moyen de savoir que vous nourrissez en fait des données plutôt que des données qui provenait de la mesure dispositif. Mais cela pourrait ne pas être réparable.

.

Un autre vecteur d'attaque possible (et probablement celui que vous êtes préoccupé par est la falsification des données sur l'ordinateur après qu'il a été stocké Voici une idée d'atténuer ce risque: mettre en place un serveur distinct (ce qui pourrait être soit quelque chose que votre société irait, ou plus probablement, il serait quelque chose que le client serait mis en place) avec un mot de passe service Web protégé qui permet à un utilisateur d'ajouter (mais pas supprimer) des enregistrements de données. Faites ensuite votre programme, quand il collecte des données, l'envoyer à le serveur (en utilisant la chaîne mot de passe / connexion qui est stocké dans le programme). Demandez à votre programme écrit que les données sur la machine locale si elle reçoit la confirmation que les données ont été correctement stockées sur le serveur.

Supposons maintenant un attaquant tente de falsifier les données sur le client. S'il peut inverser l'ingénierie du programme alors il peut bien sûr toujours envoyer au serveur pour le stockage, tout comme le programme a fait. Mais le serveur aura toujours les données d'origine, de sorte que la manipulation sera détectable parce que le serveur se termine avec les données à la fois original et modifié - le client ne sera pas en mesure d'effacer les documents originaux. (Le programme client bien sûr n'a pas besoin de savoir comment effacer les enregistrements sur le serveur.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top