Compréhension et conception de services avec la blockchain (Bitcoin, Ethereum)

Résumé de la publication

Cette technologie est une invention qui risque de changer complètement les cartes dans tous les domaines, on peut déjà voir son application dans les domaines nécessitant un tier de confiance, comme la monnaie avec différents concept comme les cryptomonnaies même plus encore avec la monnaie libre qui est un système qui permet la création monétaire directement par les utilisateurs, il y aura aussi de grands changements dans la logistique, les sites permettant la mise en relation comme Airbnb, Uber, blabla car, etc.

Ses applications sont nombreuses, on peut même espérer organiser une démocratie, une vraie démocratie ou chaque citoyen pourrait faire valoir son vote. On peut même dans un futur proche avoir l’ambition de gérer la politique d’un politique à partir d’une blockchain et d’une IA. Beaucoup d’essais, de réflexions sont en cours.

Concernant l’article, Nous allons aborder la technologie de la blockchain par des exemples pour vous permettre de comprendre le nouveau paradigme qui est proposé grâce à cette technologie.

Ensuite nous prendrons le temps de comprendre la valeur ajoutée de la blockchain avec des exemples illustrés, ensuite nous expliquerons les concepts permettant de réaliser une blockchain et ses variantes possibles que ce soit les méthodes de consensus, les fonctions de hachage, etc. Nous détaillerons comment s’organise la sécurité d’une blockchain pour se prémunir des fraudes de type double dépense, création de transaction frauduleuse, etc.

Nous verrons par la suite les typiques de fonctionnement de la blockchain Bitcoin et Ethereum. Pour finir, nous développerons une application permettant de voter via une blockchain avec Ethereum et les fonctions du Dapp.

Vous serez enfin apte à comprendre tous les enjeux autour de la blockchain, son fonctionnement et tous les articles techniques de la presse informatique liés à la blockchain.

Objectifs de la publication

  • Comprendre le fonctionnement de la monnaie et de la blockchain
  • Comprendre le fonctionnement de Bitcoin
  • Comprendre le fonctionnement d’Ethereum
  • Développement d’application pour la Blockchain
  • Construction d’une application pour la Blockchain

CHAPITRE 1 Introduction à la Blockchain

Blockchain est la nouvelle vague de perturbations qui a déjà commencé à repenser les interactions commerciales, sociales et politiques, et tout autre moyen d’échange de valeur. Encore une fois, il ne s’agit pas seulement d’un changement, mais d’un phénomène rapide qui est déjà en mouvement et annonce un nouveau paradigme. On compte déjà plus de 40 institutions financières de premier plan et de nombreuses entreprises au travers des industries qui ont commencé à explorer la blockchain pour réduire les coûts de transaction, accélérer le temps de transaction, réduire le risque de fraude, et d’éliminer l’intermédiaire ou les services intermédiaires dans tous un grand nombre de domaines. Certains essaient de réinventer les systèmes et services existants pour les amener à un nouveau niveau et aussi trouver de nouveaux types d’offres de services et d’autres réinvente leurs métiers au travers de la blockchain.

Nous couvrirons la blockchain plus en détail tout au long de l’article. Vous pouvez suivre les chapitres sur la barre à droite sur la blockchain ou choisissez seulement ceux qui vous sont pertinents. Ce chapitre explique ce qu’est la blockchain, comment elle a évolué, et son importance dans le monde d’aujourd’hui avec quelques utilisations et cas d’utilisation. Commençons par détailler au travers de son histoire la blockchain.

Histoire de Blockchain

L’une des premières perturbations numériques connues qui a jeté les bases d’Internet a été le TCP/IP (Protocole de contrôle de la transmission/Protocole Internet) dans les années 1970. Avant TCP/IP, c’était l’ère de la commutation de circuit, qui exigeait une connexion dédiée entre deux parties pour que la communication se produise. TCP/IP a mis au jour sa conception de commutation de paquets, qui était plus ouverte et peer-to-peer sans avoir besoin de préétablir une ligne dédiée entre les parties.

Lorsque l’Internet a été rendu accessible au public par l’entremise du World Wide Web (WWW) au début des années 1990, il était censé être plus ouvert et plus égalitaire. C’est parce qu’il a été construit au sommet de l’ouvert et décentralisé TCP / IP. Lorsque toute nouvelle technologie, en particulier révolutionnaire, frappe le marché, soit elles s’estompent d’elles-mêmes, soit elles créent un tel impact qu’elles deviennent la norme acceptée. Les gens se sont adaptés à la révolution WWW et ont tiré parti des avantages qu’elle avait à offrir de toutes les manières possibles. En conséquence, le World Wide Web a commencé à se dessiner d’une manière qui n’aurait peut-être pas été la façon exacte dont il a été imaginé. Il aurait pu être plus ouvert, plus accessible et plus égalitaire. Beaucoup de nouvelles technologies et d’entreprises ont commencé à s’appuyer sur elle et elle est devenue ce qu’elle est aujourd’hui, plus centralisée. Lentement et graduellement, les gens s’habituent à ce que la technologie offre.

Examinons de plus près le système bancaire et son évolution. À partir de l’époque du système de troc jusqu’aux monnaies fiduciaires, il n’y avait pas de réelle différence entre une transaction et son règlement parce qu’il ne s’agissait pas de deux entités distinctes. Par exemple, si Alice devait payer 10 € à Bob, elle remettait simplement un billet de 10 € à Bob et la transaction s’effectuait. Aucune banque n’était nécessaire pour débiter 10 € du compte d’Alice et de créditer de la même chose sur le compte de Bob ou d’établir un système de confiance pour s’assurer qu’Alice ne trompe pas Bob. Toutefois, les transactions directes avec quelqu’un qui n’est pas physiquement présent à proximité restaient difficiles. Ainsi, les systèmes bancaires ont évolué avec beaucoup plus d’offres de services et ont permis des transactions dans tous les coins du monde. Avec l’aide d’Internet, la géographie n’était plus une limitation et les services bancaires sont devenus plus faciles que jamais. Pas seulement les banques d’ailleurs : l’Internet a facilité de nombreux types différents d’échange de valeur sur le web.

La technologie a permis à quelqu’un de l’Inde de faire une transaction monétaire avec quelqu’un au Royaume-Uni, mais avec un certain coût. Il faut des jours pour régler de telles transactions et elles sont coûteuses. Une banque était toujours nécessaire pour imposer la confiance et assurer la sécurité de telles transactions entre deux parties ou plus. Et si la technologie pouvait permettre la confiance et la sécurité sans ces systèmes intermédiaires et centralisés ?

D’une manière ou d’une autre, cette partie (de la technologie imposant la confiance) manquait à l’appel, ce qui a entraîné le développement de systèmes centralisés tels que les banques, les services d’entiercement, les chambres de compensation, les bureaux d’enregistrement et de nombreuses autres institutions de ce type. Au sein de l’UE, on peut le modéliser par le système SEPA et l’une de ses briques les TARGET.

La Blockchain quant à elle, s’avère être cette pièce manquante du puzzle de la révolution Internet qui facilite un système sans confiance d’une manière cryptographiquement sécurisée.

Satoshi Nakamoto, le pseudonyme que le monde connaît, a dû sentir que les systèmes monétaires n’ont pas été touchés par la révolution technologique depuis les années 1980. Les banques ont formé les institutions centralisées qui maintenaient les registres des transactions, gouvernaient les interactions, faisaient respecter la confiance et la sécurité et réglementaient l’ensemble du système. L’ensemble du commerce repose sur ces institutions financières, qui servent de tiers de confiance pour traiter les paiements. La médiation des institutions financières augmente les coûts et le temps de règlement d’une transaction, et limite également la taille des transactions. La médiation était nécessaire pour régler les différends, mais cela signifiait que la transaction complètement non réversible n’était jamais possible. Il en a résulté une situation où la confiance était nécessaire pour que quelqu’un interagisse avec un autre. Certes, ce système bureaucratique a dû changer pour suivre la transformation numérique attendue de l’économie.

Ainsi, Satoshi a inventé une crypto-monnaie appelée Bitcoin qui a été activée par la technologie sous-jacente – blockchain. Bitcoin n’est qu’un cas d’utilisation monétaire de la blockchain qui s’attaque à la faiblesse inhérente des modèles basés sur la confiance. Nous allons approfondir les fondamentaux des Bitcoins et de la blockchain dans cet article.

Qu’est-ce que la Blockchain ?

L’Internet a révolutionné de nombreux aspects de la vie, de la société et des affaires. Cependant, nous avons appris dans la section précédente que la façon dont les gens et les organisations exécutent des transactions les uns avec les autres n’a pas beaucoup changé au cours des deux dernières décennies. Blockchain est considéré comme le composant qui complète le puzzle Internet et le rend plus ouvert, plus accessible et plus fiable.

Pour comprendre la blockchain, il faut la comprendre à la fois d’un point de vue commercial et technique. Comprenons d’abord dans un contexte de transaction d’affaires pour obtenir le “quoi” de celui-ci, puis nous examinerons la technicité pour comprendre le “comment” de celui-ci dans les chapitres suivants.

Blockchain est un système d’enregistrements pour traiter la valeur (pas seulement l’argent !) d’une manière peer-to-peer. Ce que cela signifie, c’est qu’il n’y a pas besoin d’un intermédiaire de confiance comme les banques, les courtiers ou d’autres services d’entiercement pour servir de tiers de confiance. Par exemple, si Alice paie à Bob 10 €, pourquoi passerait-elle par une banque ? Jetez un œil à la figure 1-1.

Figure 1-1. Transaction par un intermédiaire de confiance par rapport à la transaction peer-to-peer

Examinons un exemple différent maintenant. Une transaction d’actions typique se produit en quelques secondes, mais son règlement prend des semaines (voir les soldes Target). Est-il souhaitable en cette ère numérique ? Certainement pas ! La figure 1-2 illustre la situation actuelle.

Figure 1-2. Opérations d’actions par l’intermédiaire d’une chambre de compensation intermédiaire

Si quelqu’un veut acheter des actions d’une entreprise ou d’une personne, il peut simplement l’acheter directement auprès d’eux avec un règlement instantané, sans avoir besoin de courtiers, de chambres de compensation ou d’autres institutions financières entre les deux. Une solution décentralisée et peer-to-peer à une telle situation peut être représentée comme dans la figure 1-3.

Figure 1-3. Négociation d’actions peer-to-peer

Notons que les transactions et les règlements ne sont pas deux entités différentes dans un paramètre blockchain ! Les transactions sont analogues, par exemple, aux transactions en monnaie fiduciaire ou si quelqu’un paie un autre billet de 10 €, il ne le possède plus et ce billet de 10 € est physiquement transféré au nouveau propriétaire.

Maintenant que vous comprenez la blockchain d’un point de vue fonctionnel, à un niveau élevé, examinons-la un peu techniquement, et la raison de la nommer “blockchain” devient plus claire. Nous verrons “Qu’est-ce” qu’il est en techniquement et laisser le “Comment” du fonctionnement au chapitre 2.

Lisez les énoncés suivants et ne vous inquiétez pas si les concepts ne permettent pas encore votre compréhension complète. Vous voudrez peut-être le revoir, mais soyez patient jusqu’à ce que vous ayez fini de lire cet article.

  • Blockchain est un système peer-to-peer de transactions de valeurs sans tiers de confiance entre les deux.
  • Il s’agit d’un registre partagé, décentralisé et ouvert des transactions. Cette base de données de registre est reproduite sur un grand nombre de nœuds (les nœuds en informatique font référence à un serveur).
  • Cette base de données de registre est une base de données d’ajout de transactions uniquement et ne peut pas être modifiée ou altérée. Cela signifie que chaque entrée est une entrée permanente. Toute nouvelle entrée sur elle est reflétée sur toutes les copies des bases de données hébergées sur différents nœuds. (Mais comme on dit il ne faut jamais dire jamais, il existe dans certains cas des possibilités d’altérer une transaction, mais pour cela il faut contrôler plus de 50 % des nœuds du réseau, nous ne ferons pas état de ce cas dans cet article.)
  • Il n’est pas nécessaire que des tiers de confiance servent d’intermédiaires pour vérifier, sécuriser et régler les transactions.
  • Il s’agit d’une autre couche au-dessus de l’Internet et peut coexister avec d’autres technologies Internet.
  • Juste la façon dont TCP/ IP a été conçu pour atteindre un système ouvert, la technologie blockchain a été conçue pour permettre une véritable décentralisation. Dans un effort pour le faire, les créateurs de Bitcoin l’ont fait de façon « open-source » afin qu’elle puisse inspirer de nombreuses applications décentralisées.

Une blockchain typique ressemble à ce qui est indiqué dans la figure 1-4.

Figure 1-4. La structure de données blockchain

Chaque nœud sur le réseau blockchain a une copie identique de la blockchain montrée dans la figure 1-4, où chaque bloc est une collection de transactions, d’où le nom. Comme vous pouvez le voir, il y a deux parties principales dans chaque bloc. La partie “en-tête” (Header en anglais) renvoie au bloc précédent de la chaîne. Ce que cela signifie, c’est que chaque en-tête de bloc contient le hash du bloc précédent de sorte que personne ne peut modifier une transaction dans le bloc précédent. Nous examinerons plus en détail ce concept dans les chapitres suivants. L’autre partie d’un bloc est le “contenu” (Body content en anglais) qui a une liste validée des transactions, leurs montants, les adresses des parties concernées, et quelques détails supplémentaires. Ainsi, étant donné le dernier bloc, il est possible d’accéder à tous les blocs précédents dans une blockchain.

Prenons un exemple pratique et voyons comment les transactions ont lieu et le grand livre (ledger en anglais) est mis à jour à travers le réseau, pour voir comment ce système fonctionne :

Supposons qu’il y ait trois candidats — Alice, Bob et Charlie — qui effectuent des transactions monétaires l’un d’entre eux sur un réseau de blockchain. Passons en revue les transactions étape par étape pour comprendre les fonctionnalités ouvertes et décentralisées de la blockchain.

Étape 1 :

Supposons qu’Alice avait 50€ avec elle, ce qui est la genèse de toutes les transactions et que chaque nœud en est conscient, comme le montre la figure 1-5.

Figure 1-5. Le bloc de genèse

Étape 2 :

Alice fait une transaction en payant 20 $ à Bob. Observez comment la blockchain est mise à jour à chaque nœud, comme le montre la figure 1-6.

Figure 1-6. La première transaction

Étape 3 :

Bob fait une autre transaction en payant 10 $ à Charlie et la blockchain est mise à jour comme indiqué dans la figure 1-7.

Figure 1-7. La deuxième transaction

Notons que les données de transaction dans les blocs sont immuables. Toutes les transactions sont totalement irréversibles. Tout changement entraînerait une nouvelle transaction, qui serait validée par tous les nœuds contributeurs. Chaque nœud a sa propre copie de la blockchain.

S’il y a beaucoup de questions qui surgissent dans votre esprit, telles que « Et si Alice paye le même montant à Dave pour doubler le même montant, ou si elle fait un paiement sans avoir assez de fonds dans son compte ? », « Comment la sécurité est-elle assurée ?, et ainsi de suite! Nous allons aborder ces détails dans les chapitres suivants.

Systèmes centralisés vs décentralisés

La raison même pour laquelle nous pensons le débat sur la centralisation par rapport à la décentralisation est que la blockchain est conçue pour être décentralisée, défiant la conception centralisée. Cependant, les sternes décentralisées et centralisées ne sont pas toujours claires. Ils sont très mal définis et trompeurs dans de nombreux endroits. La raison en est qu’il n’y a presque pas de système purement centralisé ou décentralisé.

Qu’est-ce qu’un système distribué alors ? Juste pour la discussion actuelle, nous allons le comprendre et ensuite le retirer de la liste. Veuillez noter que si un système est centralisé ou décentralisé, il peut toujours être distribué. Un système distribué centralisé est un système dans lequel il y a, par exemple, un nœud maître chargé de décomposer les tâches ou les données et de distribuer la charge à travers les nœuds. D’autre part, un système distribué décentralisé est un système où il n’y a pas de nœud ” maître ” en tant que tel et pourtant le calcul peut être distribué. Blockchain est un exemple de ce genre, et nous allons examiner de nombreuses représentations schématiques de celui-ci plus tard dans l’article. La figure 1-8 est une représentation de la façon dont un système distribué centralisé peut fonctionner.

Figure 1-8. Un système distribué avec contrôle centralisé

Cette représentation est similaire à la mise en œuvre Hadoop, à titre d’exemple. Bien que le calcul est plus rapide dans de telles conceptions en raison de l’informatique distribuée, il souffre également de limitations dues à la centralisation.

Reprenons notre discussion sur la centralisation par rapport à la décentralisation. Il est extrêmement important de noter que pour qu’un système soit centralisé/décentralisé, il ne se limite pas à l’architecture technique. Ce que je dis, c’est qu’un système peut être centralisé ou décentralisé techniquement, mais qu’il ne l’est peut-être pas de façon logique ou politique. Jetons un coup d’œil à ces différentes perspectives pour être en mesure de concevoir un système correctement basé sur l’exigence :

Architecture technique : Un système peut être centralisé ou décentralisé du point de vue de l’architecture technique. Ce que nous considérons est combien d’ordinateurs physiques (ou nœuds) sont utilisés pour concevoir un système, combien de défaillances de nœuds, il peut soutenir avant que l’ensemble du système ne tombe en panne, etc.

Perspective politique : Cette perspective indique le contrôle qu’un individu, ou un groupe de personnes, ou une organisation dans son ensemble a sur un système. Si les ordinateurs du système sont contrôlés par eux, alors le système est naturellement centralisé. Cependant, si aucun individu ou groupe spécifique ne contrôle le système et que tout le monde a des droits égaux sur le système, alors c’est un système décentralisé dans un sens politique !

Perspective logique : Un système peut être logiquement centralisé ou décentralisé en fonction de son apparence, qu’il soit centralisé ou décentralisé techniquement ou politiquement. Une autre analogie pourrait être que si vous coupez verticalement un système (par exemple des dispositifs informatiques) en deux avec chaque moitié ayant des fournisseurs de services et des consommateurs, s’ils peuvent fonctionner comme des unités indépendantes, ils sont décentralisés et centralisés autrement.

