web-dev-qa-db-fra.com

Comment créer un identifiant unique qui ne peut pas être facilement inversé?

Je travaille sur la conception d'une étude longitudinale et une exigence est la suivante:

  • tous les participants auront un identifiant unique qui
    • n'est pas réversible à partir du côté stockage de données/analyste de l'étude
    • est défini par quelque chose facilement rappelé par un participant qui est relativement statique sur plusieurs années, ex. le nom propre et la date de naissance d'un participant dans un format donné.
    • La création de l'identifiant unique se produira sur l'ordinateur du participant et aucune partie de la chaîne de définition ne sera envoyée avec d'autres données collectées.

Comment puis-je continuer à rencontrer cet objectif?

Les premières pensées doivent utiliser BCRYPT ou quelque chose de similaire, mais cela s'inscrit dans le problème que s'il existe une liste de noms de participants possibles et d'anniversaires, il devient trivial de déterminer qui a participé et leurs réponses. Cette situation hypothétique n'est pas très probable mais concernant.

J'ai examiné cryptographie à base d'identité comme une réponse possible, mais l'augmentation de la complexité et une forte probabilité d'erreur utilisateur sont prohibitives.

Est-ce que je manque une réponse simple?

4
bob0the0mighty

Il y a un moyen simple d'accomplir cela avec un hachage de 2 étapes.

Prenez un identifiant personnel pour quelqu'un SHA256 (prénom MIDDName Nom + anniversaire) et calculez-le sur le côté du client.

Envoyez ce hachage à un serveur. Hash Ceci avec un seul secret pré-choisi de High Entropy (128 bits) que connu du programmateur et gardé secret de tous les chercheurs. SHA256 (Secret + HashOutputStep1). Stockez la sortie dans votre base de données comme clé de ce participant. Le secret doit bien sûr être le même pour une seule étude. Si vous le souhaitez, utilisez un identifiant unique entier qui correspond au hachage généré SHA256. Cela vous donnerait un numéro de référence facile pour un humain à utiliser.

Cela rend impossible d'inverser le hachage sans connaître le secret et les résultats sont toujours les mêmes avec le même identifiant personnel. Je crois que cette solution répond à vos besoins car les analystes ne peuvent pas inverser cette chaîne. Le secret doit être tenu à l'écart des analystes, mais c'est une affaire triviale.

2
Steve Sether

Je suggérerais ici une liste des participants gardé et un identifiant aléatoire.

Comme ceci: nom Namesson ID = 18479 test testsson id = 29472 et ainsi de suite. Ceci est gardé secret et le côté analyste n'a pas accès à la liste.

Le problème avec un identifiant unique non désespéréable est que vous devez toujours l'exécuter via un algoritme informatique. Ensuite, vous pouvez avoir le type d'utilisateur de type nom de naissance et de naissance - alors il vérifie si une entrée existe déjà. Si l'entrée existe - remplacez le nom de l'utilisateur et la date de naissance avec l'entrée existante. Si l'entrée est inexistante - Créez une nouvelle identité aléatoire et remplacez le nom réel de l'utilisateur et la date de naissance avec l'entrée nouvellement créée. Si vous optez pour un système ID "automatique", vous devez vous assurer que le même utilisateur ne peut pas soumettre à nouveau la même application. Cela garantit que les "tests" des IDS ne peuvent pas être effectués - si vous appliquez donc si l'utilisateur X soumet une application, l'utilisateur X est marqué comme "dépensé" dans la base de données. Lorsque la prochaine application s'ouvre, vous supprimez simplement le marqueur "dépensé" sur tous les utilisateurs. Utilisation d'un système "dépensé", vous devez également tamponner toutes les applications afin qu'elles ne soient pas envoyées au côté de l'analyste tant que c'est que tout le monde ait terminé l'application, OR la demande "Dernière date d'échéance" est adoptée. Sinon, le côté analyste pourrait simplement vérifier par essai et par erreur chaque fois qu'une seule application est reçue, quel utilisateur est maintenant "dépensé".

Ou, vous publiez des identifiants aléatoires aux utilisateurs simplement. Ensuite, la liste pourrait être conservée sur papier, stockée dans un coffre-fort.

Une troisième solution consiste à utiliser un algoritme de hachage ou un bcrypt, associé à une clé secrète ou à un mot de passe. La clé secrète ou le mot de passe n'est connu que du côté de la collecte et non du côté analyste. Cela signifie que même si le côté analyste ait une liste complète de partipricant et une liste de tous les haubans de l'application, ils ne peuvent toujours pas l'inverser via l'essai et l'erreur car ils ne connaissent pas la clé secrète ou le mot de passe.

La clé secrète ou le mot de passe ne peut alors être connue que par l'application et stockée dans un coffre-fort.

0
sebastian nielsen