Avantages et inconvénients de l'utilisation du hash md5 D'URI comme clé primaire dans une base de données

je suis en train de construire une base de données qui va stocker des informations sur une gamme d'objets (tels que des articles scientifiques, des spécimens, des séquences D'ADN, etc.) que tous ont une présence en ligne et peuvent être identifiés par une URL, ou un identifiant tel qu'un DOI . Utiliser ces GUIDs comme clé primaire pour l'objet semble une idée raisonnable, et j'ai suivi delicious et Connotea en utilisant le hash md5 de la GUID. Vous verrez le md5 hachez dans la barre d'état de votre navigateur si vous cliquez sur les boutons modifier ou supprimer dans une marque de livre delicious ou Connotea. Par exemple, le signet http://stackoverflow/ est

http://delicious.com/url/e4a42d992025b928a586b8bdc36ad38d

où e4a42d992025b928a586b8bdc36ad38d ais le hash md5 de http://stackoverflow/ .

Quelqu'un a-t-il une opinion sur les avantages et les inconvénients de cette approche?

pour moi un avantage de ce approche (par opposition à l'utilisation d'une clé primaire incrémentée automatique générée par la base de données elle-même) est que je dois faire beaucoup de liens entre les objets, et en utilisant des hachures md5, je peux stocker ces liens externes dans un fichier (par exemple, à la suite de l'extraction de données/raclage), puis les importer en vrac dans la base de données. De la même manière, si la base de données doit être reconstruite à partir de zéro, les URL des objets ne changeront pas car ils utilisent le hachage md5.

n'hésitez pas à me faire part de vos réflexions sur que cela semble raisonnable, ou s'il y en a d'autres (mieux?) façons de le faire.

23
demandé sur rdmpage 2008-10-21 12:33:12

7 réponses

après avoir parcouru stackoverfow un peu plus, j'ai trouvé une question plus tôt avantages et inconvénients des clés de base de données GUID / UUID qui couvre une grande partie de ce terrain.

8
répondu rdmpage 2017-05-23 11:46:18

c'est parfait.

collision accidentelle de MD5 est impossible dans tous les scénarios pratiques (pour obtenir un risque de collision de 50% vous auriez à hachez 6 milliards URLs par seconde , chaque seconde, pendant 100 ans).

c'est une chance si improbable que vous êtes mille fois plus susceptible de faire foirer vos données à cause d'une défaillance matérielle non détectée qu'à cause d'une collision réelle.

même s'il y a une attaque de collision connue contre MD5, les collisions malveillantes intentionnelles sont actuellement impossibles contre les URL hachées.

  • le type de collision dont vous auriez besoin pour entrer en collision intentionnellement avec un hachage d'une autre URL est appelé une attaque pré-image . Il n'y a pas d'attaque pré-image connue contre MD5. À partir de 2017, il n'y a aucune recherche qui est même proche de la faisabilité, donc même un déterminé attaquant bien financé ne peut pas calculer une URL qui serait le hachage à un hachage de N'importe quelle URL existante dans votre base de données.

  • la seule attaque de collision connue contre MD5 n'est pas utile pour attaquer des clés de type URL. Il fonctionne en générant une paire de blobs binaires qui entrent en collision seulement avec l'autre . Les blobs seront relativement longs, contiennent NUL et d'autres octets impossibles à imprimer, de sorte qu'ils sont extrêmement peu susceptibles de ressembler à quelque chose comme un URL.

8
répondu Kornel 2017-07-02 17:23:15

plusieurs chaînes peuvent produire le même hachage md5. Les clés primaires doivent être uniques. Donc utiliser le hachage comme clé primaire n'est pas bon. Il est préférable d'utiliser le guide directement.

est un guide utilisable dans une URL. Assurer. Voici un guide (en fait, un UUID) I jsut créé en utilisant Java: 1ccb9467-e326-4fed-b9a7-7edcba52be84

l'url pourrait être:

http://example.com/view?id=1ccb9467-e326-4fed-b9a7-7edcba52be84

c'est long, mais parfaitement utilisable et atteint ce que vous décrivez.

1
répondu Steve McLeod 2008-10-21 11:11:44

MD5 est considéré comme déprécié - du moins à des fins cryptographiques, mais je suggérerais d'utiliser seulement md5 pour rétrocompatibilité avec la substance existante. Vous devriez avoir une bonne raison d'aller avec md5 quand nous avons d'autres algos de hachage là-bas qui ne sont pas (au moins encore) cassé.

les Problèmes que je vois avec l'approche:

  • objets dupliqués, parce que l'identificateur d'url est différent (Comme arend l'a mentionné)
  • Changement d'URLs

, ce dernier étant celui qui pourrait être important - ce qui pourrait être fait aussi simplement qu'un supprimer et ajouter. C'est-à-dire, si ces ID ne sont jamais visibles/stockables en dehors de la base de données. (Comme un élément de l'URL.)

je suppose que ça ne sera pas un problème pour dais.


comment fonctionnerait-il avec une configuration Non-autonumber integer id, mais où l'agent d'insertion hors ligne crée les numéros? (Peut - être peut-on utiliser une série de nombres dédiés?) Pourrait avoir un problème avec la duplication doit deux utilisateurs indépendamment ajouter la même url?

1
répondu MaHuJa 2009-08-03 11:34:52

peut-être que ce document est quelque chose que vous voulez lire:

http://www.hpl.hp.com/techreports/2002/HPL-2002-216.pdf

0
répondu MysticSlayer 2008-10-21 08:39:35

souvent beaucoup d'urls différentes pointent vers la même page. http://example.com / example.com http://www.example.com / http://example.com/index.html http://example.com / . https://example.com / etc.

cela pourrait ou non être un problème pour vous.

0
répondu 2008-10-21 08:49:32

MD5 hash est presque unique, mais n'est pas totalement unique unique, donc ne l'utilisez pas comme clé primaire. Il est amorti pour les utiliser. Il y a moins de risque de collision de clés, mais si vous avez une assez grande base de données avec des milliards de lignes, il y a encore un certain risque de collision. Si vous insistez sur l'utilisation du hash comme clé principale, utilisez d'autres meilleurs hash. Vous ne pouvez pas utiliser des valeurs non uniques pour la clé primaire. Si vous avez assez grande table, ne l'utilisez pas. Si vous avez une petite table, vous pourriez utiliser, mais pas recommandé.

-1
répondu Prabhu 2018-07-06 03:50:57