Toutes les perspectives susmentionnées sont cruciales dans la conception d’un système de la vie réelle et son appellation de centraliser ou décentraliser. Discutons de quelques-uns des exemples mélangeant ces perspectives pour dissiper toute confusion que vous pourriez avoir :

  • Si vous regardez les entreprises, elles sont architecturalement centralisées (un siège social), elles sont politiquement centralisées (régies par un PDG ou le conseil d’administration), et elles sont logiquement centralisées aussi. (Vous ne pouvez pas vraiment les diviser en deux.)
  • Notre langage de communication est décentralisé sous tous les angles, tant sur le plan architectural, politique que logique. Pour que deux personnes communiquent entre elles, en général, leur langue n’est ni politiquement influencée ni logiquement dépendante du langage de communication des autres.
  • Les systèmes torrent tels que BitTorrent sont également décentralisés sous tous les angles. N’importe quel nœud peut être un fournisseur ou un consommateur, donc même si vous coupez le système en deux, il soutient toujours.
  • Le Réseau de livraison de contenu, quant à lui, est architecturalement décentralisé, logiquement aussi décentralisé, mais il est politiquement centralisé parce qu’il appartient à des entreprises. Un exemple est Amazon CloudFront.
  • Considérons la blockchain maintenant. L’objectif de la blockchain était de permettre la décentralisation. Ainsi, il est architecturalement décentralisé par la conception. En outre, il est décentralisé d’un point de vue politique, car personne ne le contrôle. Cependant, il est logiquement centralisé, car il y a un état commun convenu et l’ensemble du système se comporte comme un seul ordinateur global.

Examinons ces termes séparément et ayons une vision comparative pour être en mesure d’apprécier pourquoi la blockchain est décentralisée par la conception.

Systèmes centralisés

Comme son nom l’indique, un système centralisé a un contrôle centralisé avec toute autorité administrative. Ces systèmes sont faciles à concevoir, maintenir, imposer la confiance et gouverner, mais souffrent de nombreuses limitations inhérentes, comme suit :

Ils ont un point central d’échec, donc sont moins stables.

  • Ils sont plus vulnérables aux attaques et donc moins sécurisés.
  • La centralisation du pouvoir peut conduire à des opérations contraires à l’éthique.
  • L’évolutivité est difficile la plupart du temps.

Un système centralisé typique peut apparaître comme indiqué à la figure 1-9.

Figure 1-9. Un système centralisé

Systèmes décentralisés

Comme son nom l’indique, un système décentralisé n’a pas de contrôle centralisé et chaque nœud a une autorité égale. De tels systèmes sont difficiles à concevoir, à maintenir, à gouverner ou à imposer la confiance. Cependant, ils ne souffrent pas des limites des systèmes centralisés conventionnels. Les systèmes décentralisés offrent les avantages suivants :

  • Ils n’ont pas un point central d’échec, donc plus stable et tolérant aux défauts
  • Ils sont résistants aux attaques, comme il n’existe aucun point central, il est difficile d’en prendre le contrôle et est donc plus sécurisé (difficile n’est pas impossible, contrôler 50 % des nœuds pourraient permettre la falsification, mais ceci n’est évidemment pas préférable pour les possesseurs de nœuds, puisque les acteurs de cette blockchain en perdraient la confiance et la valeur inhérente au service ne ferait que baisser. Il est donc préférable pour tous les acteurs que ce cas ne se produisent pas.)
  • système symétrique avec une autorité égale à tous, donc moins de portée d’opérations contraires à l’éthique et généralement de nature démocratique

Un système décentralisé typique peut apparaître comme indiqué à la figure 1-10.

Figure 1-10. Un système décentralisé

Veuillez noter qu’un système distribué peut également être décentralisé. Un exemple serait la blockchain! Cependant, contrairement aux systèmes distribués courants, la tâche n’est pas subdivisée et déléguée aux nœuds, car il n’y a pas de maître qui ferait cela dans la blockchain. Les nœuds contributifs ne fonctionnent pas sur une partie de l’œuvre, mais plutôt sur les nœuds intéressés (ou ceux choisis au hasard) qui exécutent l’ensemble de l’œuvre. Un système décentralisé et distribué typique, qui est en fait un système peer-to-peer, peut apparaître comme indiqué à la figure 1-11.

Figure 1-11. Un système décentralisé et peer-to-peer

Couches de Blockchain

Au fait que d’après cette écriture, les variantes de la blockchain publique comme Ethereum sont en train de mûrir, et la construction d’applications complexes au-dessus de ces blockchains n’est peut-être pas une bonne idée. Gardez à l’esprit que la blockchain n’est jamais seulement un morceau de technologie, mais une combinaison de principes d’affaires, l’économie, la théorie des jeux, la cryptographie et l’ingénierie informatique. La plupart des applications du monde réel sont de nature assez complexe, et il est conseillé de construire des solutions blockchain à partir de zéro.

Le but de cette section est seulement de vous fournir une vue à vol d’oiseau de diverses couches de blockchain, et d’approfondir les principes fondamentaux dans les chapitres suivants. Pour commencer, rappelons-nous simplement notre compréhension de base de la pile de protocole TCP/IP. L’approche en couches dans la pile TCP/IP est en fait une norme pour atteindre un système ouvert. Avoir des couches d’abstraction aide non seulement à mieux comprendre la pile, mais aide également à construire des produits qui sont conformes à la pile pour atteindre un système ouvert. En outre, avoir les couches abstraites les unes des autres rend le système plus robuste et plus facile à maintenir. Toute modification apportée à l’une ou l’autre des couches n’affecte pas les autres couches. Encore une fois, l’analogie TCP/IP ne doit pas être confondu avec les couches blockchain. TCP/IP est un protocole de communication que chaque application Internet utilise, tout comme la blockchain.

Entrez dans la blockchain. Il n’existe pas encore de normes mondiales convenues qui sépareraient clairement les composants de la blockchain en couches distinctes. Une architecture hétérogène en couches est nécessaire, mais pour l’instant c’est encore dans l’avenir. Ainsi, nous allons essayer de formuler des couches blockchain pour être en mesure de mieux comprendre la technologie et de construire une analogie comparative entre des centaines de variantes blockchain / Cryptocurrency sur le marché. Jetez un coup d’œil à la représentation de haut niveau et en couches de la blockchain dans la figure 1-12.

Figure 1-12. Différentes couches de blockchain

Vous vous demandez peut-être pourquoi cinq couches et pourquoi pas plus de couches granulaires, ou moins de couches. De toute évidence, il ne peut y avoir trop ou trop peu de couches ; il s’agira d’un compromis entre complexité, robustesse, adaptabilité, etc., pour n’en nommer que quelques-unes. Le but n’est pas vraiment de normaliser la technologie blockchain, mais de construire une meilleure compréhension.

Gardons à l’esprit que toutes ces couches sont présentes sur tous les nœuds.

Dans le chapitre 6 de cet article, nous allons construire une application décentralisée à partir de zéro et apprendre comment la blockchain fonctionne sur toutes ces couches avec un cas d’utilisation pratique.

Couche d’application

En raison des caractéristiques de la blockchain, telles que l’immuabilité des données, la transparence entre les participants, la résilience contre les attaques contradictoires, etc., il existe de multiples applications en cours de construction. Certaines applications sont juste construites dans la couche d’application, en tenant pour acquis toute « saveur » disponible de blockchain, et certaines applications sont construites dans la couche d’application et sont entrelacés avec d’autres couches dans la blockchain. C’est la raison pour laquelle la couche d’application doit être considérée comme faisant partie de la blockchain.

Il s’agit de la couche où vous codez les fonctionnalités souhaitées et en faites une application pour les utilisateurs finaux. Il s’agit généralement d’une pile technologique traditionnelle pour le développement de logiciels tels que les constructions de programmation côté client, scripts, API, « Framework » de développement, etc. Pour les applications qui traitent la blockchain comme un backend, ces applications peuvent avoir besoin d’être hébergées sur certains serveurs Web et qui pourraient nécessiter le développement d’applications Web, la programmation côté serveur, et les API, etc. Idéalement, les bonnes applications blockchain n’ont pas de modèle client-serveur, et il n’y a pas de serveurs centralisés pour l’accès du client, qui est juste la façon dont Bitcoin fonctionne.

Vous avez probablement entendu parler ou déjà appris au sujet des réseaux hors chaîne (« off-chain networks »). L’idée est de construire des applications qui n’utiliserait pas la blockchain pour tout et n’importe quoi, mais l’utiliser à bon escient. En d’autres termes, ce concept est de s’assurer que la gestion de lourdes tâches est faite à la couche application, ou les exigences de stockage volumineux sont pris en charge hors de la chaîne de sorte que la blockchain de base est légere et efficace et le trafic réseau n’est pas trop important.

Couche d’exécution

La couche d’exécution est l’endroit où les exécutions des instructions ordonnées par la couche d’application ont lieu sur tous les nœuds d’un réseau blockchain. Les instructions peuvent être des instructions simples ou un ensemble d’instructions multiples sous la forme d’un contrat intelligent (le smart contract en anglais). Dans les deux cas, un programme ou un script doit être exécuté pour assurer l’exécution correcte de la transaction. Tous les nœuds d’un réseau blockchain doivent exécuter les programmes/scripts de manière indépendante. Avec une exécution déterministe des programmes/scripts sur le même ensemble d’entrées et avec les mêmes conditions produit toujours la même sortie sur tous les nœuds, ce qui permet d’éviter les incohérences.

Dans le cas des Bitcoins, ce sont des scripts simples qui ne sont pas Turing complet et ne permettent que quelques ensembles d’instructions. Ethereum et Hyperledger, d’autre part, permettent des exécutions complexes. Le code d’Ethereum ou ses contrats intelligents écrits en solidité est compilé sur Bytecode ou Machine Code qui est exécuté sur sa propre machine virtuelle Ethereum.

Hyperledger a une approche beaucoup plus simple pour ses contrats intelligents à code de chaîne. Il prend en charge l’exécution des codes machine compilés à l’intérieur des images docker, et prend en charge plusieurs langages de haut niveau tels que le Java et le Go.

Couche sémantique

La couche sémantique est une couche logique parce qu’il y a un ordre dans les transactions et les blocs. Une transaction, valide ou invalide, a un ensemble d’instructions qui passe par la couche d’exécution mais est validée dans la couche sémantique.

Si c’est Bitcoin, alors si l’on dépense une transaction légitime, s’il s’agit d’une attaque à double dépense, si l’on est autorisé à faire cette transaction, etc, sont validés dans cette couche. Vous apprendrez dans les chapitres suivants que les Bitcoins sont en fait présents sous forme de transactions représentant l’état du système. Pour pouvoir dépenser un Bitcoin, vous devez consommer une ou plusieurs transactions précédentes et il n’y a aucune notion de comptes. Cela signifie que lorsqu’une personne effectue une transaction, elle utilise l’une des transactions précédentes où elle a reçu au moins le montant qu’elle dépense actuellement. Cette transaction doit être validée par tous les nœuds en traversant les transactions précédentes pour voir s’il s’agit d’une transaction légitime. Ethereum, d’autre part, a le système de comptes. Cela signifie que le compte de celui qui effectue la transaction et celui de celui qui la reçoit sont mis à jour.

Dans cette couche, les règles du système peuvent être définies, telles que les modèles de données et les structures. Il pourrait y avoir des situations qui sont un peu plus complexes par rapport aux transactions simples. Les ensembles d’instructions complexes sont souvent codés dans des contrats intelligents. L’état du système est mis à jour lorsqu’un contrat intelligent est invoqué lors de la réception d’une transaction. Un contrat intelligent est un type spécial de compte qui a le code exécutable et les états privés. Un bloc contient généralement un tas de transactions et quelques contrats intelligents. Les structures de données telles que l’arbre de Merkle sont définies dans cette couche avec la racine de Merkle dans l’en-tête de bloc pour maintenir une relation entre les en-têtes de bloc et l’ensemble des transactions dans un bloc (généralement le stockage de la valeur clé sur le disque). En outre, les modèles de données, les modes de stockage, dans le traitement basé sur la mémoire/disque, etc. peuvent être définis dans cette couche logique.

En dehors de ce qui précède, c’est la couche sémantique qui définit la façon dont les blocs sont liés les uns aux autres. Chaque bloc dans une blockchain contient le hash du bloc précédent, jusqu’au bloc de genèse. Bien que l’état final de la blockchain soit atteint par les contributions de toutes les couches, le lien des blocs les uns avec les autres doit être défini dans cette couche. Selon le cas d’utilisation, vous pouvez coder une fonctionnalité supplémentaire dans cette couche.

Couche de propagation

Les couches précédentes étaient plus d’un phénomène individuel : pas beaucoup de coordination avec d’autres nœuds dans le système. La couche de propagation est la couche de communication peer-to-peer qui permet aux nœuds de se découvrir les uns les autres, et de parler et de synchroniser les uns avec les autres en ce qui concerne l’état actuel du réseau. Lorsqu’une transaction est effectuée, nous savons qu’elle est diffusée sur l’ensemble du réseau. De même, lorsqu’un nœud veut proposer un bloc valide, il est immédiatement propagé à l’ensemble du réseau afin que d’autres nœuds puissent s’y appuyer, le considérant comme le dernier bloc. Ainsi, la propagation transaction/bloc dans le réseau est définie dans cette couche, ce qui assure la stabilité de l’ensemble du réseau. De par sa conception, la plupart des blockchains sont conçues de telle sorte qu’elles envoient immédiatement une transaction/bloc à tous les nœuds auxquels elles sont directement connectées, lorsqu’elles font la connaissance d’une nouvelle transaction/bloc.

Dans le réseau Internet asynchrone, il y a souvent des problèmes de latence pour la propagation des transactions ou des blocs. Certaines propagations se produisent en quelques secondes et d’autres prennent plus de temps, selon la capacité des nœuds, la bande passante réseau, et quelques facteurs de plus.

Couche de consensus

La couche de consensus est généralement la couche de base pour la plupart des systèmes blockchain. Le but principal de cette couche est d’obtenir tous les nœuds d’accord sur un état cohérent du grand livre. Il pourrait y avoir différentes façons de parvenir à un consensus entre les nœuds, selon le cas d’utilisation. La sécurité de la blockchain est assurée dans cette couche. Dans Bitcoin ou Ethereum, le consensus est atteint grâce à des techniques incitatives appropriées appelées « minage ». Pour qu’une blockchain publique soit autosuffisante, il doit y avoir une sorte de mécanismes d’incitation qui non seulement aide à maintenir le réseau en vie, mais aussi à faire respecter le consensus.

Bitcoin et Ethereum utilisent un mécanisme de consensus Proof of Work (PoW) pour sélectionner au hasard un nœud qui peut proposer un bloc. Une fois que ce bloc est proposé et propagé à tous les nœuds, ils vérifient s’il s’agit d’un bloc valide avec toutes les transactions légitimes et que le processus de PoW a été résolu correctement; ils ajoutent ce bloc à leur propre copie de la blockchain. Il existe de nombreuses variantes différentes de protocoles consensuels tels que la preuve d’enjeu (PoS), le PoS délégué (dPoS), l’algorithme des généraux byzantins (PBFT), etc., que nous aborderons en détail dans les chapitres suivants.

Pourquoi la Blockchain est-elle importante ?

Nous avons examiné les aspects de conception des systèmes centralisés et décentralisés et nous avons eu une idée des avantages techniques des systèmes décentralisés par rapport aux systèmes centralisés.

Nous avons également appris sur les différentes couches de blockchain. Blockchain, étant un système peer-to-peer décentralisé, présentant certains avantages et complexités inhérents. Gardez à l’esprit que ce n’est pas une solution miracle qui peut résoudre tous les problèmes dans le monde, mais il y a des cas spécifiques où il est une solution nécessaire. Il existe également des scénarios où la blockchainisation de la solution existante la rend plus robuste, transparente et sécurisée. Cependant, il peut aussi bien conduire à la catastrophe si elle n’est pas faite de la bonne façon ! Gardons maintenant une perspective commerciale et fonctionnelle à l’esprit et analysons la blockchain.

Limitations des systèmes centralisés

Si vous jetez un coup d’œil rapide au paysage de l’évolution logicielle, vous verrez que de nombreuses solutions logicielles ont une conception centralisée. La raison n’est pas seulement parce qu’elles sont faciles à développer et à entretenir, mais parce que nous sommes habitués à une telle conception pour être en mesure de faire confiance au système. Nous avons toujours besoin d’un tiers de confiance qui peut s’assurer que nous ne sommes pas trompés ou victimes d’une escroquerie. Sans relation d’affaires antérieure, il est difficile de commercer avec quelqu’un ou même d’évoluer le partnership. On ne ferait probablement pas affaire avec quelqu’un que l’on n’a jamais connu.

Prenons un exemple pour mieux comprendre. Aujourd’hui, lorsque nous commandons quelque chose d’Amazon, nous nous sentons en sécurité et assurés de la livraison de l’article. Le producteur de l’article est quelqu’un et l’acheteur est quelqu’un d’autre. Alors quel rôle est joué par Amazon ici? Il est là comme un facilitateur fonctionnant comme un intermédiaire de confiance, et aussi pour prendre une certaine part de la transaction. L’acheteur fait confiance au vendeur lorsque la relation de fiducie est effectivement imposée par des tiers de confiance. Ce que propose la blockchain, c’est que, dans l’ère numérique moderne, nous n’avons pas vraiment besoin d’un tiers entre les deux pour imposer la confiance, et la technologie a assez mûri pour la gérer. Dans la blockchain, la confiance est une partie inhérente du réseau par défaut, que nous explorerons davantage dans les chapitres à venir.

Apprenons rapidement quelques inconvénients d’un système centralisé conventionnel :

  • Problèmes de confiance
  • Question de sécurité
  • Question de confidentialité : la confidentialité de la vente de données est compromise
  • Facteur de coût et de temps pour les transactions

Voici quelques-uns des avantages des systèmes décentralisés par rapport aux systèmes centralisés :

  • Élimination des intermédiaires
  • Vérification plus facile et authentique des transactions
  • Sécurité accrue avec un coût moindre
  • Une plus grande transparence
  • Décentralisé et immuable

