web-dev-qa-db-fra.com

Avantages et inconvénients de Stream vs Block Ciphers

Les algorithmes de chiffrement tels que Blowfish, AES, RC4, DES et Seal sont implémentés dans l'une des deux catégories de chiffres. Quels sont les avantages/inconvénients du type de chiffrement?

66
Eric Warriner

Alors que les deux sont des chiffrements symétriques, les chiffrements de flux sont basés sur la génération d'un flux de clés cryptograpic "infini", et en l'utilisant pour chiffrer un bit ou un octet à la fois (similaire au pavé unique), tandis que les chiffrements par blocs fonctionnent sur de plus gros morceaux de données (c'est-à-dire des blocs) à la fois, combinant souvent des blocs pour une sécurité supplémentaire (par exemple AES en mode CBC).

  • Les chiffrements de flux sont généralement plus rapides que le bloc, mais cela a son propre prix.
  • Les chiffrements de blocs nécessitent généralement plus de mémoire, car ils fonctionnent sur de plus gros morceaux de données et ont souvent un "report" des blocs précédents, tandis que, puisque les chiffrements de flux ne fonctionnent que sur quelques bits à la fois, ils ont des besoins en mémoire relativement faibles (et donc moins chers à implémenter dans des scénarios limités tels que les périphériques intégrés, les micrologiciels et le matériel en particulier).
  • Les chiffrements de flux sont plus difficiles à implémenter correctement et sujets à des faiblesses basées sur l'utilisation - puisque les principes sont similaires à ceux du pavé unique, le flux de clés a des exigences très strictes. D'un autre côté, c'est généralement la partie la plus délicate et peut être déchargée par exemple. une boîte externe.
  • Parce que les chiffrements par blocs chiffrent un bloc entier à la fois (et ont en outre des modes de "rétroaction" qui sont les plus recommandés), ils sont plus sensibles au bruit lors de la transmission, c'est-à-dire que si vous gâchez une partie des données, tout le reste est probablement irrécupérable. Alors qu'avec les chiffrements de flux, les octets sont chiffrés individuellement sans connexion à d'autres blocs de données (dans la plupart des chiffrements/modes), et prennent souvent en charge les interruptions sur la ligne.
  • De plus, les chiffrements de flux ne fournissent pas de protection ou d'authentification d'intégrité, tandis que certains chiffrements de blocs (selon le mode) peuvent fournir une protection d'intégrité, en plus de la confidentialité.
  • En raison de tout ce qui précède, les chiffrements de flux sont généralement les meilleurs dans les cas où la quantité de données est inconnue ou continue - comme les flux réseau. Les chiffrements de blocs, d'autre part, ou plus utiles lorsque la quantité de données est pré-connue - comme un fichier, des champs de données ou des protocoles de demande/réponse, tels que HTTP où la longueur du message total est déjà connue au niveau du début.
48
AviD

Un chiffrement de bloc est un algorithme polyvalent qui implémente une permutation dépendante des clés de valeurs qui sont des séquences d'un nombre fixe de bits (appelés "blocs"). Il peut être utilisé pour divers rôles dans de nombreux types de protocoles cryptographiques. Un de ces rôles est le chiffrement en masse de longs flux de données; pour réaliser une telle chose, le chiffrement par bloc doit être utilisé avec un mode de fonctionnement (aka "mode de chaînage") approprié, le traditionnel étant CBC et le nouveau mode branché étant CTR.

Un chiffrement de flux est un algorithme spécialisé destiné au chiffrement en masse de longs flux de données. L'idée est qu'en perdant la polyvalence du chiffrement par blocs, il serait possible de créer un algorithme plus efficace (c'est-à-dire quelque chose qui crypte les données plus vite).

Les deux chiffrements de blocs avec un mode de chiffrement orienté flux, et les chiffrements de flux, peuvent rencontrer des problèmes de sécurité si la même clé est utilisée deux fois, pour deux flux distincts, sans avoir un caractère approprié, unique/aléatoire Vecteur d'initialisation. Pour le cryptage CBC, l'IV doit être une nouvelle séquence de bits uniformément aléatoire, de la même taille qu'un bloc, pour chaque nouveau message. Les bons chiffrements de flux acceptent également un IV. Un chiffrement de flux traditionnel appelé RC4 est sans IV (sa spécification n'indique pas où ni comment un IV pourrait être inséré), ce qui a provoqué beaucoup de chaos et a donné un mauvais nom au concept de chiffrement de flux.

Pour des chiffrements de flux plus récents, plus sécurisés (et plus rapides), voir portefeuille eSTREAM . Ces algorithmes ont fait l'objet d'une analyse assez approfondie par de nombreux cryptographes et sont considérés comme "assez sûrs".

Un chiffrement de flux peut être converti en générateur de nombres pseudo-aléatoires en chiffrant une longue séquence d'octets de valeur zéro. En fait, de nombreux chiffrements de flux (mais pas tous) fonctionnent en interne en étant un PRNG, générant une longue séquence d'octets pseudo-aléatoires dépendants des clés, qui est ensuite combinée (par XOR au niveau du bit) avec les données à chiffrer (ou déchiffrer), donc chiffrer zéro octet équivaut alors à omettre complètement le XOR. Par conséquent, les chiffrements de flux sont souvent utilisés comme PRNG personnalisé.

26
Thomas Pornin

Un avantage des chiffrements de flux qui n'ont pas été mentionnés précédemment est qu'ils n'ont pas besoin de remplissage (les chiffrements de blocs fonctionnent sur des blocs complets, donc si vous n'avez pas assez de données, vous devez en générer plus). Et surprise (pas vraiment, la cryptographie est le domaine où Murphy est partout), le remplissage peut être mal fait, comme illustré par exemple dans Practical Padding Oracle Attacks .

De plus, la sécurité des chiffres de bloc dépend à peu près de leur mode de fonctionnement, vous voyez toujours ECB utilisé ici et là parfois et ce n'est pas beaucoup mieux que pas de crypto du tout.

Fondamentalement, vous ne pouvez pas dire que l'un est meilleur que l'autre, il faut regarder un cryptosystème complet pour porter un jugement sur la sécurité.

9
Bruno Rohée

Stream Ciphers chiffre les données en clair avec un flux aléatoire de bits (généralement avec un XOR car il peut être inversé facilement). Si vous avez des données de 128 bits, vous utiliserez un strem psedurandom de 128 bits ( votre clé) pour crypter.

Block Ciphers chiffre les données en texte brut un bloc à la fois avec la même transformation (en fonction de la clé). Vous avez donc vos données 128 bits, le chiffrement les divise en blocs (comme 4 blocs de 32 bits) et appliquez la même transformation à chaque bloc obtenant 4 blocs chiffrés, qui combinés formeront le cryptogramme final.

Bien sûr, à cause de cela, les Block Cyphers sont plus sûrs mais coûteux à utiliser en termes de complexité matérielle. Les chiffrements de flux sont plus rapides et "bon marché", mais ils peuvent être susceptibles de problèmes de sécurité s'ils sont mis en œuvre de manière incorrecte.

1
gbr