Jai lu ça
Un flux typique cipher chiffre le texte brut un octet à la fois, bien quun chiffrement de flux puisse être conçu pour fonctionner sur un bit à la fois ou sur des unités plus grandes quun octet à la fois.
(Source: Cryptographie et sécurité réseau , William Stallings.)
Un chiffrement par bloc crypte un bloc à la fois. Le bloc peut avoir une taille dun octet ou plus ou moins. Cela signifie que nous pouvons également chiffrer un bloc dun octet à laide dun chiffrement de flux en tant que flux.
Alors, quelle est exactement la différence entre un chiffrement de flux et un chiffrement par bloc?
Commentaires
- À mon humble avis, de nombreux concepts / définitions ne sont pas exactement tranchés mais ont des limites dans un sens plutôt fluide. Ils sont utilisés comme tels car ils sont pratiques dans le discours où il existe généralement des contextes appropriés pour aider à une compréhension plus exacte. Il y a donc des redondances. Je suppose quune bonne analogie avec le problème ici est » un homme riche » contre » un pauvre homme « .
- Le premier paragraphe de la question semble être copié mot à mot de Cryptographie et sécurité des réseaux (William Stallings, section 6.3). Vous devez toujours attribuer la source de tout matériel que vous copiez à partir de sources externes; voir crypto.stackexchange.com/help/referencing .
- Un chiffrement de flux peut utiliser ou ‘ enveloppe ‘ un chiffrement par bloc. Par exemple, AES SIC peut être utilisé pour générer le flux de clés. Le fait que le flux de clés mesure N fois la taille du bloc na aucune incidence sur la longueur du chiffrement / des textes simples
Answer
Un chiffrement par bloc est une fonction déterministe et calculable des clés $ k $ -bit et $ n $ -bit (texte en clair) blocs en blocs $ n $ -bit (texte chiffré). (Plus généralement, les blocs ne doivent pas être de taille en bits, $ n $ -character-blocks peut également tenir ici). Cela signifie que lorsque vous cryptez le même bloc en clair avec la même clé, vous obtiendrez le même résultat. (Nous voulons normalement aussi que la fonction soit inversible, cest-à-dire que, étant donné la clé et le bloc de texte chiffré, nous pouvons calculer le texte en clair.)
Pour réellement chiffrer ou déchiffrer un message (de nimporte quelle taille), vous ne » t utiliser le chiffrement par bloc directement, mais le mettre dans un mode de fonctionnement . Le mode le plus simple serait le mode livre de codes électronique (ECB) , qui coupe simplement le message en blocs, applique le chiffrement à chaque bloc et renvoie les blocs résultants. (Ce nest généralement pas un mode sécurisé, cependant.)
Certains premiers schémas de chiffrement comme celui utilisé par César pourraient être catégorisés comme un « chiffrement par bloc avec des blocs à 1 caractère dans ECB -mode « . Ou généralement, tout ce qui a un livre de codes .
Nous utilisons généralement dautres modes de fonctionnement, qui incluent un vecteur dinitialisation et une sorte de retour dinformation, de sorte que chaque bloc de chaque message est chiffré dune manière différente.
A flux chiffré est une fonction qui mappe directement les clés $ k $ -bit et les textes en clair de longueur arbitraire en texte chiffré (même longueur arbitraire), dans un tel façon que les préfixes du texte en clair mappent aux préfixes du texte chiffré, cest-à-dire que nous pouvons calculer la partie de départ du texte chiffré avant que la partie de fin du texte en clair ne soit connue. (Souvent, la taille des messages peut être limitée à des multiples dune certaine « taille de bloc », mais généralement avec des blocs plus petits comme des octets entiers ou autres.)
Si une partie du texte en clair se répète, le texte chiffré correspondant est généralement nest pas la même – différentes parties du message seront chiffrées de différentes manières.
Souvent, ces chiffrements de flux fonctionnent en produisant un keystream à partir de la clé réelle (et peut-être un vecteur dinitialisation ) et ensuite simplement XOR-le avec le message – ils sont appelés chiffrements de flux synchrones . Dautres chiffrements de flux peuvent faire varier le chiffrement des parties futures du message en fonction des parties précédentes.
Certains modes de fonctionnement de chiffrement par bloc créent en fait un chiffrement de flux synchrone, comme CTR et OFB .
Vous ne devriez jamais réutiliser une clé (et IV, le cas échéant) dun chiffrement de flux synchrone (qui inclut des chiffrements par blocs dans les modes de streaming) pour différents messages, car cela peut conduire à des compromis. (Et même pour le même message, cela montrera que vous avez répété un message.)
Notez que dans lutilisation réelle, vous voudrez également un MAC, par exemple protection de lintégrité, pour votre message. (Certains schémas sont cassés en cas dattaque de texte chiffré choisi, par exemple, et un tel MAC lempêchera (si vous ne passez le message au décrypteur quaprès avoir vérifié le MAC).)
Commentaires
- Quand choisiriez-vous entre un flux et un bloc? Y a-t-il une différence de sécurité? Ou la vitesse de chiffrement?
- @anoopelias Les chiffrements par blocs sont généralement lents par rapport aux chiffrements Stream. De plus, je ne suis pas sûr, mais je pense que les chiffrements de flux sont bons pour assurer la sécurité des informations tandis que les chiffrements par blocs sont bons pour assurer la sécurité informatique
- En ce qui concerne le dernier paragraphe – pourriez-vous sil vous plaît fournir un lien pour un exemple dans lequel lajout dun MAC protège contre une attaque par texte chiffré choisi?
Réponse
Mathématiquement, un chiffrement par bloc est juste un famille de permutation pseudo-aléatoire sur lensemble $ \ {0,1 \} ^ n $ de $ n $ -bits blocs. (En pratique, nous avons généralement besoin dun moyen efficace de calculer la permutation inverse.) Un chiffrement par bloc seul nest pas très utile pour la cryptographie pratique, du moins à moins que vous ayez simplement besoin de chiffrer petit messages qui entrent chacun dans un seul bloc.
Cependant, il savère que les chiffrements par blocs sont des blocs de construction extrêmement polyvalents pour la construction dautres outils cryptographiques: une fois que vous avez un bon chiffrement par blocs, vous pouvez facilement construire nimporte quoi, des chiffrements de flux aux fonctions de hachage, en passant par les codes dauthentification de message, les fonctions de dérivation de clé, les générateurs de nombres pseudo-aléatoires, les pools dentropie, etc. basés sur un seul chiffrement par bloc.
Toutes ces applications ne sont pas nécessairement besoin dun chiffrement par bloc; par exemple, beaucoup d’entre eux pourraient être basés sur n’importe quelle fonction pseudo-aléatoire qui n’a pas besoin d’être une permutation (mais, commodément, il y a « sa lemme qui dit quune permutation pseudo-aléatoire fonctionnera néanmoins). De plus, de nombreuses constructions sont indirectes; par exemple, vous pouvez construire une fonction de dérivation de clé à partir dun code dauthentification de message, que vous pouvez construire à partir dune fonction de hachage, que vous pouvez — mais ne pas avoir à — construire à partir dun bloc chiffrer. Mais quand même, si vous avez un chiffrement par bloc, vous pouvez construire tout le reste à partir de celui-ci.
De plus, ces constructions sont généralement accompagnées de preuves de sécurité (conditionnelles) qui réduisent la sécurité des fonctions construites à celle du chiffrement par bloc sous-jacent. Ainsi, vous navez pas besoin de mener à bien la tâche laborieuse et peu fiable de cryptanalyse chacune de ces fonctions séparément —, vous êtes libre de concentrer tous vos efforts sur le chiffrement par blocs, sachant que toute confiance que vous aurez sur la sécurité du chiffrement par blocs se traduit directement par la confiance sur toutes les fonctions qui en découlent.
Évidemment, tout cela est très pratique si vous travaillez, disons, sur une petite plate-forme intégrée où inclure un code efficace et sécurisé pour de nombreuses primitives cryptographiques distinctes pourrait être difficile et coûteux. Mais même si vous « nêtes pas sur une plate-forme aussi contrainte, lécriture et lanalyse de code cryptographique de bas niveau peuvent être laborieuses en raison de la nécessité de prêter attention à des éléments tels que les attaques par canal secondaire . Il est plus facile de se limiter à un nombre limité de blocs de construction de bas niveau et de créer tout ce dont vous avez besoin à partir de ceux-ci.
De plus, même sur des plates-formes rapides avec beaucoup de mémoire, comme les processeurs de bureau, implémenter des opérations cryptographiques de bas niveau directement dans le matériel peut être beaucoup plus rapide que de les faire dans le logiciel — mais ce nest pas pratique de le faire pour plusieurs dentre eux . En raison de leur polyvalence, les chiffrements par blocs sont dexcellents candidats pour limplémentation matérielle (comme dans le jeu dinstructions AES pour les processeurs x86 modernes).
Et les chiffrements de flux, alors?
Mathématiquement, un chiffrement de flux — au sens le plus général du terme — est aussi une famille de fonctions pseudo-aléatoires inversibles à clé, mais sur lensemble $ \ {0,1 \} ^ * $ de chaînes de bits de longueur arbitraire plutôt que sur des blocs de longueur limitée.
(Il y a quelques subtilités ici; par exemple, la plupart des constructions de chiffrement de flux nécessitent que lentrée inclue une valeur unique nonce , et ne le fait pas garantir la sécurité — dans le sens dindiscernabilité dune fonction vraiment aléatoire — si le même nonce est utilisé pour deux entrées différentes. De plus, comme il ny a pas de distribution uniforme sur les fonctions inversibles de $ \ {0,1 \} ^ * $ à elle-même pour choisir des fonctions aléatoires, nous devons définir soigneusement ce que cela signifie pour un chiffrement de flux de paraître « indiscernable du hasard », et cette définition a des implications pratiques en matière de sécurité — par exemple, la plupart des chiffrements de flux perdent la longueur du message. En pratique, nous avons généralement besoin de ces chiffrements de flux, en en fait, être « streaming », dans le sens où des flux binaires dentrée arbitrairement longs peuvent être chiffrés — et déchiffrés — en utilisant o stockage constant et temps linéaire dans la longueur du message.)
Bien sûr, les chiffrements de flux sont beaucoup plus immédiatement utiles que les chiffrements par blocs: vous pouvez les utiliser directement pour chiffrer des messages de nimporte quelle longueur. Cependant, il savère quils « sont aussi beaucoup moins utiles comme éléments de base pour dautres outils cryptographiques: si vous avez un chiffrement par blocs, vous pouvez facilement transformez-le en un chiffrement de flux , alors que transformer un chiffrement de flux arbitraire en un chiffrement par bloc est difficile, voire impossible .
Alors, pourquoi les gens se donnent-ils la peine de concevoir des chiffrements de flux dédiés, alors, si les chiffrements par blocs peuvent tout aussi bien faire le travail? La plupart du temps, la raison est la vitesse: parfois, vous avez besoin dun chiffrement rapide pour chiffrer beaucoup de données, et il y en a em> conceptions de chiffrement de flux dédié vraiment rapides. Certaines de ces conceptions sont également conçues pour être très compactes à implémenter, que ce soit dans le logiciel ou le matériel ou les deux, de sorte que si vous navez vraiment besoin que dun chiffrement de flux, vous pouvez économiser sur la taille du code / circuit en utilisant lun de ces chiffrements au lieu dun chiffrement par bloc général.
Cependant, ce que vous gagnez en vitesse et en compacité, vous perdez en polyvalence. Pour e xample, il ne semble pas y avoir de moyen simple de créer une fonction de hachage à partir dun chiffrement de flux , donc si vous en avez besoin (et vous parce que les fonctions de hachage, en plus dêtre utiles en elles-mêmes, sont également des blocs de construction communs pour dautres outils de cryptographie), vous devrez les implémenter séparément. Et, devinez quoi, la plupart des fonctions de hachage sont basées sur des chiffrements par blocs, donc si vous en avez un, vous pouvez également réutiliser le même chiffrement par blocs pour le chiffrement (à moins que vous nayez vraiment besoin de la vitesse brute du chiffrement de flux dédié).
Commentaires
- Je me suis demandé sil était nécessaire davoir deux termes différents. Daprès ce que vous avez expliqué, un chiffrement de flux est simplement un cas particulier dun chiffrement par bloc, cest-à-dire un cas pour le cas limite où le n dans lensemble {0,1} ^ n est 1. Donc, je soutiendrais que le courant distinction des terminologies.
- @ Mok-KongShen En fait, un chiffrement de flux nest pas simplement un chiffrement par bloc de taille de bloc 1 (autre que les chiffrements monoalphabétiques classiques, qui peuvent être supposés être les deux). Un chiffrement de flux traduit généralement les bits / octets / … du flux différemment, en fonction de létat interne actuel du chiffrement, tandis quun chiffrement par bloc pour la même entrée a la même sortie (et est donc généralement utilisé dans un » mode de fonctionnement » pour créer un chiffrement de flux).
- @PauloEbermann. IMHO vous avez répondu pour moi à une question de CodesinChaos conscerning » dynamique et variabilité « .
- @ Mok-KongShen Non il na ‘ t. Le seul avantage dun chiffrement de flux dédié par rapport à un chiffrement par bloc dans un mode approprié est la performance. Vous ne pouvez ‘ ignorer les modes de chaînage, car personne de bon sens nutilise les chiffrements par blocs sans chaînage approprié.
- @CodesInChaos. Différentes applications ont des exigences de performances différentes. Pour crypter par ex. un e-mail, on na ‘ pas besoin des performances qui seraient souhaitables pour le chiffrement, par exemple, dun fichier vidéo.
Réponse
Un chiffrement par bloc par lui-même mappe n
bits à n
bits à laide dune clé. cest-à-dire quil sagit dune permutation pseudo-aléatoire à clé. Il ne peut accepter des textes plus longs ou plus courts.
Pour crypter un message, vous avez toujours besoin dun mode de chaînage. ECB est lun de ces modes de chaînage (et un très mauvais), et ce nest pas le pur chiffrement par bloc. Même la BCE consiste en des « traitements complémentaires ». Ces modes de chaînage peuvent avoir des propriétés très différentes.
Lun des modes de chaînage les plus populaires, le mode compteur (CTR) construit un chiffrement de flux synchrone à partir dun chiffrement par blocs.Un autre mode, CFB construit un chiffrement de flux auto-synchronisant, avec des propriétés quelque part entre celles de CBC et un chiffrement de flux synchrone.
Donc, votre hypothèse selon laquelle il ny a pas de chiffrement entre le flux et les blockciphers nest pas vraiment vraie. Cryptographes préférez simplement les construire à partir de la primitive de chiffrement par blocs bien comprise, au lieu de créer un système complètement nouveau.
Jappellerais Vigenère un chiffrement de flux, bien que celui-ci ait une période beaucoup trop courte. Il utilise un codage de 26 symboles au lieu dun codage de 2 symboles, mais cela ne signifie pas que ce nest pas un chiffrement de flux. Regardez Solitaire / Pontifex pour une construction moderne dun chiffrement de flux avec 26 symboles.
Commentaires
- Si je ne ‘ t err, » chaînage » dans le chiffrement par blocs est normalement utilisé dans le contexte du » chaînage de blocs « , cest-à-dire rendant les blocs successifs dépendants les uns des autres afin de rendre le analyse plus difficile. Donc IMHO ECB naurait par définition aucun effet de chaînage en tant que tel.
- Vous vous trompez. Un mode de chaînage bon aura ces propriétés, mais de mauvais modes existent toujours!
Réponse
Il existe deux types de chiffrement de base
- Symétrique. Il utilise la même clé pour le chiffrement et le déchiffrement.
- Asymétrique. Il utilise deux clés différentes (publique et privée) pour crypter et décrypter.
Block Cipher et Stream Cipher font partie de Symmetric Encryption. Stream Cipher génère un flux de clé étendu à partir de la clé donnée par lutilisateur, puis XoR avec du texte en clair (pour le cryptage) / crypté (pour le décryptage).
Alors que Block Cipher prend un bloc de données en entrée, exécutez plusieurs tours dessus avec le mélange de clés et produire du texte chiffré. Les blocs de chiffrement ont divers modes de fonctionnement dont le mode de compteur (CTR) fonctionne de la même manière que le chiffrement de flux. Un nombre séquentiel est entré dans le chiffrement par bloc, et sa sortie est Xored avec Plaintext pour créer du texte chiffré. Dans ce mode de fonctionnement, seul le code de cryptage du chiffrement par bloc est requis. Il ny a pas besoin de code de décryptage, pour le décryptage, nous entrons simplement le même numéro séquentiel pour bloquer le chiffrement, et Xored sa sortie avec Ciphertext pour obtenir du texte brut. Parfois, un nom est utilisé avec le compteur, donc lentrée le chiffrement par bloc est divisé en deux, cest-à-dire un nom fixe et un compteur incrémental.
Autre mode de fonctionnement sont: –
- ECB (assure la confidentialité)
- CBC et CTR (assure la confidentialité et est sécurisé de manière sementale contre lattaque Chosen Plaintext)
- EAX, CCM et GCM (fournit un cryptage authentifié)
Plus de détails peuvent être trouvés ICI