La cloche.

Il y a ceux qui ont lu cette nouvelle devant vous.
Abonnez-vous pour recevoir des articles frais.
E-mail
Nom
Nom de famille
Comment voulez-vous lire la cloche
Sans spam

Le terme "performance du processeur" est connu dans la société représente un paramètre objectif calculé, mesuré dans les flops. Cependant, la majorité le mesure dans les Gigaherertiens, en rien, croyant que c'est la même chose. Le terme "performance de code" ne connaît personne et explique immédiatement pourquoi.

La raison est que je viens de lui venue avec lui et jusqu'à ce que je ne disiez personne. Cependant, la productivité du code, ainsi que la performance du processeur, présente des caractéristiques objectives pouvant être mesurées. Cet article est que la productivité du code effectué par le noyau de processeur.

Quelle est la mesure de la performance du code? Depuis que j'ai parlé le premier à en parler, je le mesurerai dans des navires RTT à droite de l'enregistreur;).

Maintenant sérieusement. Dans les transformateurs modernes, les principales transformations sont des actions sur des nombres de 32 bits, tout ce qui est d'autre et de grandes exotiques. Par conséquent, nous examinerons la chose principale - opérations avec des chiffres 32 bits. Selon vous, combien d'opérations 32 bits peuvent effectuer le noyau du processeur moderne en même temps?

L'étudiant répondra à un, son enseignant pensera et dire que quatre, professionnels - que, même si seulement douze opérations.

Donc, le code de programme qui charge tous les actionneurs du processeur simultanément tout au long du code du code, aura une capacité de 12 RTT-sho. Maximum! Honnêtement, j'avoue, je n'ai pas écrit un tel code, mais dans cet article, je vais essayer de faire un effort sur moi-même.

Je prouverai que le code avec l'exécution simultanée de douze opérations 32 bits est possible

Le code de programme qui utilise un actionneur dans le noyau du processeur aura naturellement des performances dans 1 RTT-SCI. Une telle performance du code peut "vanter" des programmes générés par des compilateurs de langages de haut niveau et des interprètes de machine virtuelle. Il n'est pas nécessaire de supposer que l'indicateur de chargement du processeur que l'on peut voir dans le gestionnaire de tâches OS peut servir de critère objectif pour l'efficacité du code. La charge du noyau de processeur peut être de 100%, mais le code de programme utilisera un actionneur dedans (1 performance RTT). Dans ce cas, à 100% de chargement, le noyau du processeur fonctionnera dans 1/12 de ses performances maximales. En d'autres termes, lorsque le démarrage maximum du processeur est affiché dans le gestionnaire de tâches Windows OS, ses performances réelles peuvent varier de 1 à 12 RTT. Voyant 100% dans la fenêtre de la fenêtre de performance sur un noyau de processeur, il est faux de supposer que tous les appareils exécutifs fonctionnent dans ce noyau, en aucun cas!

Le seul critère d'évaluation indirecte des travaux du noyau de processeur avec une performance maximale peut être sa consommation d'énergie et, par conséquent, le bruit du refroidisseur. Si le refroidisseur est incisif, alors oui - le téléchargement est allé au maximum. Cependant, il est temps de terminer avec des concepts généraux et de passer à une pratique dure.

Ventes traditionnelles de GOST 28147-89

Je ne suis pas un professionnel dans le domaine de la sécurité de l'information, mais toujours familier avec le sujet du cryptage. Cryptage fluide symétrique spécifiquement que j'ai été suspendu avec une conversation avec une cryptographie professionnelle, que je respecte profondément. Et, engagé dans ce sujet, j'ai essayé de faire exactement bien, et pas seulement bon, mais aussi rapidement, effectuer le nombre maximum d'opérations par unité de temps. En d'autres termes, devant moi, la tâche d'écrire un code de programme avec la valeur maximale de RTT.

La transformation cryptographique selon GOST 28147-89 est utilisée pour un cryptage d'informations simplifiées dans les canaux de communication et sur des lecteurs de disque.

Actuellement, la mise en œuvre du programme de ce GTST sur le Ron du circuitor central est universellement utilisée. Dans des méthodes de mise en œuvre de GOST bien connues, toutes les informations secrètes (clés de cryptage, blocs de changement) sont placées dans la RAM. Cela réduit la fiabilité du cryptage, car, avoir une vidage de RAM, vous pouvez identifier complètement tous les éléments secrets de la cryptocrémie. De plus, la méthode présente des limites à la vitesse, en raison de l'emplacement des principaux objets de cryptocréformage dans l'OP et du chargement incomplète d'actionneurs alu. Les processeurs modernes, la mise en œuvre d'un cryptocrocesseur à une méthode bien connue, peuvent fournir une vitesse de cryptage à 40 à 60 mégaoctets par seconde. Et si vous comprenez à la fin, la raison de la protection de la cryptocréformation faible et faible est la mise en œuvre du logiciel du bloc de substitution. Pour une description de celui-ci dans Invité, voir Fig. une.

Selon le paragraphe 1.2 du GTST, cette unité implémente les ordinateurs portables (quatre bits) de la permutation dans un mot de 32 bits, mais l'architecture du processeur X86/64 et son système de commande ne permet pas de manipuler efficacement le tétrad.

Pour la mise en œuvre logicielle du bloc de substitution, des tables spéciales sont utilisées dans la RAM, préparées à l'étape d'initialisation de la cryptofinction. Ces tables combinent les nœuds du tétrad de remplacement sur les tables d'octets d'une taille de 8 × 8 bits, ainsi que quatre tables de 256 pointes sont logées dans la RAM.

Dans des implémentations plus avancées, ces tables ont une taille de 1024 octets (256 mots de quatre octets). Ceci est fait pour mettre en œuvre dans les tableaux un décalage cyclique supplémentaire à 11 positions obtenus à la suite d'une substitution de mot de 32 bits (le prochain fonctionnement de l'algorithme de conversion selon GOST). Un exemple de la mise en œuvre de la GTONT pour cette méthode est affiché à l'annexe 1 (sur le disque).

Les informations de l'unité de substitution sont un composant secret de la cryptofin (comme il est formulé dans l'invité, voir Fig. 2).

L'emplacement de ces tables avec les clés du bloc de substitution dans le PO contrairement aux exigences de la GTONT (clause 1.7), car les informations secrètes deviennent disponibles pour les programmes tiers opérant sur l'installation de l'informatique. FSB, certifiant, y compris la mise en œuvre logicielle du cryptage dans GOST, examine cette violation, pour la mettre légèrement, condescendant. Si elle nécessite toujours une "feuille de figue" à installer dans l'OP FSB, les touches masquent l'opération XOR, puis pour les blocs de remplacement dans l'OP n'est pas requis, ils sont stockés sur le formulaire ouvert.

En bref, la FSB manque de telle mise en œuvre logicielle de cryptooprocesses, malgré la réduction explicite de la persistance d'une telle décision et de violation directe de leurs propres exigences pour GOST (paragraphe 1.7). Et ceci malgré les méthodes bien connues de piratage des chiffres de piratage grâce à la vidage réciproque de la mémoire ...

À la question de stocker des clés et des blocs de remplacement dans les registres internes du processeur, nous nous reviendrons un peu plus tard (il y a une solution belle et rapide), mais pour l'instant, seules les clés de cryptage que nous allons stocker dans des registres MMX, c'est plus fiable.