Adoption Blockchain jusqu’à présent

Blockchain est venu avec Bitcoin, une crypto-monnaie numérique, en 2009 via une simple liste de diffusion. Peu de temps après son lancement, les gens pouvaient réaliser son véritable potentiel au-delà de la crypto-monnaie. Certaines entreprises ont mis au point différentes offres blockchain telles que Ethereum, Hyperledger, etc. Microsoft et IBM ont mis au jour des offres SaaS (Software as a Service) sur leurs plateformes cloud Azure et Bluemix, respectivement. Différentes start-ups ont été formées, et de nombreuses entreprises établies ont pris des initiatives blockchain qui se sont concentrés sur la résolution de certains problèmes d’affaires qui n’ont pas été facilement résolus avant.

Il est trop tard pour simplement dire que la blockchain a un énorme potentiel pour perturber presque toutes les industries d’une manière ou d’une autre ; la révolution a déjà commencé. Elle a eu un impact énorme sur le marché des services financiers. Il est difficile de nommer une banque mondiale ou une entité financière qui n’explore pas la blockchain. Outre le marché financier, des initiatives ont déjà été prises dans des domaines tels que les médias et le divertissement, la négoce de l’énergie, les marchés de prédiction, les chaînes de vente au détail, les systèmes de fidélisation, les assurances, la logistique et les chaînes d’approvisionnement, les dossiers médicaux, ainsi que les applications gouvernementales et militaires.

Au moment d’écrire ces lignes, la situation actuelle est telle que de nombreuses start-ups et entreprises sont en mesure de voir comment un système basé sur la blockchain peut vraiment répondre à certains domaines de la douleur et devenir bénéfique à bien des égards. Cependant, la conception du bon type de solution blockchain est assez difficile. Il y a de très bonnes idées pour un produit ou une solution basé sur la blockchain, mais il est tout aussi difficile de les construire ou de les mettre en œuvre. Il existe des cas d’utilisation qui ne peuvent être construits que sur une blockchain publique.

Concevoir une blockchain auto-durable avec un écosystème minier approprié est difficile, et quand il s’agit de blockchains publiques existantes pour construire des applications non crypto-monnaie il n’y a rien d’autre que Ethereum. Il est difficile de décider si une application blockchain doit être intégrée uniquement dans la couche d’application et utiliser les couches sous-jacentes telles qu’elles sont, ou si l’application doit être construite à partir de zéro. Il y a aussi des défis techniques. Blockchain est encore en train de mûrir, et il peut prendre quelques années de plus pour l’adoption grand public.

A partir d’aujourd’hui, il existe de multiples propositions pour aborder les questions d’évolutivité de la blockchain. Nous allons essayer de construire une solide compréhension de toutes ces perspectives dans tout ce livre. Pour l’instant, voyons quelques-unes des utilisations spécifiques et des cas d’utilisation dans la section suivante.

Les différents cas d’utilisation de la Blockchain

Dans cette section, nous examinerons certaines des initiatives qui sont déjà prises dans des secteurs tels que la finance, l’assurance, les banques, les soins de santé, le gouvernement, les chaînes d’approvisionnement, l’IdO (Internet des objets), et les médias et le divertissement, pour n’en nommer que quelques-uns. Les possibilités sont illimitées, cependant ! Une véritable économie de partage, difficile à réaliser dans les systèmes centralisés, est possible en utilisant la technologie blockchain (par exemple, les versions peer-to-peer d’Uber, AirBNB). Il est également possible de permettre aux citoyens de posséder leur identité (identité numérique auto-souveraine) et de monétiser leurs propres données à l’aide de cette technologie. Pour l’instant, examinons quelques-uns des cas d’utilisation existants.

  • Tout type de bien ou d’actif, qu’il soit physique ou numérique, comme les ordinateurs portables, les téléphones mobiles, les diamants, les automobiles, l’immobilier, les enregistrements en e-immatriculation, les fichiers numériques, etc. peut être enregistré sur blockchain. Cela peut permettre à ces transactions d’actifs d’une personne à l’autre, de maintenir le journal des transactions et de vérifier la validité ou les propriétés. En outre, des services de notaire, une preuve d’existence, des régimes d’assurance sur mesure et bien d’autres cas d’utilisation de ce type peuvent être développés.
  • De nombreux cas d’utilisation financière sont en cours de développement sur la blockchain tels que les paiements transfrontaliers, le trading d’actions, la fidélisation et le système de récompenses, Know Your Customer (KYC) entre les banques, etc. Initial Coin Offering (ICO) est l’un des cas d’utilisation les plus tendance à ce jour. ICO est le meilleur moyen de crowdsourcing aujourd’hui en utilisant la crypto-monnaie comme actifs numériques. Une pièce dans une ICO peut être considérée comme un stock numérique dans une entreprise, ce qui est très facile à acheter et à échanger.
  • Blockchain peut être utilisé pour permettre à “La Sagesse des Foules” de prendre la tête et de façonner les entreprises, les économies et divers autres phénomènes nationaux en utilisant la sagesse collective ! Des prévisions financières et économiques basées sur la sagesse des foules, des marchés de prédiction décentralisés, un vote décentralisé, ainsi que des opérations boursières peuvent être possibles sur la blockchain.
  • Le processus de détermination des redevances musicales a toujours été alambiqué. Les services de streaming musical sur Internet ont facilité une plus grande pénétration du marché, mais ont rendu la détermination des redevances plus complexe. Cette préoccupation peut à peu près être abordée par la blockchain en maintenant un registre public d’informations sur la propriété des droits musicaux ainsi que la distribution autorisée de contenu multimédia.
  • C’est l’ère de l’IoT, avec des milliards d’appareils IoT partout et une tendance toujours croissante. Tout un tas de marques, de modèles et de protocoles de communication différents font qu’il est difficile d’avoir un système centralisé pour contrôler les appareils et fournir une plate-forme commune d’échange de données. Il s’agit également d’un domaine où la blockchain peut être utilisée pour construire un système peer-to-peer décentralisé pour que les périphériques IoT communiquent entre eux. ADEPT (Autonomous Decentralized Peer-To-Peer Telemetry) est une initiative conjointe d’IBM et de Samsung qui a développé une plate-forme qui utilise des éléments de la conception sous-jacente du Bitcoin pour construire un réseau distribué d’appareils, un IOT décentralisé. ADEPT utilise trois protocoles : BitTorrent pour le partage de fichiers, Ethereum pour les contrats intelligents et TeleHash pour la messagerie peer-to-peer dans la plate-forme. La fondation IOTA est une autre initiative de ce genre.
  • Dans les secteurs publics également, la blockchain a pris de l’ampleur. Il y a des cas d’utilisation où la décentralisation technique est nécessaire, mais politiquement devrait être régie par des gouvernements : l’immatriculation des terres, l’immatriculation et la gestion des véhicules, le vote électronique, etc. sont quelques-uns des cas d’utilisation active. Les chaînes d’approvisionnement sont un autre domaine où il y a quelques cas d’utilisation de grande quantité de blockchain. Les chaînes d’approvisionnement ont toujours été sujettes à des différends à travers le monde, car il a toujours été difficile de maintenir la transparence dans ces systèmes.

Résumé

Dans ce chapitre, nous avons couvert l’évolution de la blockchain, l’histoire de celle-ci, ce qu’elle est, les avantages de conception, et pourquoi il est si important avec certains cas d’utilisation.

Dans les années 1990, l’adoption massive d’Internet a changé la façon dont les gens faisaient des affaires. Il a éliminé la friction de la création et de la distribution de l’information. Cela a ouvert la voie à de nouveaux marchés, plus d’opportunités et de possibilités. De même, la blockchain est ici aujourd’hui pour porter l’Internet à un tout nouveau niveau en supprimant les frictions dans trois domaines clés : le contrôle, la confiance et la valeur.

Contrôle: Blockchain a permis la distribution du contrôle en décentralisant le système.

Confiance: Blockchain est un grand livre immuable et résistant à la falsification. Il donne une source unique et partagée de vérité à tous les nœuds, ce qui rend le système sans confiance. Ce que cela signifie, c’est que la confiance n’est plus nécessaire pour traiter avec une personne ou une entité inconnue et est inhérente à la conception.

Valeur: Blockchain permet l’échange de valeur sous n’importe quelle forme. On peut émettre et transférer des actifs sans entités centrales ou intermédiaires.

Dans le chapitre 2, nous allons plonger en profondeur dans les fondamentaux de la blockchain.

CHAPITRE 2 Comment la Blockchain fonctionne

La blockchain est probablement la plus grande invention depuis l’Internet lui-même ! Il s’agit de la technologie la plus prometteuse pour la prochaine génération de systèmes d’interaction via Internet et a reçu une attention considérable de nombreux secteurs de l’industrie ainsi que par le milieu universitaire. Aujourd’hui, de nombreuses organisations ont déjà réalisé qu’elles devaient être prêtes à maintenir leur position sur le marché. Nous avons déjà examiné quelques cas d’utilisation au chapitre 1, mais les possibilités sont illimitées. Bien que la blockchain ne soit pas une solution miracle pour tous les problèmes d’affaires, elle a commencé à avoir un impact sur la plupart des fonctions commerciales et leurs implémentations technologiques.

Pour être en mesure de résoudre certains problèmes d’affaires du monde réel en utilisant la blockchain, nous avons réellement besoin d’une compréhension fine de ce qu’il est et comment il fonctionne. Pour cela, il doit être compris à travers différentes perspectives telles que les points de vue commerciaux, techniques et juridiques. Ce chapitre est un effort pour entrer dans les écrous et les boulons de la technologie blockchain et obtenir une compréhension complète de la façon dont il fonctionne.

Pose de la Fondation Blockchain

Blockchain n’est pas seulement une technologie, il est principalement couplé avec des fonctions d’affaires et des cas d’utilisation. Dans ses implémentations de crypto-monnaie, elle est également liée aux principes économiques. Dans cette section, nous nous concentrerons principalement sur ses aspects techniques. Techniquement, la blockchain est un brillant amalgame des concepts de la cryptographie, de la théorie des jeux et de l’ingénierie informatique, comme le montre la figure 2-1.

Figure 2-1. La Blockchain au cœur de la blockchain

Jetons un coup d’œil à quel rôle ces composants jouent dans le système de blockchain à un niveau supérieur et approfondissons plus profondément dans les fondamentaux par la suite. Avant cela, revoyons rapidement le fonctionnement des systèmes centralisés traditionnels. L’approche traditionnelle était qu’il y aurait une entité centralisée qui ne conserverait qu’un seul historique de transaction/modification. Il s’agissait d’exercer un contrôle de la concurrence sur l’ensemble de la base de données et d’injecter la confiance dans le système par l’intermédiaire d’intermédiaires. Quel était le problème avec un système aussi stable à l’époque ? Il faut faire confiance à un système centralisé, que les personnes impliquées soient honnêtes ou non ! En outre, le coût dû aux intermédiaires et le temps de transaction pourrait être plus élevé pour des raisons évidentes. Maintenant, pensez à la centralisation du pouvoir ; avoir le plein contrôle de l’ensemble du système permet aux autorités centralisées de faire presque tout ce qu’elles veulent.

Maintenant, regardons comment la blockchain aborde ces questions en raison d’intermédiaires centralisés en utilisant la cryptographie, la théorie des jeux et les concepts informatiques. Indépendamment du cas d’utilisation, les transactions sont sécurisées à l’aide de la cryptographie. En utilisant la cryptographie, on peut s’assurer qu’un utilisateur valide est à l’origine de la transaction et que personne ne peut falsifier une transaction frauduleuse. Cela signifie, cryptographiquement, il peut être assuré que Alice en aucune façon peut faire une transaction au nom de Bob en imitant sa signature.

Maintenant, que faire si un nœud ou un utilisateur tente de lancer une attaque à double dépense (par exemple, on a seulement dix dollars et tente de payer la même chose à plusieurs personnes)? Prêtez une attention particulière ici, bien qu’il n’ait pas suffisamment de fonds, on peut quand même initier une double dépense, ce qui est cryptographiquement correct. La seule façon d’éviter les doubles dépenses est que chaque nœud soit au courant de toutes les transactions. Maintenant, cela conduit à un autre problème intéressant. Étant donné que chaque nœud devrait maintenir la base de données des transactions, comment peuvent-ils tous s’entendre sur un état commun de base de données ?

Encore une fois, comment le système peut-il rester à l’abri des situations où un ou plusieurs nœuds informatiques tentent délibérément de renverser le système et d’essayer d’injecter un état de base de données frauduleux ? La majorité de ces problèmes relèvent du problème des généraux byzantins (décrit plus loin). Eh bien, il a gagné encore plus de popularité en raison de la blockchain, mais il a été là pendant des siècles. Si vous regardez les solutions de centre de données, ou les solutions de base de données distribuées, le problème des généraux byzantins est un problème évident et commun qu’elles traitent pour rester tolérantes aux défauts.

De telles situations et leur solution proviennent en fait de la théorie des jeux. Le domaine de la théorie des jeux fournit une approche radicalement différente pour déterminer comment un système se comportera. Les techniques de la théorie des jeux sont sans doute les plus sophistiquées et réalistes. Ils ne considèrent généralement jamais si un nœud est honnête, malveillant, éthique, ou à d’autres caractéristiques de ce genre et croient que les participants agissent en fonction de l’avantage qu’ils obtiennent, et non par des valeurs morales. Le seul but de la théorie des jeux dans la blockchain est de s’assurer que le système est stable (on parle de l’équilibre de Nash) avec un consensus parmi les participants.

Il existe différents types de problèmes et de situations d’affaires avec des degrés variables de complexités. Ainsi, les protocoles de consensus crypto et théoriciens du jeu sous-jacents pourraient être différents dans différents cas d’utilisation. Toutefois, le principe général de la maintenance d’un journal ou d’une base de données cohérente des transactions vérifiées est le même. Bien que les concepts de cryptographie et la théorie des jeux ont été autour depuis un certain temps maintenant, c’est la pièce d’informatique qui coud ces bits et pièces ensemble grâce à des structures de données et de la technique de communication réseau peer-to-peer. De toute évidence, c’est l’ingénierie logicielle intelligente qui est nécessaire pour réaliser tous les concepts logiques ou mathématiques dans le monde numérique. Ce sont ensuite les techniques d’ingénierie informatique qui intègrent la cryptographie et les concepts théorétiques du jeu dans une application, permettant l’informatique décentralisée et distribuée entre les nœuds avec la structure des données et les composants de communication réseau.

Cryptographie

La cryptographie est la composante la plus importante de la blockchain. Il s’agit certainement d’un domaine de recherche en soi et est basé sur des techniques mathématiques avancées qui sont assez complexes à comprendre. Nous allons essayer de développer une solide compréhension de certains des concepts cryptographiques dans cette section, parce que différents problèmes peuvent nécessiter des solutions cryptographiques différentes ; un type ne convient jamais à tous. Vous pouvez sauter certains détails ou vous y référer au besoin, mais c’est l’élément le plus important pour assurer la sécurité dans le système. Il y a eu de nombreux hacks signalés sur les portefeuilles et les échanges en raison de la conception trop faible ou de mauvaises implémentations cryptographiques.

La cryptographie existe depuis plus de deux mille ans maintenant. C’est la science de garder les choses confidentielles en utilisant des techniques de cryptage. Cependant, la confidentialité n’est pas le seul objectif. Il existe divers autres usages de la cryptographie comme mentionné dans la liste suivante, que nous explorerons plus tard :

  • Confidentialité : Seul le destinataire prévu ou autorisé peut comprendre le message. On peut aussi parler de vie privée ou de secret.
  • Intégrité des données : Les données ne peuvent pas être falsifiées ou modifiées par un adversaire intentionnellement ou par des erreurs involontaires ou accidentelles. Bien que l’intégrité des données ne puisse pas empêcher la modification des données, elle peut fournir un moyen de détecter si les données ont été modifiées.
  • Authentification : L’authenticité de l’expéditeur est assurée et vérifiable par le récepteur.
  • Non-répudiation : L’expéditeur, après avoir envoyé un message, ne peut pas nier plus tard qu’ils ont envoyé le message. Cela signifie qu’une entité (une personne ou un système) ne peut pas refuser la propriété d’un engagement antérieur ou d’une action.

Toute information sous la forme d’un message texte, de données numériques ou d’un programme informatique peut être appelée texte clair. L’idée est de chiffrer le texte clair à l’aide d’un algorithme de cryptage et d’une clé qui produit le texte chiffré. Le chiffrement peut ensuite être transmis au destinataire prévu, qui le décrypte à l’aide de l’algorithme de décryptage et de la clé pour obtenir le texte clair.

Prenons un exemple. Alice veut envoyer un message (m) à Bob. Si elle envoie le message tel quel, n’importe quel ennemi, par exemple, Eve peut facilement intercepter le message et la confidentialité est compromise. Ainsi, Alice veut chiffrer le message à l’aide d’un algorithme de cryptage (E) et une clé secrète (k) pour produire le message crypté appelé “chiffretexte”. Un adversaire doit être conscient à la fois de l’algorithme (E) et de la clé(k) pour intercepter le message. Plus l’algorithme et la clé sont forts, plus il est difficile pour l’adversaire d’attaquer. Notez qu’il serait toujours souhaitable de concevoir des systèmes blockchain qui sont au moins prouvablement sécurisés. Ce que cela signifie, c’est qu’un système doit résister à certains types d’attaques réalisables par des ennemis.

L’ensemble commun des étapes de cette approche peut être représenté comme le montre la figure 2-2.

Figure 2-2. Fonctionnement général de la cryptographie

Dans l’ensemble, il existe deux types de cryptographie : la cryptographie de la clé symétrique et la clé asymétrique (alias clé publique). Examinons ces questions individuellement dans les sections suivantes.

Cryptographie symétrique de clé

Dans la section précédente, nous avons examiné comment Alice peut chiffrer un message et envoyer le chiffrement texte à Bob. Bob peut alors déchiffrer le chiffrement texte pour obtenir le message original. Si la même clé est utilisée à la fois pour le chiffrement et le décryptage, elle est appelée cryptographie de clé symétrique. Cela signifie qu’Alice et Bob doivent s’entendre sur une clé (k) appelée « secret partagé » avant d’échanger le chiffrement texte. Ainsi, le processus est le suivant :

