1. Overview of Contents (Aperçu du contenu)
Ce document comprend les spécifications pour les algorithmes de hachage sécurisés (SHAs) du Federal Information Processing Standard (FIPS) des États-Unis d'Amérique (USA), du code pour implémenter les SHAs, du code pour implémenter HMAC (Hashed Message Authentication Code, [RFC2104]) basé sur les SHAs, et du code pour implémenter HKDF (fonction de dérivation de clé basée sur HMAC, [RFC5869]) basé sur HMAC. Les spécifications pour HMAC et HKDF ne sont pas incluses car elles apparaissent ailleurs dans la série RFC [RFC2104] [RFC5869].
NOTE : Une grande partie du texte ci-dessous est tirée de [SHS], et les affirmations concernant la sécurité des algorithmes de hachage décrits dans celui-ci sont faites par le gouvernement américain, l'auteur de [SHS], et non par les auteurs répertoriés de ce document. Voir également [RFC6194] concernant la sécurité de SHA-1.
Le texte ci-dessous spécifie les algorithmes de hachage sécurisés, SHA-224 [RFC3874], SHA-256, SHA-384 et SHA-512, pour calculer une représentation condensée d'un message ou d'un fichier de données. (SHA-1 est spécifié dans [RFC3174].) Lorsqu'un message de n'importe quelle longueur < 2^64 bits (pour SHA-224 et SHA-256) ou < 2^128 bits (pour SHA-384 et SHA-512) est entré dans l'un de ces algorithmes, le résultat est une sortie appelée résumé de message (Message Digest). Les résumés de message varient en longueur de 224 à 512 bits, selon l'algorithme. Les algorithmes de hachage sécurisés sont généralement utilisés avec d'autres algorithmes cryptographiques, tels que les algorithmes de signature numérique et les codes d'authentification de message à clé de hachage, la génération de nombres aléatoires [RFC4086], ou dans les fonctions de dérivation de clé.
Les algorithmes spécifiés dans ce document sont appelés sécurisés car il est informatiquement infaisable de (1) trouver un message qui correspond à un résumé de message donné, ou (2) trouver deux messages différents qui produisent le même résumé de message. Toute modification d'un message en transit entraînera, avec une très haute probabilité, un résumé de message différent. Cela entraînera un échec de vérification lorsque l'algorithme de hachage sécurisé est utilisé avec un algorithme de signature numérique ou un algorithme d'authentification de message à hachage à clé.
Le code fourni ici prend en charge les chaînes d'entrée de longueur de bits arbitraire. Le code d'exemple de SHA-1 de [RFC3174] a également été mis à jour pour gérer les chaînes d'entrée de longueur de bits arbitraire. La permission est accordée pour toutes les utilisations, commerciales et non commerciales, de ce code.
Ce document rend obsolète [RFC4634], et les modifications par rapport à ce RFC sont résumées dans l'annexe.
Les OID ASN.1 (identificateurs d'objets) pour les algorithmes SHA, tirés de [RFC4055], sont les suivants :
id-sha1 OBJECT IDENTIFIER ::= { iso(1)
identified-organization(3) oiw(14)
secsig(3) algorithms(2) 26 }
id-sha224 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 4 }
id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 1 }
id-sha384 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 2 }
id-sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 3 }
La section 2 ci-dessous définit la terminologie et les fonctions utilisées comme blocs de construction pour former ces algorithmes. La section 3 décrit les opérations fondamentales sur les mots à partir desquels ces algorithmes sont construits. La section 4 décrit comment les messages sont remplis jusqu'à un multiple intégral de la taille de bloc requise, puis analysés en blocs. La section 5 définit les constantes et les fonctions composites utilisées pour spécifier les algorithmes de hachage. La section 6 donne la spécification réelle pour les fonctions SHA-224, SHA-256, SHA-384 et SHA-512. La section 7 fournit des pointeurs vers la spécification des codes d'authentification de message à clé HMAC et vers la spécification d'une fonction de dérivation de clé par extraction et expansion basée sur HMAC.
La section 8 donne un exemple de code pour les algorithmes SHA, pour les HMACs basés sur SHA, et pour la fonction de dérivation de clé par extraction et expansion basée sur HMAC.