Sécurité IoT – Cryptographie
Note de l'éditeur :la sécurisation de l'Internet des objets est essentielle non seulement pour l'intégrité des flux de données et des logiciels au sein de chaque application IoT, mais également pour l'intégrité des ressources de l'entreprise liées à ces applications. La sécurité de l'IoT est un problème complexe, nécessitant une approche systématique pour comprendre les menaces possibles et les méthodes d'atténuation correspondantes.
Adapté de l'Internet des objets pour les architectes, par Perry Lea.
Chapitre 12. Sécurité de l'IoT
Par Perry Lea
Cryptographie
Le chiffrement et le secret sont des exigences absolues des déploiements IoT. Ils sont utilisés pour sécuriser la communication, protéger le micrologiciel et l'authentification. Concernant le chiffrement, il y a généralement trois formes à considérer :
Cryptage par clé symétrique :Les clés de cryptage et de décryptage sont identiques. RC5, DES, 3DES et AES sont toutes des formes de cryptage à clé symétrique.
Cryptage par clé publique :la clé de cryptage est publiée publiquement pour que quiconque puisse utiliser et crypter les données. Seul le destinataire dispose d'une clé privée utilisée pour déchiffrer le message. Ceci est également connu sous le nom de cryptage asymétrique. La cryptographie asymétrique gère le secret des données, authentifie les participants et force la non-répudiation. Le cryptage Internet bien connu et les protocoles de messagerie tels que Elliptic Curve, PGP, RSA, TLS et S/MIME sont considérés comme des clés publiques.
Hachage cryptographique :mappe des données de taille arbitraire sur une chaîne de bits (appelée condensé). Cette fonction de hachage est conçue pour être « à sens unique ». Essentiellement, le seul moyen de recréer le hachage de sortie est de forcer toutes les combinaisons d'entrée possibles (il ne peut pas être exécuté en sens inverse). MD5, SHA1, SHA2 et SHA3 sont toutes des formes de hachage unidirectionnel. Ceux-ci sont généralement utilisés pour coder les signatures numériques telles que les images de micrologiciel signées, le code d'authentification de message s (MAC ) ou l'authentification. Lors du cryptage d'un message court comme un mot de passe, l'entrée peut être trop petite pour créer efficacement un hachage juste; dans ce cas, un sel ou une chaîne non privée est ajoutée au mot de passe pour augmenter l'entropie. Un sel est une forme de fonction de dérivation de clé (KDF ):
cliquez pour agrandir l'image
Eléments de cryptographie. Voici les fonctions symétriques, asymétriques et de hachage. Notez l'utilisation des clés en cryptographie symétrique et asymétrique. Symmetric a l'obligation d'utiliser des clés identiques pour crypter et décrypter les données. Bien qu'elles soient plus rapides que le cryptage asymétrique, les clés doivent être sécurisées.
Cryptographie symétrique
Dans le chiffrement, le texte en clair fait référence à l'entrée non chiffrée et la sortie est appelée texte chiffré, car elle est chiffrée. La norme de cryptage est la Standard de cryptage avancé (AES ) qui a remplacé les anciens algorithmes DES datant des années 1970. AES fait partie de la spécification FIPS et de la norme ISO/IEC 18033-3 utilisée dans le monde entier. Les algorithmes AES utilisent des blocs fixes de 128, 192 ou 256 bits. Les messages plus grands que la largeur de bit seront divisés en plusieurs blocs. AES a quatre phases de fonctionnement de base pendant le chiffrement. Le pseudo-code pour un cryptage AES générique est affiché ici :
// Psuedo code pour un chiffrement AES-128
// entrée :128 bits (texte en clair)
// out :128 bits (texte chiffré)
// w :44 mots, 32 bits chacun (clé étendue)
state =in
w=KeyExpansion(key) //Phase d'expansion de la clé (chiffre efficacement la clé elle-même)
AddRoundKey(state, w[0 , Nb-1]) //Initial Round
for round =1 step 1 to Nr–1 //128 bit=10 rounds, 192 bit =12 rounds, 256 bit =14 rounds
SubBytes(state ) //Fournir une non-linéarité dans le chiffrement
ShiftRows(state) //Évite que les colonnes soient chiffrées indépendamment, ce qui peut
affaiblir l'algorithme
MixColumns(state) //Transforme chaque colonne et ajoute une diffusion au
chiffrement
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) //Génère une sous-clé et
la combine avec state.
end for
SubBytes(state) //Dernier tour et nettoyage.
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1] )
out =état
Faites défiler ou faites glisser le coin de la boîte vers développer au besoin.
Les longueurs de clé AES peuvent être de 128, 192 ou 256 bits. En règle générale, plus la longueur de la clé est grande, meilleure est la protection. La taille de la clé est proportionnelle au nombre de cycles CPU nécessaires pour chiffrer ou déchiffrer un bloc :128 bits nécessitent 10 cycles, 192 bits nécessitent 12 cycles et 256 bits nécessitent 14 cycles.Les chiffrements par blocs représentent des algorithmes de chiffrement basés sur une clé symétrique et fonctionnant sur un seul bloc de données. Les chiffrements modernes sont basés sur les travaux de Claude Shannon sur les chiffrements de produits en 1949. Un mode de fonctionnement de chiffrement est un algorithme qui utilise un chiffrement par bloc et décrit comment appliquer à plusieurs reprises un chiffrement pour transformer de grandes quantités de données composées de nombreux blocs. La plupart des chiffrements modernes nécessitent également un Vecteur d'initialisation (IV ) pour garantir des textes chiffrés distincts même si le même texte en clair est entré à plusieurs reprises. Il existe plusieurs modes de fonctionnement tels que :
Livre de codes électronique (ECB) :il s'agit de la forme de cryptage AES la plus basique, mais elle est utilisée avec d'autres modes pour créer une sécurité plus avancée. Les données sont divisées en blocs et chacun est chiffré individuellement. Des blocs identiques produiront des chiffrements identiques, ce qui rend ce mode relativement faible.
Cipher Block Chaining (CBC) :Messages en clair Xorés avec le texte chiffré précédent avant d'être chiffrés.
Cipher Feedback Chaining (CFB) :Similaire à CBC mais forme un flux de chiffrements (la sortie du chiffrement précédent alimente le suivant). CFB dépend du chiffrement par bloc précédent pour fournir une entrée au chiffrement actuel en cours de génération. En raison de la dépendance des chiffrements précédents, CFB ne peut pas être traité en parallèle. Les chiffrements en continu permettent de perdre un bloc pendant le transport, mais les blocs suivants peuvent récupérer des dommages.
Output Feedback Chaining (OFB) :Similaire à CFB, il s'agit d'un chiffrement en continu mais permet d'appliquer des codes de correction d'erreur avant le cryptage.
Compteur (CTR) :transforme un chiffrement par bloc en chiffrement par flux mais utilise un compteur. Le compteur d'incrémentation alimente chaque chiffre par bloc en parallèle permettant une exécution rapide. Le nonce et le compteur sont concaténés pour alimenter le chiffrement par bloc.
CBC avec code d'authentification de message (CBC-MAC) :Un MAC (également connu sous le nom de balise ou MIC) est utilisé pour authentifier un message et confirmer que le message provient de l'expéditeur indiqué. Le MAC ou le MIC est ensuite ajouté au message pour vérification par le récepteur.
Ces modes ont été construits pour la première fois à la fin des années 1970 et au début des années 1980 et ont été préconisés par le National Institute of Standards and Technology dans FIPS 81 en tant que modes DES. Ces modes fournissent un cryptage pour la confidentialité des informations mais ne protègent pas contre la modification ou la falsification. Pour ce faire, une signature numérique est nécessaire et la communauté de la sécurité a développé CBC-MAC pour l'authentification. La combinaison de CBC-MAC avec l'un des modes hérités était difficile jusqu'à ce que des algorithmes comme AES-CCM soient établis, qui fournissent à la fois l'authentification et le secret. CCM signifie Compteur avec Mode CBC-MAC.
CCM est un mode de cryptage important utilisé pour signer et crypter les données et est utilisé dans une pléthore de protocoles couverts dans ce livre, notamment Zigbee, Bluetooth Low Energy, TLS 1.2 (après échange de clé), IPSEC et 802.11 Wi-Fi WPA2.AES-CCM utilise des chiffrements doubles :CBC et CTR. Le mode AES-CTR ou compteur est utilisé pour le déchiffrement général du flux de texte chiffré entrant. Le flux entrant contient une étiquette d'authentification chiffrée. AES-CTR déchiffrera la balise ainsi que les données de charge utile. Une « balise attendue » est formée à partir de cette phase de l'algorithme. La phase AES-CBC de l'algorithme balise en entrée les blocs déchiffrés de la sortie AES-CTR et l'en-tête d'origine de la trame. Les données sont cryptées; cependant, les seules données pertinentes nécessaires à l'authentification sont la balise calculée. Si la balise calculée AES-CBC diffère de la balise AES-CTR attendue, il est alors possible que les données aient été falsifiées pendant le transport.
La figure ci-dessous illustre un flux de données chiffré entrant qui est à la fois authentifié à l'aide d'AES-CBC et déchiffré à l'aide d'AES-CTR. Cela garantit à la fois le secret et l'authenticité de l'origine d'un message :
cliquez pour agrandir l'image
Mode AES-CCM.
Technologie de l'Internet des objets
- La route vers la sécurité industrielle de l'IoT
- Sécurisation du vecteur de menace IoT
- Sécurité de l'IoT :à qui incombe la responsabilité ?
- Tout devient IoT
- Sécurité IoT – Un obstacle au déploiement ?
- Sécuriser l'IoT par la tromperie
- Automatisation et IoT :un mariage parfait pour la logistique et la sécurité des soins de santé
- La sécurité renforce le véritable potentiel de l'IoT
- Une année en revue :12 considérations relatives à la sécurité de l'IoT