Alice—l’expéditeur :

  • Chiffrer le message en texte clair m à l’aide de l’algorithme de cryptage E et k clé pour préparer le chiffrement c
  • c = E(k, m)
  • Envoyer le chiffre texte c à Bob

Bob—le récepteur :

  • Décrypter le chiffrement c à l’aide de l’algorithme de décryptage D et de la même clé k pour obtenir le texte clair m
  • m = D( k, c )

Avez-vous juste remarqué que l’expéditeur et le récepteur ont utilisé la même clé (k) ? Comment s’entendent-ils sur la même clé et la partagent-elles entre elles ? De toute évidence, ils ont besoin d’un canal de distribution sécurisé pour partager la clé. Il semble généralement comme indiqué dans la figure 2-3.

Figure 2-3. Cryptographie symétrique

La cryptographie de clé symétrique est employée couramment ; les utilisations les plus courantes sont les protocoles de transfert de fichiers sécurisés tels que HTTPS, SFTP et WebDAVS. Les crypto systèmes symétriques sont généralement plus rapides et plus utiles lorsque la taille des données est énorme.

Veuillez noter que la cryptographie de clé symétrique existe en deux variantes : les chiffrements de flux et les chiffrements de bloc. Nous en discuterons dans les sections suivantes, mais nous examinerons le principe et la fonction XOR de Kerchoff avant cela pour être en mesure de comprendre comment les crypto systèmes fonctionnent vraiment.

Principe et fonction XOR de Kerckhoff

Le principe de Kerckhoff stipule qu’un crypto système doit être sécurisé même si tout ce qui concerne le système est connu du public, à l’exception de la clé. En outre, l’hypothèse générale est que le canal de transmission de message n’est jamais sécurisé, et les messages pourraient facilement être interceptés pendant la transmission. Cela signifie que même si l’algorithme de cryptage E et l’algorithme de décryptage D sont publics, et qu’il y a une chance que le message puisse être intercepté pendant la transmission, le message est toujours sécurisé en raison d’un secret partagé. Ainsi, les clés doivent être gardées secrètes dans un crypto système symétrique.

La fonction XOR est le bloc de base pour de nombreux algorithmes de cryptage et de décryptage. Jetons un coup d’œil à elle pour comprendre comment il permet la cryptographie. Le XOR, autrement connu sous le nom de « Ou Exclusif» ( en anglais « Exclusive OR ») et dénoté par le symbole ,peut être représenté par le tableau de vérité suivant (tableau 2-1). Il s’agit de la logique Booléenne très utilisée en électronique et en informatique.

Tableau 2-1. Table de Vérité XOR

A B A ⊕ B
0 0 0
1 0 1
0 1 1
1 1 0

La fonction XOR a les propriétés suivantes, qui sont importantes pour comprendre les mathématiques derrière la cryptographie :

  • Associative : A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C
  • Commutative : A ⊕ B = B ⊕ A
  • Négation : A ⊕ 1 = Ā
  • Identité : A ⊕ A = 0

En utilisant ces propriétés, il serait maintenant logique de savoir comment calculer le chiffrement texte “c” en utilisant le texte simple “m et la clé “k“, puis décrypter le chiffrement texte “c” avec la même clé “k” pour obtenir le texte clair “m. ” La même fonction XOR est utilisée à la fois pour le chiffrement et le décryptage.

mk = c et c ⊕ k = m

L’exemple précédent est dans sa forme la plus simple pour comprendre les notions de cryptage et de décryptage. Notez qu’il est très simple d’obtenir le message original en texte clair juste par XORing avec la clé, qui est un secret partagé et seulement connu par les parties visées. Tout le monde peut savoir que l’algorithme de cryptage ou de décryptage ici est XOR, mais pas la clé.

Chiffrement de flux vs chiffrement de bloc

Les algorithmes de chiffrement de flux et de chiffrement de bloc diffèrent dans la façon dont le texte clair est codé et décodé.

Les chiffrements de flux convertissent un symbole de texte clair en un symbole de chiffrement texte. Cela signifie que le chiffrement a effectué un bit ou un octet de texte clair à la fois. Dans un scénario de cryptage petit à petit, pour chiffrer chaque bit de texte clair, une clé différente est générée et utilisée. Ainsi, il utilise un flux infini de bits pseudo random comme la clé et effectue l’opération XOR avec des bits d’entrée de texte clair pour générer du chiffrement text. Pour qu’un tel système reste sécurisé, le générateur de flux de clés pseudo random doit être sécurisé et imprévisible. Les chiffrements de flux sont une approximation d’un chiffrement parfait éprouvé appelé « le bloc-notes unique », dont nous discuterons dans un peu de temps.

Comment le flux de clés pseudo random est-il généré en premier lieu ? Ils sont généralement générés en série à partir d’une valeur de démarrage aléatoire à l’aide de registres numériques de décalage. Les chiffrements de flux sont assez simples et plus rapides dans l’exécution. On peut générer des bits pseudo-aléatoires et décrypter très rapidement, mais cela nécessite une synchronisation dans la plupart des cas.

Nous avons vu que le générateur de nombres pseudo-aléatoires qui génère le flux clé est la pièce centrale ici qui assure la qualité de la sécurité, qui se présente pour être son plus grand inconvénient. Le générateur de nombres pseudo-aléatoires a été attaqué à plusieurs reprises dans le passé, ce qui a conduit à la dépréciation des chiffrements de flux. Le chiffrement de flux le plus largement utilisé est RC4 (Rivest Cipher 4) pour divers protocoles tels que SSL, TLS, et Wi-Fi WEP/WPA etc. Il a été révélé qu’il y avait des vulnérabilités dans RC4, et il a été recommandé par Mozilla et Microsoft de ne pas l’utiliser dans la mesure du possible.

Un autre inconvénient est que toutes les informations contenues dans un bit de texte d’entrée est contenu dans son correspondant de bit de texte chiffré, ce qui provoque un problème de faible diffusion. Il aurait pu être plus sécurisé si l’information d’un bit a été distribuée sur de nombreux bits dans la sortie de chiffrement texte, ce qui est le cas avec les chiffrements de bloc. Des exemples de chiffrements de flux sont un pad unique, RC4, FISH, SNOW, SEAL, A5/1, etc.

Le chiffrement de bloc d’autre part est basé sur l’idée de partitionner le texte clair en blocs relativement plus grands de groupes de bits de longueur fixe, et d’encoder davantage chacun des blocs séparément en utilisant la même clé. Il s’agit d’un algorithme déterministe avec une transformation invariable à l’aide de la clé symétrique. Cela signifie que lorsque vous chiffrez le même bloc de texte clair avec la même clé, vous obtiendrez le même résultat.

Les tailles habituelles de chaque bloc sont 64 bits, 128 bits, et 256 bits appelés longueur de bloc, et leurs blocs de chiffrement texte résultant sont également de la même longueur de bloc. Nous sélectionnons, disons, un r bits clé k pour chiffrer chaque bloc de longueur n, puis remarquez ici que nous avons limité les permutations de la clé k à un sous-ensemble très petit de 2r. Cela signifie que la notion de « chiffrement parfait » ne s’applique pas. Pourtant, la sélection aléatoire de la clé secrète r bits est importante, dans le sens que plus elle est aléatoire plus le chiffrement est secret.

Pour chiffrer ou déchiffrer un message dans la cryptographie de chiffrement de bloc, nous devons les mettre dans un « mode de fonctionnement » qui définit comment appliquer l’opération d’un chiffrement à un seul bloc à plusieurs reprises pour transformer des quantités de données plus grandes qu’un bloc. Eh bien, le mode de fonctionnement n’est pas seulement de diviser les données en blocs de taille fixe, il a un but plus grand. Nous avons appris que le chiffrement du bloc est un algorithme déterministe. Cela signifie que les blocs avec les mêmes données, lorsqu’ils sont cryptés à l’aide de la même clé, produiront le même chiffrement texte- assez dangereux ! Il fuit beaucoup d’informations. L’idée ici est de mélanger les blocs de plaintext avec les blocs de chiffrement texte juste créé d’une certaine manière de sorte que pour les mêmes blocs d’entrée, leurs sorties correspondantes chiffrées sont différentes. Cela deviendra plus clair lorsque nous arriverons aux algorithmes DES et AES dans les sections suivantes.

Notez que différents modes d’opérations se traduisent par différentes propriétés qui ajoutent à la sécurité du chiffrement de bloc sous-jacent. Bien que nous n’entrerons pas dans la cuisine des modes d’opérations, voici les noms de quelques-uns pour votre culture personnelle: Electronic Codebook (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), Output Feedback (OFB), et Counter (CTR).

Les chiffrements de bloc sont un peu lents à chiffrer ou déchiffrer, comparés aux chiffrements de flux. Contrairement aux chiffrements de flux où la propagation des erreurs est bien moindre, ici l’erreur en un seul bit pourrait corrompre l’ensemble du bloc. Au contraire, les chiffrements de bloc ont l’avantage de la diffusion élevée, ce qui signifie que chaque bit de texte clair d’entré est diffusé à travers plusieurs symboles de chiffrement texte. Des exemples de chiffrements de bloc sont DES, 3DES, AES, etc.

Le déterminisme : Un algorithme déterministe est un algorithme qui, compte tenu d’une entrée particulière, produira toujours la même sortie. (Connu à l’avance, déterminé à l’avance)

Conclusion
Chiffrement de flux Chiffrement de blocs
Avantages
  • Vitesse de transposition
  • Propagation à faible erreur
  • Diffusion
    • Informations du texte en clair si elles sont diffusées en plusieurs symboles de texte chiffré
    • Un bloc de texte chiffré peut dépendre de plusieurs lettres en texte brut
  • Immunité aux insertions : intégrité
    • Il est impossible d’insérer un seul symbole dans un bloc,
    • La longueur du bloc serait alors incorrecte, et le déchiffrement révélerait rapidement l’insertion,
    • L’intercepteur actif ne peut pas simplement supprimer une lettre de texte chiffré d’un message et en coller une nouvelle pour modifier un compte, une heure, une date ou le nom d’un message
Inconvénients
  • Diffusion faible (soumis aux outils tels que la distribution de fréquence, la digram analyse, l’indice de coïncidence et la méthode Kasiski
  • Susceptibilité aux insertions et modifications malveillantes (intégrité des données)
  • Les forces du chiffrement de flux
    • Vitesse
    • Propagation d’erreur
Pad unique (one-time pad)

Il s’agit d’un chiffrement de flux symétrique où le texte clair, la clé et le texte chiffré sont tous des chaînes de bits. En outre, il est entièrement basé sur l’hypothèse d’une clé “purement aléatoire” (et non pseudo aléatoire), en utilisant laquelle il pourrait atteindre le “secret parfait.” En outre, selon la conception, la clé ne peut être utilisée qu’une seule fois. Le problème avec ceci est que la clé devrait être au moins aussi longue que le texte clair. Cela signifie que si vous cryptez un fichier 1 Go, la clé serait également 1 Go! Cela devient impraticable dans de nombreux cas réels.

Exemple:

Tableau 2-2. Exemple de chiffrement à l’aide de la fonction XOR

Clair 1 0 0 1 1 1 0 0 1 0 1 0 1 1 0 1 1 0
Clé 0 1 0 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1
Ciphertext 1 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 0 1

Vous pouvez vous référer à la table de vérité XOR dans la section précédente pour trouver comment le texte chiffré est généré par XOR-ing plaintext avec la clé. Notez que le texte clair, la clé et le texte chiffré sont tous 18 bits de long.

Ici, le récepteur à la réception du chiffrement peut tout simplement XOR à nouveau avec la clé et obtenir le texte clair. Vous pouvez l’essayer vous-même avec le tableau 2-2 et vous obtiendrez le même texte.

Le principal problème avec ce one-time pad est plus la pratique, plutôt que la théorie. Comment l’expéditeur et le récepteur s’entendent-ils sur une clé secrète qu’ils peuvent utiliser ? Si l’expéditeur et le récepteur ont déjà un canal sécurisé, pourquoi ont-ils même besoin d’une clé ? S’ils n’ont pas de canal sécurisé (c’est pourquoi nous utilisons la cryptographie), alors comment peuvent-ils partager la clé en toute sécurité ? C’est ce qu’on appelle le « problème clé de distribution ».

La solution consiste à approximer le bloc-notes unique à l’aide d’un générateur de nombres pseudo-aléatoires (PRNG). Il s’agit d’un algorithme déterministe qui utilise une valeur source pour générer une séquence de nombres aléatoires qui ne sont pas vraiment aléatoires ; c’est en soi un problème. L’expéditeur et le récepteur doivent avoir la même valeur de démarrage pour que ce système fonctionne. Partager cette valeur source est beaucoup mieux par rapport au partage de la clé entière ; il doit juste être sécurisé. Il est susceptible d’être compromis par quelqu’un qui connaît l’algorithme ainsi que la source.

Norme de chiffrement des données (DES° : Data Encryption Standard)

La norme de chiffrement des données (DES) est une technique de chiffrement de bloc symétrique. Il utilise la taille du bloc 64 bits avec une clé 64 bits pour le chiffrement et le décryptage. Sur la clé 64 bits, 8 bits sont réservés aux contrôles de parité et techniquement 56 bits est la longueur de la clé. Il a été prouvé qu’il est vulnérable aux attaques par brute force et qu’il pourrait être brisé en moins d’un jour. Compte tenu de la loi de Moore, il pourrait être brisé beaucoup plus rapidement à l’avenir, de sorte que son utilisation a été dépréciée un peu en raison de la longueur de la clé. Il était très populaire et était utilisé dans les applications bancaires, les guichets automatiques, et d’autres applications commerciales, et plus encore dans les implémentations matérielles que les logiciels. Nous donnons une description détaillée du chiffrement DES dans cette section.

Dans la cryptographie symétrique, un grand nombre de chiffrements de bloc utilisent un schéma de conception connu sous le nom de « chiffrement de Feistel » ou « réseau Feistel ». Un chiffrement Feistel se compose de plusieurs tours pour traiter le texte clair avec la clé, et chaque tour se compose d’une étape de substitution suivie d’une étape de permutation. Plus le nombre de tours est élevé, plus il est sûr, mais le chiffrement/décryptage ralentit. Le DES est basé sur un chiffrage Feistel de 16 tours.

Une séquence générale d’étapes dans l’algorithme DES est montrée dans la figure 2-4.

Figure 2-4. Cryptographie DES

Parlons d’abord du générateur de clés, puis nous entrerons dans la partie cryptage.

  • Comme mentionné précédemment, la clé est également 64 bits de long. Étant donné que 8 bits sont utilisés comme bits de parité (plus précisément, bit numéro 8, 16, 24, 32, 40, 48, 56 et 64), seulement 56 bits sont utilisés pour le chiffrement et le décryptage.
  • Après la suppression de la parité, la clé 56 bits est divisée en deux blocs, chacun de 28 bits. Ils sont alors peu-sage gauche décalée à chaque tour. Nous savons que le DES utilise 16 tours du réseau Feistel. Notez ici que chaque tour prend le bloc de bits décalé à gauche du tour précédent, puis à nouveau à gauche des décalages d’un bit dans le tour actuel.
  • Les deux blocs 28 bits décalés à gauche sont ensuite combinés par un mécanisme de compression qui produit une clé de 48 bits appelée sous-clé qui est utilisée pour le chiffrement. De même, à chaque tour, les deux blocs de 28 bits de la ronde précédente se déplacer à nouveau d’un bit, puis matraqué et comprimé à la clé 48 bits. Cette clé est ensuite alimentée à la fonction de cryptage du même tour.

Examinons maintenant comment DES utilise les tours de chiffrement Feistel pour le cryptage:

  • Tout d’abord, l’entrée en texte clair est divisée en blocs de 64 bits. Si le nombre de bits dans le message n’est pas également divisible par 64, alors le dernier bloc est rembourré pour en faire un bloc 64 bits.
  • Chaque bloc de données d’entrée 64 bits passe par un premier tour de permutation (IP). Il permute simplement, c’est-à-dire, réarrange toutes les entrées 64 bits dans un modèle spécifique en transposant les blocs d’entrée. Il n’a aucune signification cryptographique en tant que telle, et son objectif est de le rendre plus facile à charger le texte clair/chiffretexte dans les puces DE dans le format byte-classé.
  • Après le tour IP, le bloc 64 bits est divisé en deux blocs 32 bits, un bloc gauche (L) et un bloc droit (R). Dans chaque tour, les blocs sont représentés comme Li et Ri, où le sous-scripte “I” désigne le tour. Ainsi, les résultats du cycle d’IP sont désignés comme L0 et R0.
  • Maintenant, les tours Feistel commencent. Le premier tour prend L0 et R0 comme entrée et suit les étapes suivantes:
  • Le bloc 32 bits du côté droit (R) vient comme c’est sur le côté gauche et le bloc 32 bits du côté gauche (L) passe par une opération avec le k clé de ce tour et le côté droit du bloc 32 bits (R) comme indiqué ci-dessous:
  • Li et Ret 1
  • Ri = Li – 1 ⊕ F(Ri -1, Ki) où “i” est le nombre du cycle
  • Le F() est appelé la “Fonction Decipher” qui est en fait la partie centrale de chaque tour. Il y a plusieurs étapes ou opérations qui sont regroupées dans cette opération F().
  • Dans la première étape, le fonctionnement du bloc R 32 bits est élargi et permuté pour produire un bloc de 48 bits.
  • Dans la deuxième étape, ce bloc 48 bits est alors XORed avec la sous-clé 48 bits fourni par le générateur de clé de la même ronde.
  • Dans la troisième étape, cette sortie XORed 48 bits est alimentée à la boîte de substitution pour réduire les bits de retour à 32 bits. L’opération de substitution dans cette boîte S est la seule opération non linéaire dans DES et contribue de manière significative à la sécurité de cet algorithme.
  • Dans la quatrième étape, la sortie 32 bits de la boîte S est alimentée à la boîte de permutation (Boîte P), qui est juste une opération de permutation qui produit un bloc 32 bits, qui est en fait la sortie finale de F() fonction de chiffrement.
  • La sortie de F() est alors XORed avec le 32 bits L-block, qui est entrée à ce tour. Cette sortie XORed devient alors la sortie finale de R-block de ce cycle.
  • Reportez-vous à la figure 2-5 pour comprendre les diverses opérations qui ont lieu à chaque ronde.

Figure 2-5. Fonction cycle de DES

  • Le cycle Feistel précédemment discuté est répété 16 fois, où la sortie d’un tour est alimentée comme entrée à la ronde suivante.
  • Une fois que tous les 16 tours sont terminés, la sortie du 16ème tour est à nouveau échangée de telle sorte que la gauche devient le bloc droit et vice versa.
  • Ensuite, les deux blocs sont matraqués pour faire un bloc 64 bits et passé par une opération de permutation, qui est l’inverse de la fonction de permutation initiale et qui se traduit par la sortie de texte chiffré 64 bits.

Nous avons examiné comment fonctionne vraiment l’algorithme DES. Le décryptage fonctionne également de la même manière dans l’ordre inverse. Nous n’entrerons pas dans ces détails, mais nous vous laisserons le reste à la découverte.

Concluons avec les limites du DES. La longueur de clé de 56 bits était susceptible à l’attaque de force brute et les S-boxes utilisés pour la substitution dans chaque tour étaient également sujettes à l’attaque de cryptanalyses en raison de quelques faiblesses inhérentes. Pour ces raisons, la norme de chiffrement avancée (AES) a remplacé le DES dans la mesure du possible. De nombreuses applications choisissent maintenant AES plutôt que DES.

Norme de chiffrement avancée (AES : Advances Encryption Standard))

