Alex l'a assez bien expliqué. Pour ceux qui n'ont toujours pas bien compris, j'espère que cet exemple vous aidera à comprendre:
Disons que je travaille pour Google, dans l'équipe Chrome, et que je souhaite ajouter une fonctionnalité au navigateur qui avertit l'utilisateur si l'URL qu'il a saisie est une URL malveillante. J'ai donc un ensemble de données d'environ 1 million d'URL malveillantes, la taille de ce fichier étant d'environ 25 Mo. Comme la taille est assez grande (grande par rapport à la taille du navigateur lui-même), je stocke ces données sur un serveur distant.
Cas 1: j'utilise une fonction de hachage avec une table de hachage. Je décide d'une fonction de hachage efficace et j'exécute tous les 1 million d'URL via la fonction de hachage pour obtenir des clés de hachage. Je crée ensuite une table de hachage (un tableau), où la clé de hachage me donnerait l'index pour placer cette URL. Alors maintenant, une fois que j'ai haché et rempli la table de hachage, je vérifie sa taille. J'ai stocké les 1 million d'URL dans la table de hachage avec leurs clés. La taille est donc d'au moins 25 Mo. Cette table de hachage, en raison de sa taille, sera stockée sur un serveur distant. Lorsqu'un utilisateur arrive et entre une URL dans la barre d'adresse, je dois vérifier si elle est malveillante. Ainsi, j'exécute l'URL via la fonction de hachage (le navigateur lui-même peut le faire) et j'obtiens une clé de hachage pour cette URL. Je dois maintenant faire une demande à mon serveur distant avec cette clé de hachage, pour vérifier si l'URL particulière dans ma table de hachage avec cette clé particulière, est la même que ce que l'utilisateur a entré. Si oui, c'est malveillant et si non, ce n'est pas malveillant. Ainsi à chaque fois que l'utilisateur saisit une URL, une requête au serveur distant doit être faite pour vérifier s'il s'agit d'une URL malveillante. Cela prendrait beaucoup de temps et ralentirait ainsi mon navigateur.
Cas 2: j'utilise un filtre à fleurs. La liste entière de 1 million d'URL est exécutée à travers le filtre de floraison à l'aide de plusieurs fonctions de hachage et les positions respectives sont marquées comme 1, dans un énorme tableau de 0. Disons que nous voulons un taux de faux positifs de 1%, en utilisant un calculateur de filtre de bloom ( http://hur.st/bloomfilter?n=1000000&p=0.01), nous obtenons la taille du filtre de floraison requise comme seulement 1,13 Mo. Cette petite taille est attendue car, même si la taille du tableau est énorme, nous ne stockons que des 1 ou des 0 et non les URL comme dans le cas de la table de hachage. Ce tableau peut être traité comme un tableau de bits. Autrement dit, puisque nous n'avons que deux valeurs 1 et 0, nous pouvons définir des bits individuels au lieu d'octets. Cela réduirait l'espace occupé de 8 fois. Ce filtre de fleurs de 1,13 Mo, en raison de sa petite taille, peut être stocké dans le navigateur Web lui-même !! Ainsi, lorsqu'un utilisateur arrive et entre une URL, nous appliquons simplement les fonctions de hachage requises (dans le navigateur lui-même), et vérifions toutes les positions dans le filtre de floraison (qui est stocké dans le navigateur). Une valeur de 0 dans l'une des positions nous indique que cette URL n'est DEFINITIVEMENT PAS dans la liste des URL malveillantes et que l'utilisateur peut continuer librement. Ainsi, nous n'avons pas fait d'appel au serveur et donc gagné du temps. Une valeur de 1 nous indique que l'URL PEUT être dans la liste des URL malveillantes. Dans ces cas, nous appelons le serveur distant et là-bas, nous pouvons utiliser une autre fonction de hachage avec une table de hachage comme dans le premier cas pour récupérer et vérifier si l'URL est réellement présente. Étant donné que la plupart du temps, une URL n'est pas susceptible d'être malveillante, le petit filtre de floraison du navigateur le détecte et fait ainsi gagner du temps en évitant les appels au serveur distant. Seulement dans certains cas, si le filtre de floraison nous indique que l'URL PEUT être malveillante, seulement dans ces cas, nous faisons un appel au serveur. Ce «PEUT» est exact à 99%. Dans ces cas, nous appelons le serveur distant et là-bas, nous pouvons utiliser une autre fonction de hachage avec une table de hachage comme dans le premier cas pour récupérer et vérifier si l'URL est réellement présente. Étant donné que la plupart du temps, une URL n'est pas susceptible d'être malveillante, le petit filtre de floraison du navigateur le détecte et fait ainsi gagner du temps en évitant les appels au serveur distant. Seulement dans certains cas, si le filtre de floraison nous indique que l'URL PEUT être malveillante, seulement dans ces cas, nous faisons un appel au serveur. Ce «PEUT» est exact à 99%. Dans ces cas, nous appelons le serveur distant et là-bas, nous pouvons utiliser une autre fonction de hachage avec une table de hachage comme dans le premier cas pour récupérer et vérifier si l'URL est réellement présente. Étant donné que la plupart du temps, une URL n'est pas susceptible d'être malveillante, le petit filtre de floraison du navigateur le détecte et fait ainsi gagner du temps en évitant les appels au serveur distant. Seulement dans certains cas, si le filtre de floraison nous indique que l'URL PEUT être malveillante, seulement dans ces cas, nous faisons un appel au serveur. Ce «PEUT» est exact à 99%. le petit filtre de floraison dans le navigateur en tient compte et permet donc de gagner du temps en évitant les appels vers le serveur distant. Seulement dans certains cas, si le filtre de floraison nous indique que l'URL PEUT être malveillante, seulement dans ces cas, nous faisons un appel au serveur. Ce «PEUT» est exact à 99%. le petit filtre de floraison dans le navigateur en tient compte et permet donc de gagner du temps en évitant les appels vers le serveur distant. Seulement dans certains cas, si le filtre de floraison nous indique que l'URL PEUT être malveillante, seulement dans ces cas, nous faisons un appel au serveur. Ce «PEUT» est exact à 99%.
Ainsi, en utilisant un petit filtre de floraison dans le navigateur, nous avons gagné beaucoup de temps car nous n'avons pas besoin de faire des appels au serveur pour chaque URL saisie.
Nous pouvons voir que la table de hachage avec une seule fonction de hachage est utilisée dans un but complètement différent d'un filtre de floraison. Espérons que cela dissipe vos doutes :)
modifier :
J'ai implémenté un filtre de floraison pour la tâche de test d'URL malveillantes en Python. Le code peut être trouvé ici - https://github.com/tarunsharma1/Bloom-Filter
Le code est très simple à comprendre et une description détaillée est fournie dans le fichier readme.