Mais il y a suffisamment de paroles, il est important dans le cadre du sujet à l'étude que ce code de programme a une performance dans 1 RTT-SCI. Maintenant, écrivez le code d'une capacité de 2 RTT-Shki.

Mise en œuvre multi-threadée GOST 28147-89

La seule possibilité d'accélérer les cryptooprocesseurs dans l'algorithme bien connu est l'introduction de multithreading. La signification d'un tel changement de la mise en œuvre de l'algorithme est de calculer plusieurs blocs de données à la fois en parallèle.

La plupart des programmeurs impliquent un traitement parallèle uniquement pour travailler plusieurs cœurs de processeur synchronisés par des interruptions et des sémaphores en mémoire.

Cependant, il existe une autre variante de traitement de données parallèle sur un noyau de processeur unique. Je vais expliquer cette pensée non évidente.

Les processeurs modernes ont dans leur composition au moins deux, puis trois ou six dispositifs arithmétiques et logiques. Ces alu (FPU, les blocs arithmétiques de l'adresse, etc.) peuvent fonctionner de manière indépendante les uns des autres, la seule condition de leur fonctionnement parallèle est des objets de programme non cycle avec lesquels elles fonctionnent. En d'autres termes, dans les commandes qui effectuent simultanément Alu, les adresses de mémoire et les numéros de registre doivent être différents. Dans les registres généraux et les adresses de mémoire auxquels divers actionneurs de processeurs sont traités, les opérations de disques ne doivent pas être effectuées.

En chargement du travail de tous les contrôles AllU, le bloc matériel spécial à l'intérieur du noyau du processeur - Le planificateur qui navigue sur le code exécutable est de la plongeur, à une profondeur de 32 à 64 octets. Si le planificateur détecte les commandes pouvant être lancées sur Allu sans conflit, elle les mène simultanément sur différents actionneurs. Dans le même temps, le mètre des commandes exécutées indique la commande exécutable (plusieurs d'entre eux sont dans un tel schéma), après quoi toutes les commandes ont déjà été exécutées.

La plupart des séquences de programme générées automatiquement (compilateurs) ne peuvent pas charger tous les ALU et les FPU situés dans le noyau de la CPU. Dans ce cas, l'équipement de processeur est inactif, ce qui réduit considérablement ses performances résultantes. Les développeurs de processeurs comprennent cela et introduisent les modes d'augmentation de la fréquence de base lorsque l'équipement n'est pas complètement utilisé. En outre, le système d'hypertrepection est également destiné à cela, et je vais utiliser ce système pour "appuyer sur" le code au maximum à l'avenir.

Compilateurs, même les machines virtuelles les plus optimisées et les plus optimisées, ne peuvent pas former de code optimisé du point de vue de la vitesse. Seul un programmeur avec des connaissances en génie peut écrire un tel code optimisé et l'outil d'écriture est exclusivement assemblé.

Une illustration caractéristique de la possibilité d'effectuer plusieurs flux de logiciels indépendants sur un noyau du processeur est la mise en œuvre du GOST, effectuée dans deux flux sur le seul noyau du processeur. L'idée du code est simple: il existe deux blocs de données de blocs pour cryptage / décryptage, mais un noyau du processeur qui se transformera. Vous pouvez effectuer la conversion de ces deux blocs de données séquentiellement et se fait jusqu'à présent. Dans ce cas, le temps requis pour la transformation est doublé.

Mais vous pouvez aller et sinon: alternez les commandes liées au traitement de différents blocs de données. GRAFICY, ces options sont présentées à la Fig. 3.


Sur la figure, l'exemple supérieur montre la procédure habituelle pour effectuer le traitement de deux blocs de données indépendants. Premièrement, le premier bloc est traité, puis le processeur traite au traitement du deuxième bloc. Naturellement, le temps résultant est égal à deux fois, ce qui est nécessaire pour traiter un bloc, et les actionneurs du noyau du processeur ne sont pas entièrement chargés.

Ce qui suit est un exemple avec des commandes alternées de différents threads de traitement. Dans ce cas, les commandes relatives à différents blocs de données alternent. Le planificateur choisit l'équipe indépendante les unes des autres et les transmet à les effectuer en Alu1 et Allu2. Le regroupement des première et deuxième équipes de flux sur ces alu est automatiquement mis en œuvre, car dans l'algorithme de travail du planificateur, un regroupement de commandements avec des données de données générales sur le même appareil exécutif est posé.

Pour qu'un tel code de programme fonctionne sans temps d'arrêt par Alu, il est nécessaire que chaque fil de programme ait fonctionné avec son ensemble de registres. Le cache de ce schéma devient un goulot d'étranglement (il n'a que deux ports de données émettant), de sorte que les clés sont stockées dans des registres MMX. Étant donné dans ce cas, les nœuds de remplacement (et le changement de vitesse) ne sont que la lecture en mémoire, elles peuvent être communes aux deux flux logiciels.

Ceci, bien sûr, une explication très simplifiée du principe de diffusion parallèle des flux de logiciels sur le seul noyau est vraiment beaucoup plus difficile. En pratique, il est nécessaire de prendre en compte l'architecture de convoyeur des appareils exécutifs, des restrictions sur l'accès simultané au cache et du bloc de registre Ron, la présence de nœuds d'adresse arithmétique, des commutateurs et beaucoup plus ... donc c'est un Sujet pour les professionnels pouvant être comptés sur les doigts ... une main.