Comme DES, l’algorithme AES est également un chiffrement de bloc symétrique mais n’est pas basé sur un réseau Feistel. L’AES utilise un réseau de substitution-permutation dans un sens plus général. Il offre non seulement une plus grande sécurité, mais offre également une plus grande vitesse ! Selon les normes AES, la taille du bloc est fixée à 128 bits et permet un choix de trois clés : 128 bits, 192 bits, et 256 bits. Selon le choix de la clé, AES est nommé AES-128, AES-192 et AES-256.

Dans AES, le nombre de tours de chiffrement dépend de la longueur de la clé. Pour AES-128, il y a dix tours ; pour AES-192, il y a 12 tours ; et pour AES-256, il y a 14 tours. Dans cette section, notre discussion se limite à la longueur clé 128 (c.-à-d., AES-128), car le processus est presque le même pour d’autres variantes de l’AES. La seule chose qui change, c’est le « calendrier clé », que nous examinerons plus loin dans cette section.

Contrairement à DES, les cycles de cryptage AES sont des itérations et actionnent un bloc de données entier de 128 bits à chaque tour. En outre, contrairement à DES, le décryptage n’est pas très similaire au processus de cryptage dans AES.

Pour comprendre les étapes de traitement dans chaque tour, considérez le bloc 128bit comme 16 octets où les octets individuels sont disposés dans une matrice de 4 à 4 comme indiqué :

Cette matrice de 4 à 4 octets telle qu’indiquée est appelée tableau d’état. Veuillez noter que chaque tour consomme un tableau d’état d’entrée et produit un tableau d’état de sortie.

L’AES utilise également un autre morceau de jargon appelé « mot » qui doit être défini avant d’aller plus loin. Alors qu’un octet se compose de huit bits, un mot se compose de quatre octets, c’est-à-dire de 32 bits. Les quatre octets dans chaque colonne du tableau d’état forment des mots 32 bits et peuvent être appelés mots d’état. Le tableau d’état peut être affiché comme suit :

En outre, chaque octet peut être représenté avec deux nombres hexadécimal.

Exemple : si l’octet 8 bits est {00111010}, il pourrait être représenté comme « 3A » dans la notation Hexadécimale “3” représente les quatre bits gauche “0011” et “A” représente les quatre bits droits “1010”.

Maintenant, pour généraliser chaque tour, le traitement dans chaque tour se produit au niveau octet et se compose de substitution au niveau octet suivie d’une permutation au niveau du mot, d’où il s’agit d’un réseau de substitution-permutation. Nous aurons plus de détails lorsque nous discuterons des différentes opérations de chaque cycle. Le processus global de cryptage et de décryptage de l’AES peut être représenté à la figure 2-6.

Figure 2-6. Cryptographie AES

Si vous avez prêté une attention particulière à la figure 2-6, vous avez remarqué que le processus de décryptage n’est pas seulement le contraire du chiffrement. Les opérations dans les tours sont exécutées dans un ordre différent ! Toutes les étapes de la fonction ronde — SubBytes, ShiftRows, MixColumns, AddRoundKey — sont inversibles. Aussi, notez que les tours sont de nature itérative. La première ronde à la neuvième ronde comporte les quatre opérations, et le dernier tour exclut uniquement l’opération “MixColumns”. Construisons maintenant une compréhension de haut niveau de chaque opération qui se déroule dans une fonction ronde.

SubBytes: Il s’agit d’une étape de substitution. Ici, chaque octet est représenté comme deux chiffres hexadécimaux. À titre d’exemple, prenez un octet {00111010} représenté avec deux chiffres hexadécimaux, par exemple 3A. Pour trouver ses valeurs de substitution, consultez la table de recherche S-box (16 à 16 tables) pour trouver la valeur correspondante pour 3-row et A-column. Ainsi, pour 3A, la valeur substituée correspondante serait {80}. Cette étape fournit la non-linéarité dans le chiffrement.

ShiftRows: Il s’agit de l’étape de transformation et est basée sur la représentation de la matrice du tableau de l’état. Il se compose des opérations de quart suivantes :

  • Aucun déplacement circulaire de la première rangée, et reste tel quel
  • Déplacement circulaire de la deuxième rangée par un octet vers la gauche
  • Déplacement circulaire de la troisième rangée par deux octets vers la gauche
  • Déplacement circulaire de la quatrième rangée (dernière rangée) par trois octets vers la gauche

Il peut être représenté comme indiqué :

MixColumns: C’est aussi une étape de transformation où les quatre colonnes de l’Etat se multiplient avec un polynomial fixe (Cx) et se transforment en nouvelles colonnes. Dans ce processus, chaque octet d’une colonne est cartographié à une nouvelle valeur qui est une fonction des quatre octets dans la colonne. Ceci est réalisé par la multiplication de la matrice de l’état comme indiqué :

La multiplication de matrice est comme d’habitude, mais les produits ET sont XORed. Voyons l’un des exemples pour comprendre le processus. Byte 0′ est calculé comme indiqué :

Byte 0′ = (2 . Byte0) ⊕ (3 . Byte1) ⊕ Byte3 ⊕ Byte4

Il est important de noter que cette étape MixColumns, avec l’étape ShiftRows, fournit la propriété de diffusion nécessaire (information d’un octet est diffusé à plusieurs octets) au chiffrement.

AddRoundKey: Il s’agit à nouveau d’une étape de transformation où la clé ronde 128bit est au niveau du bit XORed avec 128 bits d’état dans un ordre de colonne majeure. Ainsi, l’opération a lieu au niveau de la colonne, ce qui signifie quatre octets d’une colonne d’état de mot avec un mot de la clé ronde. De la même manière que nous avons représenté le bloc de texte clair 128 bits, la clé 128 bits devrait également être représentée dans la même matrice 4 à 4 comme indiqué ici :

Clé 128 bits

Cette opération affecte chaque bit d’un état. Maintenant, se rappeler qu’il y a dix tours, et chaque tour a sa propre clé ronde. Étant donné qu’il y a une étape “AddRoundKey” avant le début des tours, il y a en fait onze (10+1) opérations AddRoundKey. Dans un tour, tous les 128 bits de sous-clé, c’est-à-dire les quatre mots de sous-clé, sont utilisés pour XOR avec le bloc de données d’entrée 128 bits. Donc, au total, nous avons besoin de 44 mots clés, w0 à w43. C’est pourquoi la clé 128 bits doit passer par une opération d’expansion clé, que nous allons obtenir dans un peu de temps.

Notez ici que le mot clé [w0, w1, w2, w3] obtient XORed avec le bloc d’entrée initial avant le traitement à base de rond commence. Les 40 touches de mots restantes, w4 à w43, utilisent quatre mots à la fois dans chacun des dix tours.

AES Key Expansion: L’algorithme d’extension de la clé AES prend comme entrée une clé de chiffrement de 128 bits (clé de quatre mots) et produit un calendrier de 44 mots clés à partir de celui-ci. L’idée est de concevoir ce système de telle sorte qu’un changement d’un bit dans la clé affecterait de manière significative toutes les clés rondes.

L’opération d’expansion clé est conçue de telle sorte que chaque groupement d’une clé de quatre mots produit le groupement suivant d’une clé de quatre mots dans une base de quatre à quatre mots. Il est facile d’expliquer cela avec une représentation picturale, alors nous y voilà:

Figure 2-7. Expansion clé d’AES

Nous allons rapidement passer en revue les opérations qui ont lieu pour la clé d’expansion en se référant au diagramme :

  • La touche initiale de 128 bits est [w0, w1, w2, w3] arrangé en quatremots.
  • Jetez un oeil au mot élargi maintenant : [w4, w5, w6, w7]. Notez que w5 dépend de w4 et w1. Cela signifie que chaque mot élargi dépend du mot immédiatement précédent, c’est-à-dire, wi – 1 et le mot qui est de quatre positions en arrière, c’est-à-dire, wi – 4 . Testez la même chose pour w6 . Comme vous pouvez le voir, juste une simple opération XOR est effectuée ici.
  • Maintenant, qu’en est-il de w4? Ou, toute autre position qui est un multiple de quatre, comme w8 ou w12? Pour ces mots, une fonction plus complexe dénotée comme «g» est utilisée. Il s’agit essentiellement d’une fonction en trois étapes. Dans la première étape, le bloc d’entrée de quatre mots passe par le décalage circulaire gauche par un octet. Par exemple [w0, w1, w2, w3] devient[w1, w2, w3, w0]. Dans la deuxième étape, le mot d’entrée des quatre octets (par exemple, [w1, w2, w3, w0]) est pris comme entrée et la substitutionoctet est appliquée sur chaque octet à l’aide de S-box. Puis, dans la troisième étape, le résultat de l’étape 2 est XORed avec quelque chose appelé rond constante dénoté comme Rcon[ ]. La constante ronde est un mot dans lequel les trois octets les plus à droite sont toujours nuls. Par exemple, [x, 0, 0, 0]. Cela signifie que le but de Rcon[ ] est de simplement effectuer XOR sur l’octet le plus à gauche de l’étape 2 mot clé de sortie. Notez également que le Rcon[ ] est différent pour chaque tour. De cette façon, la sortie finale de la fonction complexe “g” est générée, qui est alors XORed avec wi 4 pour obtenir wi où “i” est un multiple de 4.
  • C’est ainsi que se déroule la mise en place de la clé d’expansion dans l’AES.

Le tableau d’état de sortie du dernier tour est réarrangé pour former le bloc de chiffrement de 128 bits. De même, le processus de décryptage se déroule dans un ordre différent, que nous avons examiné dans le diagramme du processus AES. L’idée était de vous donner un point de vu général sur la façon dont cet algorithme fonctionne à un niveau élevé, et nous allons limiter notre discussion à seulement le processus de cryptage dans cette section.

L’algorithme AES est standardisé par le NIST (National Institute of Standards and Technology). Il avait la limitation du long temps de traitement. Supposons que vous envoyez seulement un fichier de 1 mégaoctet (8388608 bits) en cryptant avec AES. À l’aide d’un algorithme AES de 128 bits, le nombre d’étapes requises pour ce chiffrement sera de 8388608/128 à 65536 sur ce même nombre de blocs de données ! En utilisant une approche de traitement parallèle, l’efficacité AES peut être augmentée, mais n’est toujours pas très approprié lorsque vous avez affaire à de grands volumes de données.

Défis dans la cryptographie des clés symétriques

Il y a quelques limites dans la cryptographie symétrique de clé. Quelques-uns d’entre eux sont énumérés comme suit :

  • La clé doit être partagée par l’expéditeur et le récepteur avant toute communication. Il faut mettre en place un mécanisme d’établissement de clé sécurisé.
  • L’expéditeur et le récepteur doivent se faire confiance, car ils utilisent la même clé symétrique. Si un récepteur est piraté par un attaquant ou que le récepteur a délibérément partagé la clé avec quelqu’un d’autre, le système est compromis.
  • Un vaste réseau de n nœuds, par exemple, nécessitent n(n-1)/2 paires de clés à gérer.
  • Il est conseillé de continuer à changer la clé pour chaque séance de communication.
  • Souvent, un tiers de confiance est nécessaire pour une gestion efficace des clés, ce qui est lui-même un gros problème.

Fonctions de hachage cryptographiques

Les fonctions de hachage sont les fonctions mathématiques qui sont les primitives cryptographiques les plus importantes et font partie intégrante de la structure des données de la blockchain. Ils sont largement utilisés dans de nombreux protocoles cryptographiques, applications de sécurité de l’information telles que les signatures numériques et les codes d’authentification des messages (MACs : Message Authentification Codes). Puisqu’ils sont employés dans la cryptographie asymétrique de clés, nous en discuterons ici avant d’entrer dans la cryptographie asymétrique. Veuillez noter que les concepts abordés dans cette section peuvent ne pas être conformes aux manuels académiques, et un peu biaisés vers l’écosystème de la blockchain.

Les fonctions de hachage cryptographique sont une classe spéciale de fonctions de hachage qui sont aptes à la cryptographie, et nous limiterons notre discussion en se rapportant à elle seulement. Ainsi, une fonction de hachage cryptographique est une fonction à sens unique qui convertit les données d’entrée de longueur arbitraire et produit une sortie de longueur fixe. La sortie est généralement appelée «hash value » ou « message digest». Il peut être représenté comme indiqué Figure 2-8.

Figure 2-8. Fonction de hachage dans sa forme basique

Pour que les fonctions de hachage servent leur but de conception et soient utilisables, elles devraient avoir les propriétés de noyau suivantes :

  • L’entrée peut être n’importe quelle chaîne de n’importe quelle taille, mais la sortie est de longueur fixe, par exemple, une sortie de 256 bits ou une sortie de 512 bits à titre d’exemples.
  • La valeur de hachage doit être efficacement calculable pour n’importe quel message donné.
  • Il est déterministe, en ce sens que la même entrée lorsqu’elle est fournie à la même fonction de hh produit la même valeur de hheth à chaque fois.
  • Il est infaisable (mais pas impossible !) d’inverser et de générer le message à partir de sa valeur de hachage, sauf en essayant de tous les messages possibles.
  • Tous les petits changements dans le message devraient grandement influencer le hachage de sortie, juste pour que personne ne puisse corréler la nouvelle valeur de hachage avec l’ancienne après un petit changement.

En dehors des propriétés de base mentionnées ci-dessus, ils doivent également répondre aux propriétés de sécurité suivantes pour être considéré comme un protocole cryptographique:

  • Résistance aux collisions : Cela implique qu’il est impossible de trouver deux entrées différentes, par exemple, X et Y, qui hachent à la même valeur.

Cela rend la fonction hash H() résistante aux collisions parce que personne ne peut trouver X et Y, de même que H(X) H(Y). Notez que cette fonction de hachage est une fonction de compression, car elle comprime une entrée donnée à la sortie de taille fixe qui est plus courte que l’entrée. Ainsi, l’espace d’entrée est trop grand (n’importe quoi de n’importe quelle taille) comparé à l’espace de sortie, qui est fixe. Si la sortie est une valeur de hachages de 256 bits, alors l’espace de sortie peut avoir un maximum de 2256 valeurs, et pas au-delà. Cela implique qu’une collision doit exister. Cependant, il est extrêmement difficile de trouver cette collision. Selon la théorie du « paradoxe d’anniversaire », nous pouvons en déduire qu’il devrait être possible de trouver une collision en utilisant la racine carrée de l’espace de sortie. Donc, en prenant 2128 + 1entrées, il est très probable de trouver une collision ; mais c’est un nombre extrêmement énorme à calculer, ce qui est tout à fait infaisable!

Discutons maintenant où cette propriété pourrait être utile. Dans la majorité du stockage en ligne, du stockage de fichiers en nuage, du stockage blob, des App Stores, etc., la propriété « résistance aux collisions » est largement utilisée pour assurer l’intégrité des fichiers. Exemple : quelqu’un calcule le « message digest » d’un fichier et les télécharge sur le stockage en nuage. Plus tard, quand ils téléchargent le fichier, ils pourraient simplement calculer le digest message à nouveau et recouper avec l’ancien. De cette façon, il peut être assuré si le fichier a été corrompu en raison de certains problèmes de transmission ou peut-être en raison de certaines tentatives délibérées. C’est en raison de la résistance à la collision que personne ne peut arriver à un fichier différent ou un fichier modifié qui serait haché à la même valeur que celle du fichier d’origine.

  • Résistance préimage : Cette propriété signifie qu’il est informatiquement impossible d’inverser une fonction de hachage; c’est-à-dire qu’il est impossible de trouver l’entrée X de la sortie H(X). Par conséquent, cette propriété peut également être appelée propriété «cachée». Faites très attention ici; il y a un autre aspect subtil à cette situation. Notez que lorsque X peut être n’importe quoi dans le monde, cette propriété est facilement atteinte. Cependant, s’il n’y a qu’un nombre limité de valeurs que X peut prendre, et qui est connu de l’adversaire, ils peuvent facilement calculer toutes les valeurs possibles de X et trouver lequel on hache au résultat.

Exemple : Un laboratoire a décidé de préparer le message pour le résultat réussi d’une expérience afin que tout adversaire qui a accès à la base de données des résultats ne puisse pas comprendre le sens parce que ce qui est stocké dans le système sont des sorties hachées. Supposons qu’il ne peut y avoir que trois résultats possibles de l’expérience comme OP111, OP112, et OP113, dont un seul est réussi, par exemple, OP112. Ainsi, le laboratoire décide de le hacher, calculer H(OP112), et stocker les valeurs hachées dans le système. Bien qu’un adversaire ne puisse pas trouver OP112 de H(OP112), il peut simplement déjouer tous les résultats possibles de l’expérience, c’est-à-dire H(OP111), H(OP112) et H(OP113) et voir que seul H(OP112) correspond à ce qui est stocké dans le système. Une telle situation est certainement vulnérable ! Cela signifie que, lorsque l’entrée à une fonction de hachage provenant d’un espace limité et ne provient pas d’une distribution étalée, elle est faible. Cependant, il y a une solution à ce sujet comme suit :

