2010-07-04 4 views
4

Quelles sont les principales caractéristiques que je devrais prendre en compte si je veux créer un système simple de preuve de fraude et de non-répudiation? Pour cette question, je me concentre principalement sur l'intégrité des lignes de la base de données. Ce n'est pas une question d'autorisation de sécurité.Création d'un système de non-répudiation/anti-fraude simple

En utilisant une base de données de soccer à titre d'exemple, quelques-unes des principales caractéristiques que je mettre en œuvre sont:

  1. Empêcher DBA de modifier les données de ligne en utilisant SQL traditionnelle. Par exemple, si la ligne de base de données a déjà stocké 2: 1 comme résultat, si DBA a changé le résultat en 2: 3, nous devrions être en mesure de détecter la modification. Toutes les modifications doivent être effectuées via l'application principale.

  2. Empêche la copie d'une ligne des données vers une autre ligne à partir des modifications du moteur. Nous devrions être en mesure de détecter les changements de fraude.

Y a-t-il d'autres problèmes ou fonctionnalités que je devrais envisager pour rendre mon système plus résistant à la fraude? Quelles sont les meilleures pratiques que je devrais connaître? Tout pointeur serait le plus apprécié.

Merci beaucoup à l'avance.

Répondre

3

Créez une colonne qui est une signature cryptographique des autres colonnes. Tant que l'ID est inclus dans le calcul de la signature, vous ne pouvez pas copier une ligne car l'ID change. Aucune modification n'a pu être effectuée sans recalculer le hachage, de sorte que la modification du DBA serait également détectable. Cela ne résout pas le problème des administrateurs de base de données en supprimant les lignes, cela ne fait que confirmer que chaque ligne individuelle a passé par la logique métier appropriée. Vous pourriez potentiellement inclure une signature pour toute la table, mais cela commence à devenir assez lourd!

Bien sûr, à un certain moment, vous avez besoin d'un secret - la partie privée de la clé de signature. Votre code aura besoin d'accéder à cela ... et quiconque écrit ce code pourrait inclure une porte dérobée pour envoyer eux-mêmes la clé privée, etc. Tôt ou tard, vous devez faire confiance quelqu'un, je soupçonne. (Vous pourriez bien sûr utiliser plusieurs signatures d'équipes différentes - donc les équipes devraient s'entendre pour forger quoi que ce soit.)

+0

merci pour la réponse bien réfléchie. +1 – Syd

+0

+1 Pour * application de plusieurs signatures idée *. –

+0

Compte tenu du temps écoulé, je n'ai pas trouvé de meilleure réponse que celle de Jon. Je suis heureux d'accepter Jon. Créer une signature de hachage de toutes les colonnes entières (et pas seulement des champs particuliers) empêcherait un administrateur de base de données de copier une autre ligne ou de copier des colonnes spécifiques. Pour que cela fonctionne, chaque rangée doit avoir une exigence supplémentaire d'être horodatée. – Syd

2

Pour être parfaitement franc: vous perdez votre temps. Les DBA ont l'équivalent d'un accès root à votre base de données. Sinon, ils vont être plutôt inefficaces. Les mêmes problèmes se posent avec les administrateurs système et fondamentalement tout ce que vous pouvez faire est un peu plus d'un placebo au mieux. La seule chose que vous pouvez faire à propos d'une personne malveillante avec ce niveau d'accès n'est pas leur donner l'accès pour commencer. Le meilleur que vous pouvez faire est de rendre un petit plus difficile en créant une piste d'audit. Connectez-vous lorsque les utilisateurs se connectent, se déconnectent, ce qu'ils font, les événements auxquels répond le système, etc. La seule vraie valeur de ceci est de pouvoir reconstruire (si tout va bien) ce qui s'est passé si vous décidez manuellement d'y aller et de le regarder plus tard. Pour changer le résultat d'un match de football, demandez-vous quelle est la probabilité que cela se produise. Bien sûr, cela ne change pas le résultat du match de football. Ça change simplement comment ça a été enregistré. Quiconque l'a vu ou participé sera conscient du résultat réel, alors quelle est la valeur de quelqu'un qui le modifie sur le système?

Dans les entreprises, les erreurs et la malveillance et traitées par des processus de rapprochement. Un courtier aura une équipe qui exécute des rapports sur ce qui est sur le système et le compare aux transactions bancaires réellement effectuées. Toute divergence est signalée en rouge. Vous pouvez donc modifier votre solde sur le système, mais il sera sauvegardé.

L'autre partie de ce puzzle est que les restrictions sur l'activité DBA ne résoudront pas réellement le problème. Les développeurs d'applications peuvent publier du code arbitraire. Même s'il est examiné, le système peut toujours tomber en panne chez les ingénieurs de construction ou quelqu'un avec un accès au niveau racine à l'environnement de production, compilant une version modifiée et l'exécutant.

+0

Même si nous utilisons le match de football comme exemple le plus simple, vous seriez surpris qu'il soit probable que quelqu'un veuille que le résultat soit modifié si le résultat peut améliorer ses points dans une compétition de basculement, surtout quand le changement est effectué avant le les points réels sont alloués. Je ne suis pas d'accord avec votre premier point que le DBA ayant un accès root, il peut changer n'importe quoi. Cependant, je comprends votre point de vue sur la nécessité d'une piste de vérification (+1). Pour un système simple, je n'ai pas besoin de mettre en œuvre la piste d'audit, mais j'ajouterai cette considération lorsque je conçois un système plus complexe. – Syd

+0

Je me demande pourquoi vous avez quitté meta-stackoverflow? Je suis juste en train de lire une de vos questions là-bas, et je l'ai mis en vente et mis une prime –

+0

@Johannes .. Déjà 2 jours mais seulement deux réponses. Je suis sûr qu'il y en a d'autres qui ont déjà traité de cela. Ce serait tellement bien de les amener à partager leur expérience pour faire un meilleur design. Je vais attendre 3 jours de plus. S'il n'y a pas de meilleure réponse, je ferai le marquage (actuel Jon est en tête). – Syd

Questions connexes