La méthode de cryptage parallèle est effectivement implémentée uniquement pour le mode de fonctionnement 64 bits du processeur, car dans ce mode, il y a une quantité suffisante de Ron (jusqu'à 16 pièces!). Un exemple de la mise en œuvre de la GOST pour cette méthode est affiché à l'annexe 2 (sur le disque).

Il est clair que cette mise en œuvre du GOST a la performance de 2 Code RTT-SHKI. Et voyons maintenant comment cela affecte l'heure d'exécution.

Le cycle de cryptage d'un flux (Annexe 1) est de 352 tacts et, pendant ce temps, il est calculé 8 octets de données, pour la mise en œuvre de deux pages de la GTOST (Annexe 2), 416 cycles de processeur sont nécessaires, mais 16 octets sont calculés. . Ainsi, le taux de transformation résultant augmente de 80 à 144 mégaoctets pour un processeur avec une fréquence de 3,6 GHz.

Une peinture intéressante est obtenue: le code contient exactement deux fois plus d'équipes, et il n'est effectué que 15% de plus, mais je pense que les lecteurs ont déjà compris la raison de ce phénomène ...

Théoriquement, le code du deuxième exemple doit être effectué pour le même nombre d'horloges que le code du premier exemple, mais l'assemblage du planificateur se développe dans les ingénieurs Intel, mais aussi des personnes, et nous sommes tous loin d'être parfaits. Il est donc possible d'évaluer l'efficacité de leur création. Ce code fonctionnera sur un processeur AMD et vous pouvez comparer leurs résultats.

Si quelqu'un ne me croit pas, alors pour de tels incroyants, des programmes de test avec des comptoirs TACH sont attachés sur le disque. Programmes dans les codes source, naturellement sur l'assembleur, de sorte qu'il est possible de vérifier mes mots, et à la fois et de renverser des astuces de codage professionnel.

Utiliser des registres SSE et des équipes AVX de processeurs modernes pour la mise en œuvre du GOST 28147-89

Les processeurs modernes de l'architecture X86/64 sont dans leur composition un ensemble de registres SSE de 16 octets et des FPU spécialisés (au moins deux) pour effectuer diverses opérations sur ces registres. Il est possible de mettre en œuvre le GTST sur cet équipement et, dans ce cas, les nœuds de remplacement ne peuvent pas être placés sous forme de tables dans la RAM, mais directement sur les registres SSE sélectionnés.

Sur un registre SSE, deux tables de 16 lignes peuvent être placées à la fois. Ainsi, quatre registres SSE vous permettront d'accueillir entièrement toutes les tables de remplacement. La seule condition pour ce placement est l'exigence d'alternance, selon laquelle un octet Tetrads doit être placé dans différents registres de SSE. De plus, il est conseillé de placer les tétrades plus jeunes et seniors, respectivement, dans les octets plus jeunes et seniors SSE-registres.

Ces exigences sont déterminées par optimisation dans le cadre de la commande AVX disponible. Ainsi, chaque octet de registre SSE contiendra deux tétrades liées à différents octets du registre d'entrée du bloc de substitution et la position de l'octet sur le registre SSE correspond à l'index dans la table de remplacement du bloc de substitution.

Le schéma de l'un des placements possibles des nœuds de remplacement sur les registres SSE est illustré à la Fig. quatre.


Placer les informations secrètes des registres SSE des nœuds de remplacement augmente la protection des cryptooprocesseurs, mais une isolation complète de cette information secrète est possible conformément aux conditions suivantes:

  • Le noyau de processeur est traduit dans l'hôte de l'hyperviseur et le bloc d'interruption est désactivé de force (APIC). Dans ce cas, le noyau de processeur est entièrement isolé du système d'exploitation et des applications opérant sur une installation informatique.
  • Le chargement des registres SSE et l'isolation du noyau de calcul est effectué avant le début du début du système d'exploitation, optimal est l'exécution de ces procédures à partir du module de charge de confiance (MDZ).
  • Les programmes cryptopropedeurs pour GOST sont placés dans la zone non modifiable de la mémoire de l'installation informatique (BIOS ou dans la mémoire flash MDZ).

L'accomplissement de ces exigences permettra d'assurer une isolation complète et de l'immuabilité du code de programme du cryptoprocesseur et des informations secrètes utilisées dans elles.

Pour un échantillon efficace de SSE-registres, les commutateurs d'octets actuels sont utilisés dans le cadre des blocs FPU. Ces commutateurs vous permettent de passer de n'importe quel octet de source vers n'importe quel octet de récepteur, selon des index dans un registre spécial d'index SSE. De plus, en parallèle, transfert pour tous les 16 octets du récepteur SSE.

Avoir des nœuds de stockage dans SSE-registres et un commutateur multicanal dans des blocs FPU, vous pouvez organiser la transformation suivante dans le bloc de substitution (Fig. 5).

Dans ce circuit, le registre d'entrée dans chaque tétrade définit l'adresse de l'interrupteur correspondant, ce qui sur le bus de données transfère des informations sur le registre de sortie des lecteurs des nœuds de remplacement. Un tel schéma peut être organisé de trois manières:

  • Créez une conception de puce appropriée, mais c'est fantastique pour nous.
  • Reprogramment le microcode et créez votre propre commande de processeur pour implémenter cette fonction sur les processeurs existants - cela n'est plus une fiction, mais malheureusement, irréelle dans les conditions actuelles.
  • Ecrivez le programme sur les commandes AVX officielles. Options et pas très efficace, mais nous allons mettre en œuvre "ici et maintenant". Donc, cela viendra plus loin.

Le travail des commutateurs est géré par une équipe spéciale Trekhadres AVX VPSHUFB. Son premier opérande est un récepteur d'informations des commutateurs, la seconde - la source à laquelle les entrées des commutateurs sont connectées. Le troisième opérande est le registre de contrôle des commutateurs, dont chaque octet est associé au commutateur correspondant; La valeur en elle spécifie le numéro de direction à partir duquel le commutateur lit les informations. Description de cette commande de la documentation officielle Intel, voir Fig. 5. En figue. 6 montre que le schéma de travail de cette commande - Seule la moitié des registres de la SSE est décrit, pour la deuxième moitié, tout est similaire.


Le commutateur utilise uniquement les quatre bits plus jeunes pour déterminer la direction de commutation, le dernier bit de chaque pate est utilisé pour réinitialiser de force l'octet de récepteur correspondant, mais cette fonction de l'interrupteur dans notre cas n'est pas encore à la demande.

Le programme avec la sélection de Tetrad à travers les commutateurs FPU a été écrit, mais je ne l'ai même pas placé dans la demande - trop d'abattage. Avoir un registre de 128 bits et n'utilisez que 32 bits de l'informatique - non professionnels.

Comme on dit, "notre finition est l'horizon", alors squeeze si Squeeze ... Nous appuierons et plierons des paquets!

Ce n'est pas le jeu de mots et de la réalité de FPUE Housse - Les registres SSE peuvent être cassés en parties égales et effectuer les mêmes transformations sur ces pièces par une commande. Pour que le processeur comprenne cela, il existe un bec magique "P" - un paquet qui est mis avant l'équipe mnémonique et pas moins de becs magiques "Q", "D", "B", "B", qui sont mis à la fin et déclarent quelles parties des registres SSE sont divisées en cette commande.

Nous sommes intéressés par un régime de lots avec un enregistrement SSE pour quatre blocs de 32 bits; En conséquence, toutes les commandes auront le préfixe "P", et à la fin - le symbole "D". Cela permet à une commande de processeur parallèle de gérer quatre blocs de 32 bits à la fois, c'est-à-dire pour compter quatre blocs de données dans le parallèle.

Le programme mettant en œuvre cette méthode est disponible à l'annexe 3, ibid - toutes les explications.

Cependant, appuyez si appuyez sur! Dans les transformateurs modernes, il existe au moins deux unités FPU et deux threads de commandes indépendantes peuvent être utilisés pour télécharger complètement. Si vous alternez correctement les commandes de Streams indépendants, vous pouvez télécharger complètement les blocs FPU et obtenir immédiatement huit flux de données parallèles. Un tel programme a été écrit et il peut être consulté à l'annexe 4, il vous suffit d'examiner attentivement - vous pouvez voler des bobines. C'est ce qu'on appelle "le code n'est pas pour tout le monde ...".

Prix \u200b\u200bde la question

L'utilisation de registres SSE pour stocker les nœuds de remplacement est claire - elle donne une certaine garantie de l'isolement des informations secrètes, mais la signification du calcul de la cryptofinction elle-même sur le FPU est non évidente. Par conséquent, les mesures ont été mesurées par la mise en œuvre de procédures standard par méthode de remplacement direct conformément à GOST pour quatre et pour huit flux.

Pour quatre flux, la vitesse de 472 horloge de processeur a été obtenue. Ainsi, pour un processeur avec une fréquence de 3,6 GHz, un flux est considéré à une vitesse de 59 mégaoctets par seconde et quatre ruisseaux, respectivement à une vitesse de 236 mégaoctets par seconde.

Pour huit flux, le taux d'exécution de 580 horloges de processeur a été obtenu. Ainsi, pour un processeur avec une fréquence de 3,6 GHz, un flux est considéré à une vitesse de 49 mégaoctets par seconde et huit ruisseaux à une vitesse de 392 mégaoctets par seconde.

Au fur et à mesure que le lecteur peut remarquer, le code dans l'exemple n ° 3 comporte 4 performances RTT et le code de l'exemple n ° 4 comporte 8 performances RTT. Dans ces exemples, les registres SSE sont les mêmes que lors de l'utilisation de RON, seul le planificateur a réduit son efficacité. Il fournit maintenant une augmentation de 20% de la durée avec une augmentation de la longueur de code à deux fois.

De plus, ces résultats ont été obtenus à l'aide de commandes AVX universelles disponibles en processeurs Intel et dans des processeurs AMD. Si vous optimisez le processeur AMD, le résultat sera nettement meilleur. Il semble à travers la tendance, mais néanmoins, il est vrai, puis pourquoi: les processeurs AMD ont un ensemble supplémentaire d'équipes, la soi-disant expansion XOP et dans cet ensemble de commandements supplémentaires, il existe ceux qui simplifient considérablement la mise en œuvre du GOST algorithme.

Ceci fait référence aux commandes du changement de lot logique des octets et du décalage cyclique par lots des mots doubles. Dans les exemples donnés aux annexes 3 et 4, les séquences de commandes universelles qui implémentent la transformation nécessaire sont utilisées: dans le premier cas, une commande "inutile", et dans une autre affaire quatre commandes inutiles à la fois. Les réserves d'optimisation sont donc et considérables.

S'il s'agit d'une optimisation supplémentaire, il n'est pas lish de se souvenir de la présence de registres de 256 bits (registres YMM), en utilisant lesquels vous pouvez théoriquement deux fois la vitesse des calculs. Mais bien que ce soit juste une perspective, les processeurs actuellement lents sont très lents lorsque des instructions 256 bits sont effectuées (les FPU ont une largeur de chemin de 128 bits). Des expériences ont montré que sur les processeurs modernes, le compte dans 16 threads sur les registres YMM ne gagne pas de victoire. Mais il s'agit simplement tant que les nouveaux modèles de processeur seront sans aucun doute augmentés de la vitesse des commandes de 256 bits, puis l'utilisation de 16 flux parallèles deviendra appropriée et entraînera une augmentation encore plus importante de la vitesse du cryptoxrocesseur.

Théoriquement, vous pouvez compter sur la vitesse de 600 à 700 mégaoctets par seconde en présence de deux FPU dans le processeur avec une largeur du chemin de travail 256 bits chacun. Dans ce cas, nous pouvons parler du code d'écriture avec l'efficacité de 16 RTT, ce qui n'est pas une fiction, mais la perspective la plus proche.

Mode mixte

Encore une fois, la question du nombre de registres est manquante, il manque de promouvoir un tel algorithme. Mais le mode d'hypertrèse nous aidera. Le noyau du processeur a un deuxième ensemble de registres disponibles dans des processeurs logiques. Par conséquent, nous effectuerons le même code à la fois sur deux processeurs logiques. Dans ce mode de périphériques exécutifs, nous n'entraînerons bien sûr pas, mais par alternance, vous pouvez obtenir un chargement complet de tous les appareils exécutifs.

Il n'est pas nécessaire de compter sur une augmentation de 50% ici, un point étroit devient une mémoire cache, où les masques technologiques sont stockés, mais vous pouvez toujours obtenir une augmentation des mégaoctets supplémentaires. Cette option n'est pas donnée dans les applications (les macros sont similaires à celles utilisées dans Code par 8 RTT), mais il est disponible dans les fichiers de programme. Donc, si quelqu'un ne croit pas en la possibilité de cryptage à une vitesse de 500 mégaoctets par seconde sur un noyau de processeur, laissez les fichiers de test commencer. Il y a aussi des textes avec des commentaires afin que personne ne pensait que je suis une garde.

Un tel focus n'est possible que sur les processeurs Intel, AMD n'a que deux blocs FPU en deux modules de processeur (analogique du mode hypertrecking). Mais il y a quatre plus seuls, qui n'utilisent pas de péché.

Vous pouvez conduire les modules de processeur "Bulldozer" en mode, similaire au mode HyperTrajding, mais pour exécuter des modules différents dans une conversion de fil à Ron et dans un autre flux sur les registres SSE et obtenez le même 12 RTT. Je n'ai pas vérifié cette option, mais je pense, sur le code AMD à 12 RTT travaillera plus efficacement. Ceux qui souhaitent essayer, les programmes de test peuvent être corrigés pour travailler assez facilement sur les "bulldozers" assez facilement.

Qui a besoin?

Une question sérieuse, mais avec une réponse simple - elle est nécessaire pour tout le monde. Bientôt, nous allons tous sous-endormir les nuages, nous allons stocker et les données et programmes là-bas, et là, Oh, comment vous voulez équiper votre propre coin privé. Pour ce faire, vous devrez crypter le trafic et la vitesse de cryptocréformance sera le principal facteur déterminant dans un travail confortable dans le nuage. Le choix de l'algorithme de cryptage de nous est petit - GOST ou AES.

De plus, assez étrangement, le cryptage interne de l'algorithme AES s'avère beaucoup plus lent, les tests montrent la vitesse au niveau de 100 à 150 mégaoctets par seconde, ce qui est lorsque l'algorithme est du matériel! Le problème réside dans un compte à une seule-filetage et une unité de remplacement fonctionnant par des octets (tableau sur 256 lignes). Donc, GOST s'avère être plus efficace dans la mise en œuvre de l'architecture de X86 / 64, qui aurait pensé ...

C'est si nous parlons du niveau atteint de la vitesse de cryptage. Et si vous gardez à l'esprit les délices théoriques dans le domaine de l'augmentation de l'efficacité du code, il n'est probablement pas nécessaire pour personne. 3-6 spécialistes RTT ne sont pratiquement pas non, les compilateurs génèrent généralement du code au niveau de 1-2,5 RTT, et la masse principale de programmeurs ne connaît pas l'assembleur et si elle connaît son orthographe, elle ne comprend pas les appareils du moderne processeur. Et sans ces connaissances que l'assembleur, que certains Si-Sharp sont là - aucune différence.

Mais tout n'est pas si triste: dans le "résidu à sec" après une semaine de nuits blanches, il y a un nouvel algorithme pour la mise en œuvre du GOST, qui est un péché de ne pas être breveté. Et les demandes de brevets (autant de trois) sont déjà décorées et déposées, alors, Lord Kommersant, construisez une remise des femmes et des enfants.

Algorithme GOST 28147-89 et Magma Cipher (GOST R 34.12-2015)

Schéma général de l'algorithme. L'algorithme décrit par GOST 28147-89 "Système de traitement d'informations". Protection cryptographique. L'algorithme de transformation cryptographique "est une norme nationale de cryptage symétrique (avant le 1 er janvier 2016) et est tenue de mettre en œuvre dans des outils certifiés pour la protection cryptographique des informations utilisées dans les systèmes d'information de l'État et, dans certains cas, dans les systèmes commerciaux. La certification des informations sur la protection des informations cryptographiques est nécessaire pour protéger les informations qui composent le secret de l'État de la Fédération de Russie et la confidentialité des informations doit être fournie conformément à la loi applicable. En outre, dans la Fédération de Russie, l'utilisation de l'algorithme GOST 28147-89 est recommandée pour protéger les systèmes d'information bancaire.

L'algorithme GOST 28147-89 (Fig. 2.21) est basé sur le circuit FAISTEL et chiffre des informations par des blocs de 64 bits, divisé en deux sous-blocs de 32 bits (I et, et R). Bloquer R, Il est traité par la fonction de la conversion ronde, après quoi sa valeur est pliée avec la valeur du sous-bloc LJ, puis les sublocs sont modifiés dans des endroits. L'algorithme a 16 ou 32 tours en fonction du mode de cryptage (imit le calcul ImagePEP ou d'autres modes de cryptage).

Figure. 2.21.

Dans chaque cycle de l'algorithme, les transformations suivantes sont effectuées.

1. Superposition de roue. Sous-bloc du contenu R i. Modulo plié 2 32 avec clé ronde K. KJ. - Il s'agit d'une partie 32 bits de la clé source utilisée comme ronde. L'algorithme GOST 28147-89 NS utilise la procédure d'expansion clé, la clé de cryptage source 256 bits est représentée sous forme de concaténation (embrayage) de huit connexions 32 bits (Fig. 2.22): K 0, k (, k t k, k a, k 5, à 6, à 7.

Dans le processus de cryptage, l'une de ces bouchons est utilisée. À

Du 1er au 24ème tour - En séquence directe:

Du 25 mais le 32ème tour - dans l'ordre inverse:

Figure. 2.22. Algorithme de cryptage de clé de bâtiment GOST 28147-89

2. Remplacement des onglets. Après avoir superposé la clé de cadenas R i. Il est divisé en huit parties mais 4 bits, la valeur de chacune d'elles est remplacée séparément conformément à sa table de remplacement (bloc S). Un total de huit blocs s est utilisé - S 0, S, S 2, S 3, S 4, S 5, S 6, S 7. Chaque bloc S de l'algorithme GOST 28147-89 est un vecteur (réseau unidimensionnel) avec ^ éléments numérotés de 0 à 15. Les valeurs du bloc S sont des nombres de 4 bits, c'est-à-dire nombres entiers de 0 à 15.

L'élément est pris à partir de la table S-block, dont le numéro de séquence coïncide avec la valeur qui est venue à l'entrée de la substitution.

Exemple 2.6.

Soit un bloc S de la forme suivante:

Supposons à l'entrée de ce bloc S, la valeur de 0100 2 \u003d 4. Le 4ème élément de la table de substitution sera rempli de la sortie S-block, c'est-à-dire 15 \u003d 1111 2 (la numérotation des éléments commence par zéro).

les visages de remplacement ne sont pas définis par la norme, comme cela est fait, par exemple, dans le Sifre des. Les valeurs remplaçables des tables de substitution rendent difficile l'algorithme de cryptoanalyse. Dans le même temps, la résistance de l'algorithme dépend de manière significative de leur choix correct.

Malheureusement, l'algorithme GOST 28147-89 a des substitutions "faibles", lors de l'utilisation de laquelle l'algorithme peut être facilement découvert avec des méthodes cryptanalytiques. Le "faible" désigne, par exemple, une table de substitution triviale, dans laquelle l'entrée est égale à la sortie (tableau 2.16).

Tableau 2.16

Exemple d'un bloc s faible

On pense que les valeurs spécifiques des tables de remplacement doivent être enregistrées secrètement et constituent un élément clé à long terme, c'est-à-dire Agir pour une période beaucoup plus longue que des clés séparées. Cependant, les valeurs secrètes des tables de remplacement ne font pas partie de la clé et ne peuvent pas augmenter sa longueur effective.

En effet, des tables de remplacement secrètes peuvent être calculées à l'aide de l'attaque suivante qui est pratiquée dans la pratique:

  • Clé zéro installée et recherchez "zéro vecteur", c'est-à-dire Valeurs z. = F (0) Où F - Algorithme de fonction de conversion ronde. Cela nécessite environ 2 opérations de cryptage de tests;
  • En utilisant un vecteur zéro, les valeurs des tables de remplacement sont calculées, ce qui ne prend pas plus de 2 11 opérations.

Cependant, même si la confidentialité des tables de remplacement est violée, le chiffre reste extrêmement élevé et ne devient pas inférieur à la limite admissible.

Il est également supposé que les tables de substitution sont communes à tous les sites de cryptage dans un système de protection cryptographique.

L'amélioration de la structure des blocs S est l'un des problèmes les plus intensivement étudiés dans le domaine des chiffres à blocs symétriques. En substance, il est nécessaire que tout changement dans les entrées des blocs S soit versé dans aléatoire sur le type de changement de sortie. D'une part, les blocs S Grands, l'algorithme plus stable aux méthodes de cryptanalyse linéaire et différentielle. D'autre part, une grande table de substrat est plus compliquée à la conception.

Dans des algorithmes modernes, des blocs S sont généralement un vecteur (réseau unidimensionnel) contenant 2 "T-éléments de bits. L'entrée de bloc détermine le numéro de l'élément dont la valeur est la sortie du bloc S.

Pour la conception de S-Blocks, un certain nombre de critères ont été mis en avant. La table de remplacement doit satisfaire:

  • critère d'avalanche strict;
  • Le critère d'indépendance des bits;
  • L'exigence de non linéarité des valeurs d'entrée.

Pour remplir la dernière exigence, il a été proposé de définir une combinaison linéaire jE. morceaux ( i \u003d. 1, ..., t) Valeurs de la table de remplacement bentfonctions (eng, courbé - Décrochement, dans ce cas, des fonctions linéaires). Les fonctions bent forment une classe spéciale de fonctions booléennes caractérisées par la classe la plus élevée de non-linéarité et la correspondance d'un critère d'avalanche stricte.

Dans certaines œuvres de S-Blocks, il est proposé de vérifier l'exécution d'un effet d'avalanche garanti de l'ordre dans - lorsqu'une modification d'un bit d'entrée change, au moins les bits de sortie des modifications du bloc S. La propriété de l'effet d'avalanche garantie de la commande de 2 à 5 offre des caractéristiques de diffusion suffisamment bonnes des S-Blocks pour tout algorithme de cryptage.

Lors de la conception de substitutions suffisamment importantes, les approches suivantes peuvent être utilisées:

  • La sélection aléatoire (pour les blocs S d'une petite taille peut conduire à la création de substitutions faibles);
  • Sélection aléatoire avec un test ultérieur pour la conformité à divers critères et le rejet des blocs S Faibles en S;
  • La sélection manuelle (pour les blocs S de grandes tailles prend trop de temps);
  • Une approche mathématique, telle que la génération utilisant des fonctions BENT (cette approche est appliquée dans l'algorithme moulé).

Vous pouvez proposer la procédure suivante pour concevoir des blocs s individuels de l'algorithme GOST 28147-89:

  • Chaque bloc S peut être décrit par quatre fonctions logiques, chacune des fonctions doit avoir quatre arguments logiques;
  • Il est nécessaire que ces fonctions soient assez compliquées. Cette exigence de difficulté ne peut pas être exprimée formellement, cependant, elle peut être nécessaire comme condition nécessaire selon laquelle les fonctions logiques correspondantes enregistrées sous la forme minimale (c'est-à-dire avec la durée minimale possible de l'expression) à l'aide des opérations logiques de base n'étaient pas plus courtes qu'une valeur requise ;
  • Des fonctions séparées, même utilisées dans différentes tables de remplacement, devraient être entre elles suffisamment.

En 2011, une nouvelle attaque «réunion réfléchissante au milieu» a été proposée, une persistance légèrement réduite du GOST 28147-89 (de 2256 à 2225). Les meilleurs résultats de la cryptanalyse de l'algorithme à partir de 2012 réduisent sa résistance à 2 192, nécessitant une taille relativement grande du ciIPhertext et la quantité de données préformées. Malgré les attaques proposées, au niveau actuel de développement d'équipements informatiques, GOST 28147-89 conserve une résistance pratique.

Cipher "Magma" (GOST R 34.12-2015).Le GOST 28147-89 standard a agi en Russie depuis plus de 25 ans. Pendant ce temps, il a montré une résistance suffisante et une bonne efficacité des mises en œuvre logicielles et matérielles, y compris sur des périphériques basculants. Bien que des attaques cryptanalytiques aient été proposées, ce qui réduit ses estimations de durabilité (les meilleurs à 2 192), ils sont loin de la possibilité d'une mise en œuvre pratique. Il a donc été décidé d'inclure l'algorithme GOST 28147-89 dans une norme de cryptage symétrique nouvellement développée.

Dans la boutique 2015, deux nouvelles normes cryptographiques nationales ont été adoptées: la technologie de l'information GOST R 34.12-2015 "GOST R 34.12-2015". Protection de l'information cryptographique. Ciphers bloquants "et GOST R 34.13-2015" Technologie de l'information. Protection de l'information cryptographique. Modes d'exploitation des chiffres de blocs ", qui entrent en vigueur le 1er janvier 2016

Le gant-R 34.12-2015 standard contient une description de deux chiffres à blocs avec une longueur de bloc 128 et 64 bits. SIFR GOST 28147-89 avec des blocs fixes de substitution non linéaire est inclus dans le nouveau GOST R 34.12-2015 sous forme de chiffre 64 bits appelé "magma" ("magma").

Vous trouverez ci-dessous les blocs de remplacement inscrits dans la norme:

L'ensemble de S-blocs indiqués dans la norme fournit les meilleures caractéristiques qui déterminent la persistance d'un cryptoalgorithme à une cryptanalalyse différentielle et linéaire.

Selon le Comité technique de la normalisation de la protection cryptographique des informations (TC 26), la fixation des blocs de la substitution non linéaire rendra l'algorithme GOST 28147-89 plus unifié et aidera à exclure l'utilisation de blocs "faibles" de substitution non linéaire. En outre, la fixation de la norme de tous les paramètres à long terme du chiffre est responsable de la pratique internationale adoptée. Le nouveau standard GONT R 34.12-2015 est terminé de manière terminologique et conceptuellement associé aux normes internationales ISO / CEI 10116 "Technologies de l'information. Méthodes de sécurité. Modes d'exploitation pour «Ciphers à blocs -Bit» (ISO / CEI 10116: 2006 Technologies de l'information - Techniques de sécurité - Modes de fonctionnement pour un chiffrement à blocs N-BIT) et série ISO / CEI 18033 »Technologies de l'information. Méthodes et outils de sécurité. Algorithmes de cryptage ": ISO / CEI 18033-1: 2005" Partie 1. Généralités "(ISO / CEI 18033-1: 2005 Technologies de l'information - Techniques de sécurité - Algorithmes de cryptage - Partie 1: Généralités) et ISO / CEI 18033-3: 2010 "Partie 3. Ciphers de blocs" (ISO / CEI 18033-3: 2010 (Technologie de l'information - Algorithmes de cryptage - Partie 3: Ciphers de bloc)).

La norme de GOST P 34.12-2015 comprend également un nouveau chiffrement de bloc («sauterelle») avec une taille de bloc de 128 bits. On s'attend à ce que ce chiffre soit résistant à toutes les attaques des attaques d'aujourd'hui sur des chiffres de blocage.

Modes de fonctionnement des chiffres à blocs (remplacement simple, gamming, jeu de retour de retour, rétroaction, gammure de retour de siprotext, simplement remplacer par l'engagement et la production d'imitambage) sont supprimés dans une norme distincte GOST R 34.13-2015, qui correspond à l'international international adopté entraine toi. Ces modes sont applicables à la fois au ciphér "Magma" et à la nouvelle "Grasshopper" Cipher.

  • Un décalage cyclique bit dans la gauche de 11 bits est effectué. Le décryptage est effectué dans le même schéma, mais avec une autre utilisation des clés: du 1er au 8ème tour du déchiffrement - en ligne: du 9ème à la 32ème manche du déchiffrement - dans l'ordre inverse: comparé Au Sipher des A chez Gost 28147-89, il y a les avantages suivants: une clé significativement plus longue (256 bits contre 56 dans la Sifra des), l'attaque sur laquelle par l'intégrité totale de l'ensemble clé par faible amomérant est impossible; Un calendrier d'utilisation de clé simple, qui simplifie la mise en œuvre de l'algorithme et augmente la vitesse de calcul. Design S-Blocks GOST 28147-89. De toute évidence, le schéma de l'algorithme GOST 28147-89 est assez simple. Cela signifie que la plus grande charge de chiffrement tombe sur la table de remplacement. Valeurs de l'onglet
  • Panasepko S. P. Algorithmes de cryptage: Annuaire spécial. SPB: BHV-Peter-Burg, 2009.
  • Kara O. Attaques de réflexion sur les chiffres de produits. URL: http://eprint.iacr.org/2007/043.pdf.
  • Norme de cryptage russe: résistance réduite. URL: http://cryptofaq.ru/index.php/2010-12-23-18-20-21/2010-18-20-18-22-09/90-2011-02-01-07-47- 27
  • Achekseyev E. K., Schdslyaev S. V. GOST 28147-89: "Ne vous pressez pas de l'enterrer."

L'algorithme défini par GOST 28147-89 a la longueur de la clé de cryptage de 256 bits. Il chiffre des informations par des blocs 64 bits (tels algorithmes sont appelés bloc), qui sont ensuite divisés en deux sous-blocs 32 bits (N1 et N2) (Figure 1). Le sous-bloc de N1 est traité d'une certaine manière, après quoi sa valeur est pliée avec la valeur de la Subblok N2 (l'addition est effectuée par module 2, c'est-à-dire que l'opération Logic XOR est utilisée - «Hors ou»), puis le sous-sol -blocs sont changés dans des endroits. Cette transformation est effectuée un certain nombre de fois ("rondes"): 16 ou 32, en fonction du mode de fonctionnement de l'algorithme. Dans chaque tour, deux opérations sont effectuées.

Figure 1. Schéma de l'algorithme GOST 28147-89.

Le premier est l'imposition de la clé. Le contenu de la sous-rotation N1 se plie dans le module 2 avec une partie 32 bits de la clé KX. Une clé de cryptage complète est représentée comme une concaténation de 32 bits Connections: K0, K1, K2, K3, K4, K5, K6, K7. Pendant le processus de cryptage, l'une de ces bouchons est utilisée - en fonction du nombre rond et du mode de fonctionnement de l'algorithme.

Deuxième opération - remplacement tabulaire. Après avoir appliqué la clé, le sous-bloc N1 est divisé en 8 parties de 4 bits, chacun remplacé conformément au tableau de remplacement de cette partie du sous-bloc. Ensuite, le décalage cyclique binaire du sous-document laissé à 11 bits est effectué.

Les remplacements de table (boîte de substitution - S-Box) sont souvent utilisés dans des algorithmes de cryptage modernes, il est donc nécessaire de clarifier la manière dont une telle opération est organisée. Les valeurs de sortie de la table sont enregistrées dans le tableau. Le bloc de données d'une dimension spécifique (dans notre cas - 4 bits) a sa propre représentation numérique, qui détermine le nombre de la valeur de sortie. Par exemple, si la boîte en S a la forme 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 et le bloc 4 bits "0100 "Entrée à l'entrée (valeur 4), puis, selon la table, la valeur de sortie sera égale à 15, c'est-à-dire" 1111 "(0 A 4, 1 A 11, 2 A 2 ...).

L'algorithme, défini par GOST 28147-89, fournit quatre modes de fonctionnement: un simple remplacement, gamming, gamming de retour et génération d'imitheds. Ils utilisent la même transformation de chiffrement décrite ci-dessus, mais étant donné que le but des modes est différent, cette conversion est effectuée dans chacune d'elles de différentes manières.

En mode de remplacement simple, 32 rondes décrites décrites ci-dessus sont effectuées dans la simplicité de chaque 64 bits d'informations. Dans le même temps, la prise 32 bits est utilisée dans la séquence suivante:

K0, K1, K2, K3, K4, K5, K6, K7, K0, K1, etc. - en rondes du 1er au 24;

K7, K6, K5, K4, K3, K2, K1, K0 - En rondes du 25 au 32ème.

Le déchiffrement de ce mode est effectué de la même manière, mais avec une séquence d'application légèrement différente de la connexion:

K0, K1, K2, K3, K4, K5, K6, K7 - en rondes du 1er au 8;

K7, K6, K5, K4, K3, K2, K1, K0, K7, K6, etc. - en rondes du 9ème au 32ème.

Tous les blocs sont cryptés indépendamment l'un de l'autre, c'est-à-dire le résultat du cryptage de chaque bloc dépend uniquement de son contenu (le bloc de texte correspondant). S'il existe plusieurs blocs identiques du texte original (ouvert), les blocs correspondants de CIPHERText seront également identiques, ce qui donne des informations utiles supplémentaires pour tenter d'ouvrir le ciphera de cryptoanalitics. Par conséquent, ce mode est principalement utilisé pour chiffrer la clé de cryptage eux-mêmes (plusieurs systèmes sont très souvent implémentés, dans lesquels les touches sont cryptées les unes sur les autres). Pour le cryptage des informations elles-mêmes, deux autres modes d'exploitation - les gammures de diplôme et de retour d'information sont destinés.

Dans le mode Imaging Gamm, chaque unité de texte ouverte est bloquée par module 2 avec un bloc gamma de chiffrement de 64 bits. Gamma Cipher est une séquence spéciale qui donne certaines opérations avec des registres N1 et N2.

  • 1. Dans les registres N1 et N2, leur remplissage initial est enregistré - la valeur 64 bits appelée Syncopionel.
  • 2. Il est crypté avec le contenu des registres N1 et N2 (dans ce cas - Syncropters) en mode de remplacement simple.
  • 3. Le contenu du registre N1 consiste dans le module (232 - 1) avec la constante C1 \u003d 224 + 216 + 28 + 24 et le résultat de l'addition est enregistré dans le registre N1.
  • 4. Le contenu du registre N2 est formé par module 232 avec une constante C2 \u003d 224 + 216 + 28 + 1 et le résultat de l'addition est écrit au registre N2.
  • 5. Le contenu des registres N1 et N2 sont introduits à la sortie sous la forme d'un bloc gamma de chiffrement de 64 bits (dans ce cas, N1 et N2 forment le premier bloc de la gamma).

Si le prochain bloc gamma est requis (c'est-à-dire qu'il est nécessaire de poursuivre le cryptage ou le déchiffrement), retourne à l'opération 2.

Pour déchiffrer, le gamma est produit de la même manière, puis l'opération XOR est à nouveau appliquée aux bits du texte crypté et de la gamma. Étant donné que cette opération est réversible, dans le cas d'un gamma correctement généré, le texte source est obtenu (tableau 1).

Tableau 1.Cryptage et décryptage en mode gamming

Pour déterminer le chiffrement de l'utilisateur, la même clé, la même clé et la même valeur de la synchronisation de la synchronisation, utilisée lors du cryptage des informations, devrait être la même clé. Sinon, il ne sera pas possible d'obtenir le texte source du crypté.

Dans la plupart des implémentations de l'algorithme GOST 28147-89, le syncopier n'est pas secret, mais il existe des systèmes où le syncopier est le même élément secret que la clé de cryptage. Pour de tels systèmes, la longueur effective de la clé de l'algorithme (256 bits) augmente par un autre 64 bits de synchronisation secrète, qui peut également être considérée comme un élément clé.

Dans le mode de rétroaction de gammage pour remplir les registres N1 et N2, à partir du 2e bloc, pas du bloc précédent de la gamma, mais le résultat du cryptage du bloc précédent du texte ouvert (Figure 2). Le premier bloc de ce mode est généré par le précédent similaire à celui précédent.

Figure 2. Développement de la gamma Cipher en mode gammage de retour.

Considérant le mode de génération de simultes, il est nécessaire de déterminer le concept du sujet de la génération. L'imitrobristentage est une somme de contrôle cryptographique calculée à l'aide de la clé de cryptage et destinée à vérifier l'intégrité des messages. Lors de la génération d'un imitOD, les opérations suivantes sont effectuées: la première unité de 64 bits du réseau d'informations pour lequel la simplicité est calculée est écrite dans les registres N1 et N2 et cryptées dans le mode abrégé de remplacement simple (les premiers 16 rounds de 32 sont effectués). Le résultat obtenu est additionné par module 2 avec le bloc d'informations suivant tout en maintenant le résultat en N1 et N2.

Le cycle est répété jusqu'au dernier bloc d'information. À la suite de ces transformations, des contenus 64 bits de registres N1 et N2 ou une partie de celui-ci sont appelés simplicité. La taille de la simplicité est sélectionnée, en fonction de la fiabilité requise des messages: la longueur du SIMPSTAB, r bit est la probabilité que la modification du message reste inaperçue, égale à 2-r. 32 bits de Le simpristening est utilisé, c'est-à-dire la moitié des registres. Cela suffit, car, comme toute somme de contrôle, l'imiton est conçue principalement pour protéger contre les distorsions aléatoires d'informations. Pour protéger les mêmes données sur la modification de données délibérées, d'autres méthodes cryptographiques sont utilisées - principalement une signature numérique électronique.

Lors de l'échange d'informations, le Simpristenger est une sorte de moyen de contrôle supplémentaire. Il est calculé pour le texte ouvert lorsqu'il est crypté des informations et est envoyé avec le CIPHERText. Après le décryptage, une nouvelle valeur imitative est calculée, ce qui est comparé à l'envoi. Si les valeurs ne correspondent pas - cela signifie que le ciphertext a été déformé pendant la transmission ou lorsque le déchiffrement a été utilisé des touches incorrectes. La simplicité est particulièrement utile pour vérifier le décryptage correct des informations clés lors de l'utilisation de plusieurs régimes.

L'algorithme GOST 28147-89 est considéré comme un algorithme très fort - actuellement des méthodes plus efficaces n'ont été proposées pour sa divulgation que la "force grossière mentionnée ci-dessus. Sa haute résistance est obtenue principalement en raison de la grande longueur de la clé - 256 bits. Lors de l'utilisation de syncopies secrètes, la longueur de la clé effective augmente à 320 bits et la transe de la table de substitution ajoute des bits supplémentaires. De plus, la résistance de Cryptost dépend du nombre de rondes de transformations, qui, selon GOST 28147-89, devraient être 32 (l'effet complet de la dispersion des données d'entrée est atteint après 8 rounds).

Les avantages de GOST 28147-89 sont la présence de protection contre l'imposition de fausses données (production de l'imitava) et le même cycle de cryptage dans les quatre algorithmes Gost.

DES LA NORME DE CRYPAGE DOMESTIQUE DOMAINES PLUS PRATICS POUR LA MISE EN ŒUVRE LOGICIELLE.

Contrairement à l'American des Du dans la norme nationale, une clé plus longue est appliquée - 256 bits. En outre, la norme russe propose d'utiliser 32 rounds de cryptage, tandis que DES DEF. 16.

Ainsi, les principaux paramètres de l'algorithme de transformation cryptographique pour GOST 28147-89 sont les suivants: La taille du bloc est de 64 bits, la taille de la clé est de 256 bits, le nombre de tours est de 32.

L'algorithme est un réseau de chaîne classique. Le bloc de données crypté est divisé en deux parties identiques, la droite R et la gauche L. Le côté droit est plié avec la connexion du cycle et à travers un certain algorithme crypte la partie gauche. Avant le tour suivant, les parties gauche et droite sont changées dans des endroits. Une telle structure permet d'utiliser le même algorithme pour le cryptage et de déchiffrer le bloc.

Les opérations suivantes sont utilisées dans l'algorithme de cryptage:

  • ajuster les mots par module 2 32;
  • le décalage cyclique du mot à gauche au nombre de bits spécifié;
  • addition bit bitwise par module 2;
  • remplacement sur la table.

À différentes étapes des algorithmes Gost, les données qu'ils utilisent sont interprétées et sont utilisées de différentes manières. Dans certains cas, les éléments de données sont traités en tant que réseaux de bits indépendants, dans d'autres cas - en tant qu'intéger sans signe, en troisième, comme ayant un élément complexe de structure constitué de plusieurs éléments plus simples.

Structure ronde GOST 28147-89

La structure d'une partie de GOST 28147-89 est illustrée à la Fig. 5.1.

Le bloc de données crypté est divisé en deux parties, qui sont ensuite traitées comme des entiers séparés de 32 bits sans signe. Premièrement, la moitié droite du bloc et l'emplacement du cycle sont pliés par module 2 32. Ensuite, la substitution de bloc est faite. La valeur 32 bits obtenue à l'étape précédente (note IT S) est interprétée comme une matrice de huit blocs de code 4 bits: S \u003d (S 0, S 1, S 2, S 3, S 4, S 5, S 6, S 7). Ensuite, la valeur de chacun des huit blocs est remplacée par un nouveau, qui est sélectionnée par la table des substitutions comme suit: La valeur du bloc S I est remplacée par I-th, dans l'ordre de l'élément (numérotation de zéro ) du nœud Ième du remplacement (IE I-Th Tableaux de remplacement des lignes, numérotation de zéro). En d'autres termes, il est sélectionné comme remplacement de la valeur de bloc du numéro de bloc avec un numéro de numéro égal au nombre du bloc remplacé et le numéro de colonne égal à la valeur du bloc est remplacé sous forme de 4 bits. nombre integer non négatif. Dans chaque ligne de la table de remplacement, le nombre est enregistré de 0 à 15 dans n'importe quel ordre sans répétition. Les valeurs des éléments de substitution sont extraites de 0 à 15, comme dans quatre bits soumis à la substitution, un entier peut être enregistré sans signe dans la plage de 0 à 15. Par exemple, la première chaîne du bloc S peut contenir de telles valeurs: 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11 . Dans ce cas, la valeur du bloc S 0 (quatre nombres de bit plus jeunes 32 bits S) sera remplacée par un nombre qui se situe en position, dont le nombre est égal à la valeur du bloc remplaçable. Si S 0 \u003d 0, il sera remplacé par 5, si S 0 \u003d 1, il sera ensuite remplacé par 8, etc.


Figure. 5.1.

Après avoir fixé la substitution, tous les blocs de 4 bits sont à nouveau combinés en un seul mot 32 bits, qui est ensuite décalé de manière cyclique de 11 bits vers la gauche. Enfin, en utilisant une opération cassée "La somme du module 2" Le résultat est combiné à la moitié gauche, à la suite de laquelle la nouvelle moitié droite de R i est obtenue. La nouvelle partie gauche l i est prise égale à la partie la plus jeune de l'unité convertie: l i \u003d r i-1.

La valeur obtenue du bloc transformé est considérée comme le résultat de l'exécution d'une partie de l'algorithme de cryptage.

Procédures de cryptage et de décryptage

GOST 28147-89 est un chiffre de bloc, donc conversion de données réalisée par des blocs dans le soi-disant cycles de base. Les cycles de base sont exécutés à plusieurs reprises pour le bloc de données du cycle principal, discutés par nous plus tôt, en utilisant différents éléments de clé et diffèrent de l'autre par l'ordre d'utilisation des éléments clés. Chaque cycle est utilisé l'une des huit connexions 32 bits possibles.

Considérez le processus de création d'une branche. Dans GOST, cette procédure est très simple, notamment par rapport aux des. La clé KE 256 bits K est divisée en huit connexions 32 bits, notées par K 0, K 1, K 2, K 3, K 4, K 5, K 6, K 7. L'algorithme comprend 32 rounds, chaque bouchon de cryptage est donc utilisée en quatre tours de la séquence présentée sur la table 5.1.

Tableau 5.1. Séquence de connexion avec cryptage
Rond 1 2 3 4 5 6 7 8
Construction complète K 0 K 1. K 2. K 3. K 4. K 5. K 6. K 7.
Rond 9 10 11 12 13 14 15 16
Construction complète K 0 K 1. K 2. K 3. K 4. K 5. K 6. K 7.
Rond 17 18 19 20 21 22 23 24
Construction complète K 0 K 1. K 2. K 3. K 4. K 5. K 6. K 7.
Rond 25 26 27 28 29 30 31 32
Construction complète K 7. K 6. K 5. K 4. K 3. K 2. K 1. K 0

Le processus de déchiffrement est effectué sur le même algorithme que le cryptage. La seule différence est d'utiliser la connexion K i. Lors du décodage, la fiche doit être utilisée dans l'ordre inverse, à savoir, comme indiqué sur

La cloche.

Il y a ceux qui ont lu cette nouvelle devant vous.
Abonnez-vous pour recevoir des articles frais.
E-mail
Nom
Nom de famille
Comment voulez-vous lire la cloche
Sans spam