Prenons une entrée, disons “X” qui n’est pas très étalée, tout comme les résultats de l’expérience dont nous venons de discuter avec quelques valeurs possibles. Si nous pouvons concaténer que avec une autre entrée aléatoire, disons « r », qui vient d’une distribution de probabilité avec une entropie min élevé, alors il sera difficile de trouver X de H(r X). Ici, l’entropie élevée de min signifie que la distribution est très étalée et qu’il n’y a aucune valeur particulière qui est susceptible de se produire. Supposons que “r” a été choisi à partir de la distribution 256bit. Pour un adversaire d’obtenir la valeur exacte de “r” qui a été utilisé avec l’entrée, il y a une probabilité de succès de 1/2256, qui est presque impossible à atteindre. La seule façon est de considérer toutes les valeurs possibles de cette distribution une par une, ce qui est encore une fois pratiquement impossible. La valeur “r” est également appelée “nonce”. En cryptographie, un nonce est un nombre aléatoire qui ne peut être utilisé qu’une seule fois.

Discutons maintenant où cette propriété de la résistance préimage pourrait être utile. Il est très utile pour s’engager à une valeur, de sorte que « engagement » est le cas d’utilisation ici. Cela peut être mieux expliqué avec un exemple. Supposons que vous avez participé à une sorte de paris ou de jeu événement. Disons que vous devez vous engager à votre option, et le déclarer ainsi. Cependant, personne ne devrait être en mesure de comprendre ce que vous pariez, et vous-même ne pouvait pas nier plus tard sur ce que vous pariez. Ainsi, vous tirez parti de la propriété de résistance préimage de la fonction de hachage. Vous prenez un hach du choix sur qui vous pariez, et le déclarer publiquement. Personne ne peut inverser la fonction de hachage et comprendre ce que vous pariez. En outre, vous ne pouvez pas dire plus tard que votre choix était différent, parce que si vous hachez un choix différent, il ne pourra pas correspondre à ce que vous avez déclaré publiquement. Il est conseillé d’utiliser un nonce “r” comme nous l’avons expliqué dans le paragraphe précédent pour concevoir de tels systèmes.

Deuxième résistance préimage : Cette propriété est légèrement différente de la « résistance aux collisions ». Il implique que, compte tenu d’une entrée X et de son hach H(X), il est impossible de trouver Y, de sorte que H(X) = H(Y). Contrairement à la propriété résistante aux collisions, ici la discussion est pour un X donné, qui est fixé. Cela implique que si une fonction de hachage est déjà résistante à la collision, alors elle est résistante à la deuxième préimage aussi.

Il y a une autre propriété dérivée des propriétés mentionnées qui est très utile dans Bitcoin. Examinons-le d’un point de vue technique et apprenons comment Bitcoin l’exploite pour l’exploitation minière lorsque nous atteindrons le chapitre 3. Le nom de cette propriété est “puzzle convivialité”, “puzzle friendliness.” Ce nom implique qu’il n’y a pas de raccourci vers la solution et la seule façon d’arriver à la solution est de traverser toutes les options possibles dans l’espace d’entrée. Nous n’essaierons pas de le définir ici, mais nous essaierons directement de comprendre ce que cela signifie vraiment.

Considérons cet exemple : H(r || X) = Z, où “r” est choisi à partir d’une distribution avec une haute entropie min, “X” est l’entrée concaténée avec ““, et “Z” est la valeur de sortie hachée. La propriété signifie qu’il est beaucoup trop difficile pour un adversaire de trouver une valeur “Y” qui hachent exactement à “Z“. C’est-à-dire, H(r || Y) = Z, où r est une partie de l’entrée choisie de la même manière aléatoire que “r.” Ce que cela signifie, c’est que, lorsqu’une partie de l’entrée est substantiellement aléatoire, il est difficile de briser la fonction de hachage avec une solution rapide ; la seule façon est de tester avec toutes les valeurs aléatoires possibles.

Dans l’exemple précédent, si “Z” est une sortie n-bits, alors il n’a pris qu’une valeur sur 2n valeurs possibles. Notez soigneusement qu’une partie de votre entrée, disons «r», provient d’une distribution élevée d’entropie min, qui doit être jointe avec votre entrée X. Maintenant vient la partie intéressante de la conception d’un puzzle de recherche. Disons que Z est une sortie n-bits et est un ensemble de 2n valeurs possibles, pas seulement une valeur exacte. On vous demande de trouver une valeur de r telle que lorsqu’il est haché en jointure à X, il tombe dans cet ensemble de sortie de 2n valeurs; puis il forme un puzzle de recherche. L’idée est de trouver toutes les valeurs possibles de r jusqu’à ce qu’il tombe avec la gamme de Z. Notez ici que la taille de Z a limité l’espace de sortie à un plus petit ensemble de 2n valeurs possibles. Plus l’espace de sortie est petit, plus le problème est difficile. Évidemment, si la gamme est grande, il est plus facile de trouver une valeur en elle et si la gamme est assez étroite avec seulement quelques possibilités, alors trouver une valeur dans cette gamme est difficile. C’est la beauté du “r“, appelée “nonce” dans l’entrée à la fonction de hachage. Quelle que soit la valeur aléatoire de r que vous prendrez, il sera concaténé avec “X” et passera par la même fonction de hachage, encore et encore, jusqu’à ce que vous obtenez la bonne valeur nonce “r” qui satisfait la gamme requise pour Z, et il n’y a absolument aucun raccourci à elle, sauf pour essayer toutes les valeurs possibles!

Notez que pour une sortie de valeur de hachage de n-bit, un effort moyen de 2n est nécessaire pour briser la résistance préimage et la seconde préimage, et de 2n/2 pour la résistance aux collisions.

Nous avons discuté de diverses propriétés fondamentales et de sécurité des fonctions de hachage. Dans les sections suivantes, nous verrons quelques fonctions de hachage importantes et nous rentrerons plus profondément dans l’application.

Un heads-up sur différentes fonctions de haussier

L’une des fonctions de hachage ou de compression les plus anciennes est la fonction de hachage MD4. Elle appartient à la famille de message digest (MD). D’autres membres de la famille MD sont MD5 et MD6, et il existe de nombreuses autres variantes de MD4 comme RIPEMD. Les familles d’algorithmes MD produisent un message digest de 128 bits en consommant des blocs de 512 bits. Ils ont été largement utilisés comme checksums pour vérifier l’intégrité des données. De nombreux serveurs de fichiers ou référentiels logiciels utilisés pour fournir un checksum MD5 pré-computé, que les utilisateurs pouvaient vérifier par rapport au fichier qu’ils ont téléchargé. Cependant, il y avait beaucoup de vulnérabilités trouvées dans la famille MD et il a été déprécié.

Une autre de ces familles de fonctions de hachage est l’algorithme de hachage sécurisé. Il y a essentiellement quatre algorithmes dans cette famille, tels que SHA-0, SHA-1, SHA-2, et SHA- 3. Le premier algorithme proposé dans cette famille a été nommé SHA, mais les versions plus récentes étaient à venir avec des correctifs de sécurité et des mises à jour, de sorte qu’un rétronyme a été appliqué à elle et il a été fait SHA0. Il a été constaté qu’il avait une faille de sécurité grave mais non divulguée et a été abandonnée. Plus tard, SHA-1 a été proposé en remplacement de SHA-0.

SHA-1 avait une étape de calcul supplémentaire qui a abordé le problème dansSHA-0. Les deux SHA-0 et SHA-1 étaient des fonctions de hachage de 160 bits qui ont consommé des blocs de taille de 512 bits. SHA-1 a été conçu par la National Security Agency (NSA) pour l’utiliser dans l’algorithme de signature numérique (DSA). Il a été utilisé beaucoup dans de nombreux outils de sécurité et des protocoles Internet tels que SSL, SSH, TSL, etc. Il a également été utilisé dans les systèmes de contrôle de version tels que Mercurial, Git, etc pour les contrôles de cohérence, et pas vraiment pour la sécurité. Plus tard, vers 2005, des faiblesses cryptographiques y ont été trouvées et elles ont été dépréciées après l’année 2010. Nous allons comprendre SHA-2 et SHA-3 en détail dans les sections suivantes.

SHA-2

Il appartient à la famille SHA des fonctions de hachage, mais lui-même est une famille de fonctions de hachage. Il a de nombreuses variantes SHA telles que SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, et SHA-512/256. SHA-256 et SHA-512 sont les fonctions primitives de hachage et les autres variantes en sont dérivées. La famille SHA-2 de fonctions de hachage sont largement utilisés dans des applications telles que SSL, SSH, TSL, PGP, MIME, etc. très connues et utilisées en informatique.

SHA-224 est une version tronquée de SHA-256 avec une valeur initiale différente ou un vecteur d’initialisation (IV). Notez que les variantes SHA avec différentes troncatures appliquées peuvent produire les mêmes sorties de hachage de taille en bit, d’où différents vecteurs d’initialisation sont appliqués dans différentes variantes SHA pour être en mesure de les différencier correctement.

Pour en revenir au calcul SHA-224, il s’agit d’un processus en deux étapes. Tout d’abord, la valeur SHA-256 est calculée avec un IV différent par rapport à la valeur par défaut utilisée dans SHA-256. Deuxièmement, la valeur de hachage de 256 bits qui en résulte est une troncature à 224 bits ; généralement les 224 bits de gauche sont conservés, mais le choix est à définir en fonction des préférences.

SHA-384 est une troncature de SHA-512, juste la façon dont SHA-224 est une version tronquée de SHA-256. De même, les versions 512/224 et SHA-512/256 sont des versions tronquées de SHA-512.

Vous vous demandez pourquoi ce concept de « troncature » existe? Notez que la troncation n’est pas seulement limitée à ceux que nous venons de mentionner, et il peut y avoir diverses autres variantes ainsi. Les principales raisons de la troncation pourraient être les suivantes :

  • Certaines applications nécessitent un message digest avec une certaine longueur qui est différente de celle par défaut.
  • Indépendamment de la variante SHA-2 que nous utilisons, nous pouvons sélectionner un niveau de troncature en fonction de la propriété de sécurité que nous voulons maintenir. Exemple : Compte tenu de l’état de puissance de calcul d’aujourd’hui, lorsque la résistance aux collisions est nécessaire, nous devons conserver au moins 160 bits et lorsque seule la pré-résistance à l’image est nécessaire, nous devrions en conserver au moins 80 bits. La propriété de sécurité telle que la résistance aux collisions diminue avec la troncation, mais elle devrait être choisi de telle sorte qu’il serait informatiquement impossible de trouver une collision.
  • La troncation aide également à maintenir la compatibilité vers l’arrière avec les applications plus anciennes. Exemple : SHA224 offre une sécurité de 112 bits qui peut correspondre à la longueur de clé du triple-DES (3DES).

Parlant d’efficacité, SHA-256 est basé sur un mot 32 bits et SHA512 est basé sur un mot 64 bits. Ainsi, sur une architecture 64 bits, SHA-512 et toutes ses variantes tronquées peuvent être calculer plus rapidement avec un meilleur niveau de sécurité par rapport à SHA-1 ou d’autres variantes SHA-256.

Le tableau 2-3 est une représentation tabulaire tirée du papier NIST qui représente SHA-1 et différentes propriétés d’algorithmes SHA-2 en un mot.

Tableau 2-3. FONCTION de hachage SHA-1 et SHA-2 en bref

En règle générale, il est conseillé de ne pas tronquer lorsqu’il n’est pas nécessaire. Certaines fonctions de hachage tolèrent la troncation et d’autres non, et cela dépend aussi de la façon dont vous l’utilisez et dans quel contexte.

SHA-256 et SHA-512

Comme mentionné, SHA-256 appartient à la famille SHA-2 des fonctions de hachage, et c’est celui utilisé dans Bitcoins ! Rien que ça, comme son nom l’indique, il produit une valeur de hachage de 256 bits, d’où le nom. Ainsi, il peut fournir 2128 bits de sécurité selon le paradoxe d’anniversaire (mentionné plus haut).

Rappelez-vous que les fonctions de hachage prennent une entrée arbitraire de longueur et produisent une sortie de taille fixe. L’entrée de longueur arbitraire n’est pas alimentée comme c’est le cas pour la fonction de compression et est divisée en blocs de longueur fixe avant d’être alimentée à la fonction de compression. Cela signifie qu’une méthode de construction est nécessaire qui peut itérer à travers la fonction de compression en construisant des blocs d’entrée de taille fixe à partir de données d’entrée de longueur arbitraire et de produire une sortie de longueur fixe. Il existe différents types de méthodes de construction telles que la construction de Merkle-Damgard, la construction d’arbres et la construction d’éponges. Il est prouvé que si la fonction de compression sous-jacente est résistante aux collisions, alors la fonction globale de hachage avec n’importe quelle méthode de construction devrait également être résistante à la collision.

La méthode de construction utilisée par SHA-256 est la construction de Merkle-Damgàrd, alors voyons comment elle fonctionne dans la figure 2-9.

Figure 2-9. Construction de Merkle-Damgàrd pour SHA-256

Se référant au diagramme, les étapes suivantes (présentées à un niveau élevé) sont exécutées dans l’ordre spécifié pour calculer la valeur finale du hashage :

  • Comme vous pouvez le voir dans le diagramme, le message est d’abord divisé en blocs de 512 bits. Lorsque le message n’est pas un multiple exact de 512 bits (ce qui est généralement le cas), le dernier bloc est en deçà de bits, d’où il est rembourré pour le faire 512 bits.
  • Les blocs de 512 bits sont en outre divisés en 16 blocs de mots 32 bits (16 ‘ 32 ‘512).
  • Chaque bloc passe par 64 tours de fonction ronde où chaque mot 32 bits passe par une série d’opérations. Les fonctions rondes sont une combinaison de certaines fonctions communes telles que XOR, ET, OU, NON, décalage au niveau du bit gauche / droite, etc et nous n’entrerons pas dans ces détails dans cet article, mais pourquoi pas dans un prochain article plus complet sur la cryptographie.

Semblable à SHA-256, les étapes et les opérations sont assez similaires dans SHA-512, comme SHA-512 utilise également la construction Merkle-Damgard. La principale différence est qu’il y a 80 tours de fonctions rondes dans SHA-512 et la taille du mot est de 64 bits. La taille du bloc dans SHA-512 est de 1024 bits, qui est encore divisé en 16 blocs de mots 64 bits Le message digest de sortie est de 512 bits de longueur, c’est-à-dire, huit blocs de mots 64 bits. Alors que SHA512 prenait de l’ampleur et commençait à être utilisé dans de nombreuses applications, quelques personnes se sont tournées vers l’algorithme SHA-3 pour être prêtes pour l’avenir. SHA-3 est juste une approche différente de hachage et non pas un véritable remplacement de SHA-256 ou SHA-512, mais il permet l’ajustement. Nous allons apprendre quelques détails supplémentaires sur SHA-3 dans les sections suivantes.

Ripemd

La fonction de hachage RACE Integrity Primitives Evaluation Message Digest (RIPEMD) est une variante de la fonction de hachage MD4 avec presque les mêmes considérations de conception. Comme il est utilisé dans Les Bitcoins, nous aurons une brève discussion à ce sujet.

L’original RIPEMD était de 128 bits, plus tard RIPEMD-160 a été développé. Il existe des versions 128-, 256 et 320 bits de cet algorithme, appelé RIPEMD-128, RIPEMD-256, et RIPEMD-320, respectivement, mais nous limiterons notre discussion à la RIPEMD-160 la plus populaire et la plus largement utilisée.

RIPEMD-160 est une fonction de hachage cryptographique dont la fonction de compression est basée sur la construction de Merkle-Damgàrd. L’entrée est divisée en blocs de 512 bits et le rembourrage est appliqué lorsque les bits d’entrée ne sont pas un multiple de 512. La valeur de hachage est de 160 bits et est généralement représentée en nombres hexadécimale à 40 chiffres.

La fonction de compression est composée de 80 étapes, composées de deux lignes parallèles de cinq tours de 16 étapes chacune (5 x 16 = 80). La fonction de compression fonctionne sur seize mots 32 bits (blocs de 512 bits).

Notez que Bitcoin utilise à la fois le hachage sha-256 et ripeMD-160 ensemble pour la génération d’adresses. ripeMD-160 est utilisé pour raccourcir davantage la production de valeur de sortie de hachage de sha- 256 à 160 bits.

SHA-3 (EN)

En 2015, l’algorithme Keccak (prononcé comme «ket-chak») a été standardisé par le NIST comme le SHA-3. Notez que le but n’était pas vraiment de remplacer la norme SHA-2, mais de compléter et de coexister avec elle, même si l’on peut choisir SHA-3 sur SHA-2 dans certaines situations.

Étant donné que SHA-1 et SHA-2 étaient basés sur la construction de Merkle-Damgàrd, une approche différente de la fonction de hachage était souhaitable. Ainsi, ne pas utiliser la construction de Merkle-Damgard était l’un des critères fixés par le NIST. C’est parce que la nouvelle conception ne devrait pas souffrir des limites de la construction Merkle-Damgard tels que les multi-collisions. Keccak, qui est devenu SHA-3, a utilisé une méthode de construction différente appelée construction d’éponge.

Afin d’assurer la rétrocompatibilité, il était nécessaire que SHA-3 soit en mesure de produire des sorties de longueur variable telles que 224, 256, 384, et 512 bits et aussi d’autres sorties de longueur arbitraires. De cette façon, SHA-3 est devenu une famille de fonctions de hachage cryptographique telles que SHA3-224, SHA3-256, SHA3-384, SHA3 -512, et deux fonctions de sortie extensible (XOFs), appelées SHAKE128 et SHAKE256. En outre, SHA-3 devait avoir un paramètre réglable (capacité) pour permettre un compromis entre la sécurité et la performance. Puisque SHAKE128 et SHAKE256 sont des XOF, leur production peut être étendue à n’importe quelle longueur désirée, d’où le nom.

