Juste mes deux cents, mais ce n'est peut-être pas une bonne idée. Pour paraphraser l'excellente série d'Eric Lippert sur les GUID ( partie 1 , partie 2 , partie 3 ), l'acronyme est GUID, pas GSUID - Globally Unique Identifier, pas Globally Secure Unique Identifier.
Le problème réside dans le fait que lorsque les GUID sont générés dans une portée non hostile, comme tout le monde utilisant NEWID (), toutes les valeurs sont garanties comme étant uniques (enfin, en quelque sorte, voir l'article d'Eric, partie 3). Mais si une entité hostile entre dans cette portée, elle peut à la fois prédire le prochain GUID généré et provoquer elle-même des collisions.
En créant votre propre méthode de génération d'une valeur que vous stockez à l'intérieur d'une structure qui ressemble à un GUID, vous êtes essentiellement devenu une entité hostile. Vous avez changé le contrat d'un GUID de l' unique à aléatoire . Alors que quelqu'un de meilleur en mathématiques que moi pourrait probablement prouver que vous êtes toujours unique, ce n'est que dans les limites de votre méthode de génération. Si vous mélangez ces pseudo-GUID avec des GUID NEWID (), tous les paris sont désactivés.
Je dis que ce n'est peut-être pas une bonne idée uniquement parce que je ne connais pas toute la portée de la façon dont vous utilisez les valeurs. Si vous êtes la seule entité générant les valeurs (pas de mix and match), et / ou si vous ne persistez pas les valeurs, et / ou que vous ne vous souciez pas des collisions, cela peut ne pas être un problème. Si l'un de ces éléments n'est pas vrai, vous voudrez peut-être réévaluer.
4
. Mais le fait que je n'ai pas de preuves solides qu'ils pourraient être devinables ne signifie pas qu'ils ne le sont pas. Je ne peux pas fonder cette décision de sécurité sur cette observation.