Fonction HASH( )
Renvoie une valeur de hachage cryptographique salted à partir de la valeur d'introduction.
Syntaxe
HASH(champ <;valeur_salt>)
Paramètres
Nom | Type | Description |
---|---|---|
champ |
caractère numérique DateHeure logique |
Valeur à hacher. |
valeur_salt
optionnel |
caractère numérique |
La valeur salt à utiliser. Vous pouvez spécifier un numéro d'identificateur PASSWORD compris entre 1 et 10 ou une chaîne de caractères. Si vous ignorez ce paramètre, la valeur salt par défaut Analytics est utilisée. La valeur salt est limitée à 128 caractères et est tronquée automatiquement à 128 caractères si vous spécifiez une valeur salt plus longue. Pour plus d'informations, consultez la section La valeur salt. |
Sortie
Caractère.
Exemples
Exemples de base
Avec la valeur salt par défaut Analytics
Renvoie "819A974BB91215D58E7753FD5A42226150100A0763087CA7DECD93F3C3090405" :
HASH("555-44-3322")
Renvoie la valeur de hachage pour chaque nombre dans le champ Num_carte_crédit :
HASH(Num_carte_crédit)
Avec une valeur salt spécifiée par l'utilisateur
Renvoie "AD1E7D9B97B6F6B5345AB13471A74C31EBE6630CA2622BB7E8C280E9FBEE1F17" :
HASH("555-44-3322"; "ma valeur salt 123")
Exemples avancés
S'assurer que les valeurs de hachage sont identiques
Utilisez d'autres fonctions conjointement avec la fonction HASH( ) pour standardiser les valeurs en texte clair qui devraient produire des valeurs de hachage identiques.
Prenez l'ensemble d'exemples suivant. Remarquez en quoi la casse des valeurs en texte clair modifie complètement la valeur de hachage de sortie dans les deux premiers exemples.
Renvoie "DF6789E1EC65055CD9CA17DD5B0BEA5892504DFE7661D258737AF7CB9DC46462" :
HASH("John Smith")
Renvoie "3E12EABB5940B7A2AD90A6B0710237B935FAB68E629907927A65B3AA7BE6781D" :
HASH("JOHN SMITH")
En utilisant la fonction UPPER( ) pour standardiser la casse, une valeur de hachage identique est créée.
Renvoie "3E12EABB5940B7A2AD90A6B0710237B935FAB68E629907927A65B3AA7BE6781D" :
HASH(UPPER("John Smith"))
Utilisation de HASH( ) pour comparer les grands blocs de texte
Utilisez HASH( ) pour tester si les blocs de texte dans deux champs de commentaires sont identiques.
Pour effectuer ce test, créez deux champs calculés similaires à ceux qui sont illustrés ci-dessous, puis créez un filtre pour rechercher des blocs de texte qui ne sont pas identiques.
DEFINE FIELD Hachage_1 COMPUTED HASH(Champ_Commentaire_1)
DEFINE FIELD Hachage_2 COMPUTED HASH(Champ_Commentaire_2)
SET FILTER TO Hachage_1 <> Hachage_2
Si les champs de commentaires se trouvent dans des tables distinctes, créez un champ calculé HASH( ) dans chaque table, puis utilisez les champs calculés comme champ clé commun pour effectuer une jointure dissociée des deux tables. Les enregistrements dans la table de sortie jointe représentent des blocs de texte non identiques.
Remarques
Quand utiliser la fonction HASH( )
Utilisez la fonction HASH( ) pour protéger les données sensibles, comme les numéros de carte de crédit, les informations de salaire ou les numéros de sécurité sociale.
Fonctionnement
HASH( ) est une fonction d'encodage en une seule passe. Des données dans le texte en clair peuvent être utilisées pour générer une valeur de hachage. Toutefois, il ne sera pas possible d'enlever l'encodage à la valeur de hachage ni de la décrypter par la suite.
Une valeur de texte en clair spécifique génère toujours la même valeur de hachage. Vous pouvez donc rechercher dans un champ de numéros de carte de crédit hachés des doublons ou joindre deux champs de numéros de carte de crédit hachés, et les résultats seront les mêmes que si vous aviez effectué l'opération sur des champs de texte en clair équivalents.
Protection des données sensibles
Pour éviter de stocker des données sensibles sur un serveur, vous pouvez créer un champ calculé en local à l'aide de la fonction HASH( ), puis créer une nouvelle table en extrayant le champ haché et tous les autres champs requis, tout en excluant le champ de texte en clair. Vous pouvez utiliser la nouvelle table sur le serveur pour votre analyse, puis une fois que vous avez les résultats, vous pouvez vous reporter à la table d'origine si vous avez besoin de consulter la version du texte en clair de certaines données hachées.
S'il est interdit de stocker en local les données sensibles après leur utilisation initiale, vous pouvez supprimer la table d'origine après avoir créé la nouvelle table avec les valeurs hachées et vous reporter au système source d'origine pour les valeurs du texte en clair.
Les valeurs en texte clair doivent être exactement identiques
Pour générer des valeurs de hachage identiques, deux valeurs de texte en clair doivent être identiques exactement. Par exemple, différentes valeurs de hachage sont produites à partir du même numéro de carte de crédit avec ou sans trait d'union, du même nom avec la première lettre en majuscule ou toutes les lettres en majuscules.
Il se peut que vous deviez intégrer des fonctions comme INCLUDE( ), EXCLUDE( ) ou UPPER( ) dans la fonction HASH( ) pour standardiser les valeurs de texte en clair.
Les espaces de début et de fin sont automatiquement coupés par la fonction HASH( ) ; il est donc inutile d'utiliser les fonctions TRIM( ) ou ALLTRIM( ).
Que se passe-t-il si les espaces de début ou de fin sont significatives ?
Si vous disposez de données dans lesquelles les espaces de début et de fin représentent des différences significatives entre les valeurs, vous devez remplacer les valeurs vides par un autre caractère avant de hacher les valeurs.
Remplace les espaces dans les valeurs des champs par le caractère de soulignement (_) avant le hachage :
HASH(REPLACE(nom_champ; " "; "_"))
Algorithme de chiffrement utilisé par HASH( )
La fonction HASH( ) utilise un algorithme de hachage cryptographique SHA-2 produisant une sortie hachée à longueur fixe de 64 octets, indépendamment de la longueur de la valeur d'introduction. La valeur d'introduction du texte en clair peut avoir une longueur supérieure à 64 octets.
La valeur salt
Fonctionnement
La protection offerte par la fonction HASH( ) est renforcée par l'ajout automatique d'une valeur salt avant le hachage. La valeur salt est une chaîne alphanumérique concaténée avec la valeur de données source. L'intégralité de la chaîne de caractères concaténée est ensuite utilisée pour produire la valeur hachée salted. Cette approche rend les valeurs hachées plus résistantes aux techniques de décodage.
Facultatif : préciser votre propre valeur salt
Une valeur salt fixe est utilisée automatiquement sauf si vous spécifiez une valeur salt. Vous pouvez aussi utiliser l'une des méthodes suivantes pour spécifier une valeur salt :
-
Valeur salt comme chaîne de texte clair
Spécifier une chaîne de caractères alphanumériques. Par exemple :
HASH(Num_carte_crédit; "ma valeur salt")
-
Valeur salt comme mot de passe
Utiliser la commande PASSWORD conjointement avec la fonction HASH( ) et spécifier un numéro d'identificateur PASSWORD compris entre 1 et 10. Par exemple :
PASSWORD 3 "Saisir une valeur salt"
EXTRACT FIELDS HASH(Num_carte_crédit; 3) TO "Table_protégée"Remarque
La valeur salt PASSWORD doit être saisie avant que le champ dans la fonction HASH( ) peut être extrait.
L'intérêt d'utiliser un numéro d'identificateur PASSWORD avec HASH( ) est que vous n'avez pas à exposer une valeur salt du texte en clair.
Pour plus d'informations, consultez la section Commande PASSWORD.
Instructions relatives à la méthode du mot de passe
La méthode du mot de passe est destinée à être utilisée dans les scripts qui invitent à saisir le mot de passe au début du script ou avant que la fonction HASH( ) apparaisse dans le script.
La méthode du mot de passe ne convient pas à une utilisation dans des champs calculés, car les affectations PASSWORD sont supprimées lorsque vous fermez Analytics.
En outre, les champs calculés qui utilisent une valeur salt basée sur un mot de passe sont supprimés automatiquement des vues lorsque vous rouvrez Analytics. Cette suppression est nécessaire pour éviter le recalcul des valeurs hachées à l'aide de la valeur salt par défaut. Les valeurs recalculées différeraient des valeurs hachées d'origine calculées avec une valeur salt fournie par l'utilisateur.