Le diagramme suivant (figure 2-10) montre comment SHA-3 (algorithme de Keccak) est conçu à un niveau élevé.

Figure 2-10. Construction d’éponge pour SHA-3

Voici une série d’étapes qui ont lieu pour SHA-3 :

  • Comme vous pouvez le voir dans la figure 2-10, le message est d’abord divisé en blocs (xi)de taille r bits. Si les données d’entrée ne sont pas un multiple de bits r, alors le rembourrage est nécessaire. Si vous vous interrogez sur ce r, ne vous inquiétez pas, nous y arriverons dans un peu de temps. Maintenant, concentrons-nous sur la façon dont ce rembourrage se produit. Pour un bloc de message xi qui n’est pas un multiple de r et a un certain message m en elle, le rembourrage se passe comme indiqué dans ce qui suit: xi = m || P 1 {0}* 1

“P” est une chaîne de bits prédéterminée suivie de 1 {0} 1, ce qui signifie un leader et à la traîne 1 et un certain nombre de zéros (pourrait être pas zéro bits aussi) qui peut faire xi un multiple de r. Le tableau 2-4 montre les différentes valeurs de P.

Tableau 2-4. Rembourrage en variantes SHA-3

  • Comme vous pouvez le voir dans la figure 2-10, il y a généralement deux phases à la construction d’éponges SHA-3 : la première est la phase « Absorbante » pour l’entrée, et la seconde est la phase « Pressante » pour la sortie. Dans la phase absorbante, les blocs de message (xi) passent par diverses opérations de l’algorithme et dans la phase Pressante, la sortie de longueur configurable est calculée. Notez que pour ces deux phases, la même fonction appelée “Kecaak-f” est utilisée.
  • Pour le calcul de SHA3-224, SHA3-256, SHA3384, SHA3 -512, qui est effectivement un remplacement de SHA-2, seuls les premiers bits du premier bloc de sortie y0 sont utilisés avec le niveau requis de troncation.
  • Le SHA-3 est conçu pour être réglable pour sa résistance de sécurité, l’entrée et les tailles de sortie à l’aide des paramètres de tuning.
  • Comme vous pouvez le voir dans le diagramme, “b” représente la largeur de l’état et exige que r + c = b. En outre, “b” dépend de l’exposant “l” tels que b = 25 x 2l
  • Étant donné que « l » peut prendre des valeurs comprises entre 0 et 6, « b » peut avoir des largeurs de 25, 50, 100, 200, 400, 800 et 1600. Il est conseillé de ne pas utiliser les deux plus petites valeurs de “b” dans la pratique car ils sont juste là pour analyser et effectuer la cryptanalyse sur l’algorithme.
  • Dans l’équation r + c = b, le “r” que nous voyons est ce que nous avons utilisé pour prétraiter le message et divisé en blocs de longueur “r”. C’est ce qu’on appelle le « taux de bits ». En outre, le paramètre “c” est appelé la capacité qui a juste à satisfaire la condition r + c = b ∈ {25, 50, 100, 200, 400, 800, 1600} et obtenir calcul. De cette façon, “r” et “c” sont utilisés comme paramètres de tuning pour faire l’ajustement entre la sécurité et la performance.
  • Pour SHA-3, la valeur exposante l est fixée à «6», de sorte que la valeur de b est de 1600 bits. Pour cela étant donné b = 1600, deux valeurs de débit de bits sont permises : r = 1344 et r = 1088. Cela conduit à deux valeurs distinctes de « c ». Donc, pour r = 1344, c = 256 et pour r = 1088, c = 512.
  • Examinons maintenant le moteur central de cet algorithme, c’est-à dire keccak-f, qui est également appelé “Keccak-f Permutation.” Il y a des tours “n” dans chaque Keccak-f, où “n” est calculé comme: n = 12 + 2l. Puisque la valeur de l est de 6 pour SHA-3, il y aura 24 tours dans chaque Keccak-f. Chaque tour prend des bits “b” (r + c) entrée et produit le même nombre de bits “b” que la sortie.
  • Dans chaque tour, l’entrée “b” est appelée un état. Ce tableau d’état “b” peut être représenté comme un tableau en trois dimensions b = ( 5 x 5 x w), où la taille du mot w = 2l. Donc, w = 64 bits, ce qui signifie 5 x 5 = 25 mots de 64 bits chacun. Rappelez-vous que l=6 pour SHA-3, donc b = 5 x 5 x 64 = 1600. Le tableau 3D peut être affiché comme dans la figure 2-11.

Figure 2-11. Représentation du tableau d’État dans SHA-3

  • Chaque tour se compose d’une séquence de cinq étapes et le tableau d’état est manipulé dans chacune de ces étapes comme indiqué dans la figure 2-12.

Figure 2-12. Les cinq étapes de chaque tour SHA-3

  • Sans entrer dans les détails de chacune des cinq étapes, apprenons rapidement ce qu’ils font à un niveau élevé :
  • Theta() étape: Il effectue l’opération XOR pour fournir une diffusion mineure.
  • Rho ()étape: Il effectue une rotation au niveau des bits de chacun des 25 mots.
  • Pi() étape: Il effectue la permutation de chacun des 25 mots.
  • Chi (-) étape: Dans cette étape, les bits sont remplacés en combinant ceux avec leurs deux bits suivants dans leurs lignes.
  • Iota ()étape : Il XOR une constante ronde en un mot d’état pour briser la symétrie.
  • Le dernier tour de Keccak-f produit la sortie y0, ce qui est suffisant pour le mode de remplacement SHA-2, c’est-à-dire, la sortie avec 224, 256, 384, et 512 bits. Notez que les bits les moins significatifs de y0 sont utilisés pour la sortie de longueur désirée. En cas de sortie de longueur variable, avec y0, autres bits de sortie de y1, y2, y3… peut également être utilisé.

Quand il s’agit de la mise en œuvre de la vie réelle de SHA-3, il est constaté que ses performances sont bonnes dans le logiciel (mais pas aussi bonnes que SHA-2) et est excellentes dans le matériel (mieux que SHA-2).

Applications des fonctions de haussier

Les fonctions de hachage cryptographique ont de nombreux usages différents dans différentes situations. Voici quelques exemples de cas d’utilisation :

  • Les fonctions de hachage sont utilisées pour vérifier l’intégrité et l’authenticité de l’information.
  • Les fonctions de hachage peuvent également être utilisées pour indexer les données dans les tables de hachage. Cela peut accélérer le processus de recherche. Au lieu de l’ensemble des données, si nous recherchons en fonction des hachages (en supposant que la valeur de hachage beaucoup plus courte par rapport à l’ensemble des données), alors il devrait évidemment être plus rapide.
  • Ils peuvent être utilisés pour authentifier en toute sécurité les utilisateurs sans stocker les mots de passe localement. Imaginez une situation où vous ne voulez pas stocker des mots de passe sur le serveur, évidemment parce que si un adversaire pirate sur le serveur, ils ne peuvent pas obtenir le mot de passe de leurs hachages stockées. Chaque fois qu’un utilisateur tente de se connecter, le hachage du mot de passe poinçonné est calculé et comparé au hachage stocké. Sécurisé, n’est-ce pas ?
  • Étant donné que les fonctions de hachage sont des fonctions à sens unique, elles peuvent être utilisées pour implémenter PRNG.
  • Bitcoin utilise les fonctions de hachage comme algorithme de preuve de travail (PoW). Nous entrerons dans les détails de celui-ci lorsque nous travaillerons sur le Bitcoin.
  • Bitcoin utilise également des fonctions de hachage pour générer des adresses afin d’améliorer la sécurité et la confidentialité.
  • Les deux applications les plus importantes sont les signatures numériques et dans les MACs tels que les codes d’authentification des messages à base de hachage (HMACs).

Comprendre le fonctionnement et les propriétés des fonctions de haussier, il peut y avoir divers autres cas d’utilisation où les fonctions de hachage peuvent être utilisés.

L’Internet Engineering Task Force (IETF) a adopté la version 3.0 du protocole SSL (SSLv3) en 1999, rebaptisé en protocole de sécurité de la couche de transport (TLS) version 1.0 (TLSv1) et l’a défini en RFC 2246. SSLv3 et TLSv1 sont compatibles en ce qui concerne les opérations de base.

Exemples de code des fonctions de haussier

Voici quelques exemples de code de différentes fonctions de hachage. Cette section est juste destinée à vous donner une vision sur la façon d’utiliser les fonctions de hachage programmatique. Les exemples de code sont en Python, mais seraient assez similaires dans différentes langues ; vous avez juste à trouver les bonnes fonctions de bibliothèque à utiliser.

# -*- coding: utf-8 -*-

import hashlib

# hashlib est un module populaire pour faire du hachage en python

#Construction des fonctions md5(), sha1(), sha224(), sha256(), sha384() et sha512() presentes dans le module hashlib

md=hashlib.md5()

md.update(“Le renard brun rapide saute par-dessus le chien paresseux”)

print md.digest()

print “Digest Size:”, md.digest_size, “\n”, “Block Size: “,

md.block_size

# Comparaison des différents messages digest de SHA224, SHA256,SHA384,SHA512

print “Digest SHA224”, hashlib.sha224(“Le renard brun rapide saute par-dessus le chien paresseux”).hexdigest()

print “Digest SHA256”, hashlib.sha256(“Le renard brun rapide saute par-dessus le chien paresseux”).hexdigest()

print “Digest SHA384”, hashlib.sha384(“Le renard brun rapide saute par-dessus le chien paresseux”).hexdigest()

print “Digest SHA512”, hashlib.sha512(“Le renard brun rapide saute par-dessus le chien paresseux”).hexdigest()

# Toutes les sorties de hachage sont uniques

# Exemple de hachage avec RIPEMD160 160 bit

h = hashlib.new(‘ripemd160′)

h.update(“Le renard brun rapide saute par-dessus le chien paresseux”)

h.hexdigest()

# Algorithme de dérivation de clé :

# Les algorithmes de hachage natifs ne sont pas résistants aux attaques par bruteforce.

# Des algorithmes de déviation de clé sont utilisés pour sécuriser le hachage de mot de passe.

import hashlib, binascii

algorithm=’sha256′

password=’HomeWifi’

salt=’salt’

# salt est une donnée aléatoire qui peut être utilisée comme une entrée additionnelle sur une fonction unidirectionnelle

nu_rounds=1000

key_length=64

#dklen est la taille de la clé dérivée

dk = hashlib.pbkdf2_hmac(algorithm,password, salt, nu_rounds, dklen=key_length)

print ‘derieved key: ‘,dk

print ‘derieved key in hexadeximal :’, binascii.hexlify(dk)

# Message de vérification des propriétés de hachage

import hashlib

input = “Sample Input Text”

for i in xrange(20):

# ajouter l’itérateur à la fin du texte

input_text = input + str(i)

# afficher le résultat d’entrée et de hachage

print input_text, ‘:’, hashlib.sha256(input_text).

hexdigest()

MAC et HMAC

HMAC est un type de MAC (code d’authentification de message). Comme son nom l’indique, le but d’un MAC est de fournir l’authentification de message en utilisant la clé symétrique et l’intégrité du message en utilisant des fonctions de hachage. Ainsi, l’expéditeur envoie le MAC avec le message pour le récepteur afin de le vérifier et de lui faire confiance. Le récepteur a déjà la clé K (comme la cryptographie de clé symétrique est utilisée, de sorte que l’expéditeur et le récepteur sont déjà en accord sur elle); ils l’utilisent simplement pour calculer le MAC du message et le vérifier par rapport au MAC qui a été envoyé avec le message.

Dans sa forme la plus simple, MAC = H(clé||message). HMAC est en fait une technique pour transformer les fonctions de hachage en MACs. Dans HMAC, les fonctions de hachage peuvent être appliquées plusieurs fois avec la clé et ses clés dérivées. Les HMAC sont largement utilisés dans les systèmes RFID, TLS, etc. Dans SSL/TLS (HTTPS est TTP dans SSL/TLS), HMAC est utilisé pour permettre au client et au serveur de vérifier et de s’assurer que les données échangées n’ont pas été modifiées pendant la transmission. Jetons un coup d’œil à quelques-unes des stratégies importantes de MAC qui sont largement utilisées :

  • MAC-then-Encrypt: Cette technique nécessite le calcul du MAC sur le texte clair, l’ajoutant aux données, puis cryptant tout cela ensemble. Ce schéma ne fournit pas l’intégrité du texte chiffré. À la fin de la réception, le décryptage du message doit d’abord se produire pour pouvoir vérifier l’intégrité du message. Il assure toutefois l’intégrité du texte clair. TLS utilise ce schéma de MAC pour s’assurer que la session de communication client-serveur est sécurisée.
  • Encrypt-and-MAC: Cette technique nécessite le cryptage et le calcul MAC du message ou du texte clair, puis l’application du MAC à la fin du message crypté ou du chiffrement. Notez que MAC est calculé sur le texte clair, de sorte que l’intégrité du texte clair peut être assurée, mais pas du texte chiffré, ce qui laisse la place à certaines attaques. Contrairement au schéma précédent, l’intégrité du texte clair peut être vérifiée. SSH (Secure Shell) utilise ce système MAC.
  • Encrypt-then-MAC: Cette technique exige que le texte clair doit d’abord être crypté, puis calculer le MAC sur le texte chiffré. Ce MAC du texte chiffré est ensuite annexé au chiffrement lui-même. Ce schéma assure l’intégrité du texte chiffré, il est donc possible de vérifier d’abord l’intégrité et, si elle est valide, de le déchiffrer. Il filtre facilement les chiffrages invalides, ce qui le rend efficace dans de nombreux cas. En outre, puisque MAC est en texte chiffré, en aucun cas il ne révèle des informations sur le texte clair. Il est généralement le plus idéal de tous les régimes et a des implémentations plus larges. Il est utilisé dans IPsec.

Cryptographie de clé asymétrique

La cryptographie asymétrique, également connue sous le nom de « cryptographie à clé publique », est un concept révolutionnaire introduit par Diffie et Hellman. Avec cette technique, ils ont résolu le problème de la distribution des clés dans un système de cryptographie symétrique en introduisant des signatures numériques. Notez que la cryptographie asymétrique des clés n’élimine pas le besoin de cryptographie de clé symétrique. Ils se complètent habituellement ; les avantages de l’un peuvent compenser les inconvénients de l’autre.

Voyons un scénario pratique pour comprendre comment un tel système fonctionne. Supposons qu’Alice veut envoyer un message à Bob confidentiellement afin que personne d’autre que Bob ne peut donner un sens au message, alors il faudrait les étapes suivantes :

Alice—L’expéditeur :

  • Chiffrer le message en texte clair m à l’aide de l’algorithme de cryptage E et de la clé publique PukBob pour préparer le texte chiffré c.
  • c = E (PukBob, m )
  • Envoyez le texte chiffré c à Bob.

Bob—Le récepteur :

  • Décrypter le texte chiffré c à l’aide de l’algorithme de décryptage D et de sa clé privée PrkBob pour obtenir le texte clair d’origine m.
  • m = D(PrkBob, c)

Un tel système peut être représenté comme indiqué à la figure 2-13.

Figure 2-13. Cryptographie asymétrique pour la confidentialité

Notez que la clé publique doit être conservée dans un dépôt public accessible à tous et que la clé privée doit être gardée comme un secret bien gardé. La cryptographie à clé publique offre également un moyen d’authentification. Le récepteur, Bob, peut vérifier l’authenticité de l’origine du message m de la même manière.

Figure 2-14. Cryptographie asymétrique pour l’authentification

Dans l’exemple de la figure 2-14, le message a été préparé à l’aide de la clé privée d’Alice, de sorte qu’il pourrait être assuré qu’il ne venait que d’Alice. Ainsi, l’ensemble du message a servi de signature numérique. Notez que la confidentialité et l’authentification sont souhaitables. Pour faciliter cela, le chiffrement des clés publiques doit être utilisé deux fois. Le message doit d’abord être crypté avec la clé privée de l’expéditeur pour fournir une signature numérique. Ensuite, il doit être crypté avec la clé publique du récepteur pour fournir la confidentialité. Il peut être représenté comme :

  • c = E[PukBob, E(PrkAlice, m)]
  • m = D[PukAlice, D(PrkBob, c)]

Comme vous pouvez le voir, le décryptage se produit dans juste son ordre inverse. Notez que la cryptographie à clé publique est utilisée quatre fois ici: deux fois pour le chiffrement et deux fois pour le décryptage. Il est également possible que l’expéditeur signe le message en appliquant la clé privée à un petit bloc de données dérivées du message à envoyer, et non à l’ensemble du message. Dans le monde réel, les magasins d’applications tels que Google Play ou Apple App Store exigent que les applications logicielles soient signées numériquement avant d’être publiées.

Nous avons examiné les utilisations des deux clés dans la cryptographie asymétrique, qui peut être résumée comme suit:

  • Les clés publiques sont connues et accessibles à tous. Ils peuvent être utilisés pour chiffrer le message ou pour vérifier les signatures.
  • Les clés privées sont extrêmement privées pour les particuliers. Ils sont utilisés pour déchiffrer le message ou pour créer des signatures.

Dans la cryptographie à clé asymétrique ou publique, il n’y a pas de problème de clé de distribution, car l’échange de la clé convenue n’est plus nécessaire. Cependant, cette approche représente un défi de taille. Comment s’assurer que la clé publique qu’ils utilisent pour chiffrer le message est vraiment la clé publique du destinataire visé et non d’un intrus ou d’un espion ? Pour résoudre ce problème, la notion d’un tiers de confiance appelé infrastructure à clé publique (ICP) est introduite. Grâce à PKIs, l’authenticité des clés publiques est assurée par le processus d’attestation ou de notarisation de l’identité de l’utilisateur. La façon dont les IK fonctionnent est qu’ils fournissent des clés publiques vérifiées en les incorporant dans un certificat de sécurité en les signant numériquement.

Le système de chiffrement à clé publique peut également être appelé fonction à sens unique ou fonction trappe. C’est parce que le cryptage d’un texte clair en utilisant la clé publique “Puk” est facile, mais l’autre direction est pratiquement impossible. Personne ne peut vraiment déduire le texte clair original du texte chiffré crypté sans connaître la clé secrète ou privée “Prk”, qui est en fait l’information trappe. En outre, dans le contexte des clés, ils sont mathématiquement liés, mais il est par calcul impossible de trouver l’une de l’autre.

Nous avons discuté des objectifs importants de la cryptographie à clé publique tels que l’établissement clé, l’authentification et la non-répudiation par le biais de signatures numériques, et la confidentialité par le cryptage. Cependant, tous les algorithmes de cryptographie à clé publique ne peuvent pas fournir toutes ces trois caractéristiques. En outre, les algorithmes sont différents en termes de leur problème de calcul sous-jacent et sont classés en conséquence. Certains algorithmes tels que RSA sont basés sur le schéma de factorisation intégriste, car il est difficile de factoriser de grands nombres. Certains algorithmes sont basés sur les problèmes discrets de logarithme dans les champs finis tels que l’échange de clés Diffie-Hellman (DH) et DSA. Une version généralisée des problèmes discrets de logarithme est la courbe elliptique (EC) des régimes de clé publique. L’algorithme de signature numérique elliptique de courbe (ECDSA) en est un exemple. Nous couvrirons la plupart de ces algorithmes dans la section suivante.

RSA

L’algorithme RSA, nommé d’après Ron Rivest, Adi Shamir et Leonard Adleman est peut-être l’un des algorithmes cryptographiques les plus utilisés. Il est basé sur la difficulté pratique de la factorisation d’un très grand nombre. Dans RSA, le texte clair et le chiffrement sont des entiers entre 0 et n – 1 pour certains n.

Nous discuterons du régime RSA sous deux aspects. La première est la génération de paires de clés et la deuxième, comment fonctionne le chiffrement et le décryptage. Étant donné que l’arithmétique modulaire fournit le mécanisme pour la génération de clé, regardons rapidement.

Arithmétique modulaire

Soit m un entier positif appelé module. Deux entiers a et b sont modulo m congru si:

ab (mod m), ce qui implique ab = m . k pour un entier k.

Exemple : si a ≡ 16 (mod 10) alors a peut avoir les solutions suivantes : a =. . ., -24, -14, -4, 6, 16, 26, 36, 46

L’un de ces nombres soustrait par 16 est divisible par 10. Par exemple, −24 −16 = −40, qui est divisible par 10. Notez qu’a ≡ 36 (mod 10) peut aussi avoir les mêmes solutions de a.

Selon le théorème d’Euclide seule une solution unique de «a» existe qui remplit la condition: 0 ≤ a <m. Dans l’exemple a ≡ 16 (mod 10), seule la valeur 6 satisfait la condition 0 ≤ 6 <10. C’est ce qui sera utilisé dans le processus de chiffrement / déchiffrement de l’algorithme RSA.

Voyons maintenant l’inverse modulaire. Si b est l’inverse d’a modulo m, alors il peut être représenté comme :

a b ≡ 1 (mod m), ce qui implique que a b – 1 = m. k pour un entier k.

Exemple : 3 a l’inverse 7 modulo 10

3 · 7 = 1 (mod 10) => 21 – 1 = 20, qui est divisible par 10.

Génération de paires de clés

Comme nous l’avons déjà vu, une paire de clés privées et publiques est nécessaire pour que toute partie participant à une crypto-communication asymétrique. Dans le régime RSA, la clé publique se compose de (e, n) où n est appelé le module et e est appelé l’exposant public. De même, la clé privée se compose de (d, n), où n est le même module et d est l’exposant privé.

Voyons comment ces clés sont générées avec un exemple :

  • Générez une paire de deux grands nombres premiers p et q.

Prenons deux petits nombres premiers comme exemple ici pour faciliter la compréhension. Alors, laissez les deux les nombres premiers soient p = 7 et q = 17.

  • Calculez le module RSA (n) comme n = pq. Ce n devrait être un grand nombre, généralement un minimum de 512 bits. Dans notre exemple, le module (n) = pq = 119.
  • Trouver un exposant public e tel que 1 < e < (p – 1) (q – 1) et il ne doit pas y avoir de facteur commun pour e et (p – 1) (q – 1) sauf 1. Cela implique que e et (p – 1) (q – 1) sont coprime. Notez qu’il peut y avoir plusieurs valeurs qui remplissent cette condition et peut être considéré comme e, mais n’importe laquelle devrait être prise.
  • Dans notre exemple, (p – 1) (q – 1) = 6 × 16 = 96. Donc, e peut être relativement premier et inférieur à 96. Supposons que e soit 5.
  • Maintenant, la paire de nombres (e, n) forme la clé publique et devrait être rendu public. Donc, dans notre exemple, la clé publique est (5, 119).
  • Calculer l’exposant privé d à l’aide de p, q et e considérant que le nombre d est l’inverse de e modulo (p – 1) (q – 1). Cela implique que d lorsqu’il est multiplié par e est égal à 1 modulo (p – 1) (q – 1) et d < (p – 1) (q – 1). Il peut être représenté comme : e d = 1 mod (p – 1) (q – 1)
  • Notez que cet inverse multiplicatif est le lien entre la clé privée et la clé publique. Bien que les clés ne soient pas dérivées les unes des autres, il existe une relation entre elles.
  • Dans notre exemple, nous devons trouver d tel que ce qui précède l’équation est satisfaite. Ce qui signifie, 5 d = 1 mod 96 et aussi d < 96.
  • Résolution de plusieurs valeurs de d (peut être calculée en utilisant la version étendue de l’algorithme d’Euclid), nous pouvons voir que d = 77 satisfait notre condition.

Voir les maths : 77 × 5 = 385 et 385 – 1 = 384 est divisible par 96 car 4 × 96 + 1 = 385

  • Nous pouvons conclure que le dans notre exemple, la clé privée sera (77, 119).
  • Vous avez maintenant vos paires de clés !
Chiffrement/déchiffrement à l’aide de la paire de clés

Une fois les clés générées, le processus de cryptage et de décryptage est assez simple. Le calcul derrière eux est le suivant :

Chiffrer le message en texte clair m pour obtenir le message chiffré c comme suit : c = m . e (mod n) étant donné la clé publique(e, n) et le message en texte clair m.

Décryptage du message chiffré c pour obtenir le message texte clair m est la suivante :

m = c . d (mod n) étant donné la clé privée (d, n) et le texte chiffré c.

Notez que le schéma RSA est un chiffrement de bloc où l’entrée est divisée en petits blocs que l’algorithme RSA peut consommer. En outre, le texte clair et le chiffrement sont tous des entiers de 0 à n1 pour certains n entier qui est connu à la fois par l’expéditeur et le récepteur. Cela signifie que le texte clair d’entrée est représenté comme entier, et quand cela passe par RSA et devient un texte chiffré, ils sont à nouveau entiers, mais pas les mêmes que l’entrée; nous les avons cryptés rappelez-vous? Maintenant, compte tenu des mêmes paires de clés de l’exemple précédent, passons par les étapes pour comprendre comment il fonctionne dans la pratique:

  • L’expéditeur veut envoyer un message texte au récepteur dont la clé publique est connue et est dit (e, n).
  • L’expéditeur décompose le message texte en blocs qui peuvent être représentés comme une série de nombres inférieurs à n.
  • Les équivalents de texte chiffré de texte clair peuvent être trouvés en utilisant c = m e (mod n). Si le texte clair (m) est de 19 et la clé publique est (5, 119) avec e = 5 et n = 119, puis le texte chiffré c sera 195 (mod 119) – 2, 476, 099 (mod 119) – 66, qui est le reste et 20 807 est le quotient, que nous n’utilisons pas. Donc, c = 66
  • Lorsque le texte chiffré 66 est reçu à l’extrémité du récepteur, il doit être décrypté pour obtenir le texte clair à l’aide de m = c d (mod n).
  • Le récepteur a déjà la clé privée (d, n) avec d = 77 et n = 119, et a reçu le text chiffré c = 66 par l’expéditeur. Ainsi, le récepteur peut facilement récupérer le texte clair en utilisant ces valeurs comme m = 6 677 (mod 119) = 19
  • Pour les calculs arithmétiques modulaires, il existe de nombreuses calculatrices en ligne que vous pouvez utiliser, tels que: http://comnuan.com/cmnn02/cmnn02008/

Nous avons examiné les mathématiques derrière l’algorithme RSA. Maintenant, nous savons que n (supposé être un très grand nombre) est accessible au public. Bien qu’il soit public, la factorisation de ce grand nombre pour obtenir les nombres premiers p et q est extrêmement difficile. Le régime RSA est basé sur cette difficulté pratique de factorisation de grands nombres. Si p et q ne sont pas assez grands, ou la clé publique e est petite, alors la force de RSA descend. Actuellement, les touches RSA sont généralement entre 1024 et 2048 bits de long. Notez que les frais généraux de calcul de la cryptographie RSA augmente avec la taille des clés.

Dans les situations où la quantité de données est énorme, il est conseillé d’utiliser une technique de cryptage symétrique et de partager la clé en utilisant une technique de cryptage asymétrique comme RSA. En outre, nous avons examiné l’un des aspects de RSA, c’est-à-dire, pour le chiffrement et le décryptage. Cependant, il peut également être utilisé pour l’authentification par signature numérique. Juste pour donner une idée de haut niveau, on peut prendre le hash des données, les signer à l’aide de sa propre clé privée, et le partager avec les données. Le récepteur peut vérifier avec la clé publique de l’expéditeur et s’assurer que c’est l’expéditeur qui a envoyé les données, et non quelqu’un d’autre. De cette façon, en plus de sécuriser le transport clé, la méthode de cryptage à clé publique RSA offre également l’authentification à l’aide d’une signature numérique. Notez ici qu’un algorithme différent appelé algorithme de signature numérique (DSA) peut également être utilisé dans de telles situations que nous allons apprendre dans la section suivante.

RSA est largement utilisé avec HTTPS sur les navigateurs Web, e-mails, VPN, et la télévision par satellite. En outre, de nombreuses applications commerciales ou les applications dans les magasins d’applications sont également signés numériquement en utilisant RSA. SSH utilise également la cryptographie à clé publique ; lorsque vous vous connectez à un serveur SSH, il diffuse une clé publique qui peut être utilisée pour chiffrer les données à envoyer à ce serveur. Le serveur peut alors déchiffrer les données à l’aide de sa clé privée.

Algorithme de signature numérique

Le DSA a été conçu par la NSA dans le cadre de la norme de signature numérique (DSS) et normalisé par le NIST. Notez que son objectif principal est de signer des messages numériquement, et non le chiffrement. Juste pour paraphraser, RSA est à la fois pour la gestion des clés et l’authentification alors que DSA est uniquement pour l’authentification. En outre, contrairement à RSA, qui est basé sur la factorisation grand nombre, DSA est basé sur logarithmes discrets. À un niveau élevé, DSA est utilisé comme indiqué dans la figure 2-15.

Figure 2-15. Algorithme de signature numérique (DSA)

Comme vous pouvez le voir dans la figure 2-15, le message est d’abord haché, puis signé parce qu’il est plus sécurisé par rapport à la signature, et ensuite son hachage. Idéalement, vous souhaitez vérifier l’authenticité avant de faire toute autre opération. Ainsi, une fois le message signé, le hachage signé est étiqueté avec le message et envoyé au récepteur. Le récepteur peut alors vérifier l’authenticité et trouver le hachage. Aussi, hacher le message pour obtenir le hachage à nouveau et vérifier si les deux hachages correspondent. De cette façon, DSA fournit les propriétés de sécurité suivantes :

  • Authenticité : Signée par clé privée et vérifiée par la clé publique
  • Intégrité des données : Les hachages ne correspondent pas si les données sont modifiées.
  • Non-répudiation : Depuis que l’expéditeur l’a signé, ils ne peuvent pas nier plus tard qu’ils n’ont pas envoyé le message. La non-répudiation est une propriété qui est la plus souhaitable dans les situations où il y a des chances d’un différend sur l’échange de données. Par exemple, une fois qu’une commande est passée électroniquement, l’acheteur ne peut refuser le bon de commande si la non-répudiation est activée dans une telle situation.

Un schéma DSA typique se compose de trois algorithmes : (1) génération de clés, (3) génération de signatures et (3) vérification de signature.

Cryptographie elliptique de courbe

La cryptographie elliptique de courbe (ECC) a réellement évolué la cryptographie de Diffie-Hellman. Il a été découvert comme un mécanisme alternatif pour la mise en œuvre de la cryptographie à clé publique. Il se réfère en fait à une suite de protocoles cryptographiques et est basé sur le problème logarithme discret, comme dans DSA. Cependant, on croit que le problème logarithmique discret est encore plus difficile lorsqu’il est appliqué aux points sur une courbe elliptique. Ainsi, ECC offre une plus grande sécurité pour une taille de clé donnée.

Une clé ECC 160 bits est considérée comme aussi sécurisée qu’une clé RSA 1024 bits. Étant donné que de plus petites tailles de clés dans ECC peuvent fournir une plus grande sécurité et des performances par rapport à d’autres algorithmes de clé publique, il est largement utilisé dans les petits dispositifs embarqués, capteurs, et d’autres dispositifs IoT, etc. Il existe des implémentations matérielles extrêmement efficaces pour ECC.

ECC est basé sur un ensemble mathématiquement lié de nombres sur une courbe elliptique sur les champs finis. En outre, il n’a rien à voir avec les ellipses ! Mathématiquement, une courbe elliptique satisfait les équations :

y2 = x3 + ax + b, où 4 a3 + 27 b2 ≠ 0

Avec différentes valeurs de “a” et “b“, la courbe prend différentes formes comme indiqué dans le diagramme suivant :

Il existe plusieurs caractéristiques importantes des courbes elliptiques qui sont utilisées dans la cryptographie, telles que :

  • Ils sont horizontalement symétriques c’est-à-dire que ce qui se trouve sous l’axe X est une image miroir de ce qui est au-dessus de l’axe X. Ainsi, n’importe quel point sur la courbe une fois reflété au-dessus de l’axe X reste toujours sur la courbe.
  • Toute ligne non verticale peut croiser la courbe dans tout aux plus trois endroits.
  • Si vous considérez deux points P et Q sur la courbe elliptique et tracez une ligne à travers eux, la ligne peut exactement traverser la courbe à un endroit de plus. Appelons-le (-R). Si vous tracez une ligne verticale à travers (-R), il traversera la courbe à, disons, R, qui est un reflet du point (-R). Maintenant, la troisième propriété implique que P+Q = R. C’est ce qu’on appelle « ajout de points », ce qui signifie que l’ajout de deux points sur une courbe elliptique vous mènera à un autre point sur la courbe. Se référer au diagramme suivant pour une représentation picturale de ces trois propriétés.

  • Ainsi, vous pouvez appliquer l’addition de point à n’importe quels des deux points sur la courbe. Maintenant, nous avons fait l’ajout de point de P et Q (P + Q) et a trouvé –R et finalement arrivé à R. Une fois que nous arrivons à R, nous pouvons alors tracer une ligne de P à R et voir que la ligne croise à nouveau le graphique à un troisième point. Nous pouvons alors prendre ce point et nous déplacer le long d’une ligne verticale jusqu’à ce qu’il croise à nouveau le graphique. Cela devient l’addition de point pour les points P et R. Ce processus avec un P fixé et le point résultant peut continuer aussi longtemps que nous le voulons, et nous allons continuer à obtenir de nouveaux points sur la courbe.
  • Maintenant, au lieu de deux points P et Q, que faire si nous appliquons l’opération au même point P, c’est-à-dire, P et P (appelé “point double”). Évidemment, un nombre infini de lignes est possible par P, donc nous ne considérerons que la ligne tangentielle. La ligne tangente traversera la courbe en un point de plus et une ligne verticale à partir de là traversera la courbe à nouveau pour arriver à la valeur finale. Il peut être montré comme suit :

  • Il est évident que nous pouvons appliquer le point doublant “n” nombre de fois au point initial et chaque fois qu’il nous mènera à un point différent sur la courbe. La première fois que nous avons appliqué point doublant au point P, il nous a fallu au point résultant 2P comme vous pouvez le voir dans le diagramme. Maintenant, si la même chose est répétée “n” nombre de fois, nous atteindrons un point sur la courbe comme indiqué dans le diagramme suivant :

  • Dans le scénario susmentionné, lorsque le point initial et final est donné, il n’y a aucun moyen de dire que le doublement de point a été appliqué “n” nombre de fois pour atteindre le point final résultant, sauf en essayant tous les possibles “n” un par un. C’est le problème logarithme discret pour ECC, où il indique que donné un point G et Q, où Q est un multiple de G, trouver “d” tels que Q = d G. Cela forme la fonction à sens unique sans raccourcis. Ici, Q est la clé publique et d est la clé privée. Pouvez-vous extraire la clé privée d de la clé publique Q ?

Il s’agit du problème de logarithme discret de courbe elliptique, qui est difficile à résoudre sur le plan du calcul.

  • En outre, la courbe doit être définie sur un champ fini et ne pas nous emmener à l’infini ! Cela signifie que la valeur “max” sur l’axe X doit être limitée à une certaine valeur, il suffit de rouler les valeurs lorsque nous atteignons le maximum. Cette valeur est représentée comme P (pas le P utilisé dans les graphiques ici) dans le cryptosystème ECC et est appelée “modulo” valeur, et il définit également la taille de la clé, d’où le champ fini. Dans de nombreuses implémentations d’ECC, un nombre de premier choix pour “P” est choisi.
  • L’augmentation de la taille de “P” se traduit par des valeurs plus utilisables sur la courbe, donc plus de sécurité.
  • Nous avons observé que l’ajout de points et le doublement des points constituent la base pour trouver les valeurs qui sont utilisées pour le chiffrement et le décryptage.

Ainsi, pour définir un CCE, les paramètres de domaine suivants doivent être définis :

  • L’équation de courbe : y2 = x3 + ax + b, où 4 a3 + 27 b2 ≠ 0
  • P : Le nombre principal, qui spécifie le champ fini que la courbe sera définie (valeur modulo)
  • a et b: Coefficients qui définissent la courbe elliptique
  • G