Aujourd'hui, seul un paresseux n'a pas écrit sur la technologie blockchain, les cryptomonnaies et à quel point c'est incroyable. Mais dans cet article, il n'y aura pas d'éloge de cette technologie, nous allons aborder ses inconvénients et les moyens de les surmonter.

En travaillant sur l'un des projets de la société Altirix Systems, un besoin s'est présenté pour une confirmation de données protégée et résistante à la censure à partir d'une source externe pour la blockchain. Il était nécessaire de confirmer les modifications dans les enregistrements d'un tiers et, sur la base de ces modifications, d'effectuer tel ou tel chemin dans la logique du smart contract. La tùche, à premiÚre vue, semble assez triviale, mais lorsque le résultat de son exécution dépend de la situation financiÚre d'une des parties impliquées dans le processus, des exigences supplémentaires apparaissent. Avant tout, c'est la confiance totale envers un tel mécanisme de validation. Mais parlons de tout cela dans l'ordre.
Le problĂšme rĂ©side dans le fait que la blockchain est en soi un objet autonome et fermĂ©, donc les smart contracts au sein de la blockchain ne savent rien sur le monde extĂ©rieur. En mĂȘme temps, les conditions des smart contracts sont souvent liĂ©es Ă des informations sur des Ă©vĂ©nements rĂ©els (retard de vol, taux de change, etc.). Pour un bon fonctionnement des smart contracts, les donnĂ©es obtenues en dehors de la blockchain doivent ĂȘtre fiables et vĂ©rifiĂ©es. Ce problĂšme est rĂ©solu avec l'utilisation d'oracles, tels que Town Crier et DECO. Ces oracles permettent Ă un smart contract sur la blockchain de faire confiance Ă des informations provenant d'un serveur web vĂ©rifiĂ©, on peut dire que ce sont des fournisseurs d'informations fiables.
Oracles
Imaginez un smart contract qui effectue un transfert de 0.001 btc vers votre portefeuille bitcoin en cas de victoire de votre club de football prĂ©fĂ©rĂ© en Coupe de Russie. En cas de victoire rĂ©elle, il est nĂ©cessaire de transmettre au smart contract l'information concernant le club gagnant, et c'est ici qu'un certain nombre de problĂšmes surviennent : oĂč obtenir cette information, comment la transmettre en toute sĂ©curitĂ© au smart contract et comment s'assurer que l'information transmise au smart contract correspond bien Ă la rĂ©alitĂ© ?
Dans le domaine des sources d'information, deux scĂ©narios peuvent se prĂ©senter : connecter un contrat intelligent Ă un site web de confiance, oĂč les rĂ©sultats des matchs sont stockĂ©s de maniĂšre centralisĂ©e, ou connecter plusieurs sites et sĂ©lectionner les informations Ă partir de la majoritĂ© des sources fournissant des donnĂ©es identiques. Pour s'assurer de l'exactitude des informations, des oracles sont utilisĂ©s, comme Oraclize, qui utilise TLSNotary (une modification de TLS pour prouver l'authenticitĂ© des donnĂ©es). Cependant, il existe suffisamment d'informations sur Oraclize dans Google, et plusieurs articles sur HabrĂ©. Aujourd'hui, je vais parler des oracles qui adoptent une approche lĂ©gĂšrement diffĂ©rente pour transmettre des informations : Town Crier et DECO. Cet article dĂ©crit les principes de fonctionnement des deux oracles ainsi qu'une comparaison dĂ©taillĂ©e.
Town Crier
Town Crier (TC) a Ă©tĂ© introduit par IC3 (The Initiative for CryptoCurrencies and Contracts) en 2016 lors de CCSâ16. L'idĂ©e principale de TC est de transmettre des informations d'un site web Ă un contrat intelligent et de s'assurer que les informations dĂ©livrĂ©es par TC sont identiques Ă celles prĂ©sentes sur le site. TC utilise un TEE (Trusted Execution Environment) pour garantir l'authenticitĂ© de la propriĂ©tĂ© des donnĂ©es. Dans sa version originale, TC dĂ©crit le travail avec Intel SGX.
Town Crier se compose d'une partie dans la blockchain et d'une partie au sein du systĂšme d'exploitation lui-mĂȘme â le serveur TC.

Le contrat TC se trouve dans la blockchain et agit comme l'interface utilisateur pour TC. Il reçoit des requĂȘtes du CU (contrat intelligent utilisateur) et renvoie des rĂ©ponses du serveur TC. Au sein du serveur TC se trouve un relais qui Ă©tablit la connexion entre l'enclave et Internet (trafic bidirectionnel) et relie l'enclave Ă la blockchain. L'enclave contient progencl, qui est un code exĂ©cutant les requĂȘtes de la blockchain et renvoyant des messages dans la blockchain avec une signature numĂ©rique ; progencl inclut une partie du code du contrat intelligent et exĂ©cute en fait certaines de ses fonctions.
L'enclave Intel SGX peut ĂȘtre considĂ©rĂ©e comme une bibliothĂšque commune avec une API, fonctionnant par le biais d'ecall. Ecall transfĂšre le contrĂŽle Ă l'enclave. L'enclave exĂ©cute son code jusqu'Ă son achĂšvement ou jusqu'Ă ce qu'une exception se produise. Pour appeler des fonctions dĂ©finies en dehors de l'enclave, des ocall sont utilisĂ©s. Ocall s'exĂ©cute en dehors de l'enclave et est traitĂ© comme un appel non fiable. AprĂšs l'exĂ©cution de l'ocall, le contrĂŽle est restituĂ© Ă l'enclave.

Dans la partie Enclave, un canal sĂ©curisĂ© est configurĂ© avec le serveur web, l'enclave effectue elle-mĂȘme la poignĂ©e de main TLS avec le serveur cible et exĂ©cute toutes les opĂ©rations cryptographiques en interne. La bibliothĂšque TLS (mbedTLS) et le code HTTP en version rĂ©duite sont exportĂ©s vers l'environnement SGX. De plus, l'Enclave contient des certificats racine CA (une collection de certificats) pour vĂ©rifier les certificats des serveurs distants. Le gestionnaire de requĂȘtes accepte une demande de datagramme au format fourni par Ethereum, la dĂ©chiffre et l'analyse. Ensuite, il gĂ©nĂšre une transaction Ethereum contenant le datagramme demandĂ©, la signe avec skTC et la transmet au Relay.
La partie Relay comprend l'interface client, TCP et l'interface blockchain. L'interface client est nĂ©cessaire pour l'attestation du code de l'enclave et la communication avec le client. Le client envoie une requĂȘte d'attestation via ecall et reçoit un horodatage, signĂ© par skTC, avec att (signature d'attestation), ensuite att est confirmĂ© via Intel Attestation Service (IAS) et l'horodatage est vĂ©rifiĂ© par un service de temps de confiance. L'interface blockchain vĂ©rifie les demandes entrantes et place les transactions dans la blockchain pour la livraison des datagrams. Geth est le client officiel Ethereum et permet Ă Relay d'interagir avec la blockchain via des appels RPC.
En travaillant avec TEE, TC permet de lancer plusieurs enclaves en parallÚle, augmentant ainsi la vitesse de traitement des informations par trois. Si avec une seule enclave en fonctionnement, la vitesse était de 15 tx/sec, alors avec 20 enclaves lancées simultanément, la vitesse augmente jusqu'à 65 tx/sec, pour comparaison, la vitesse maximale de fonctionnement dans la blockchain Bitcoin est de 26 tx/sec.
DECO
DECO (Oracles Décentralisés pour TLS) a été présenté lors de CCS'20, il fonctionne avec des sites prenant en charge la connexion TLS. Il garantit la confidentialité et l'intégrité des données.
DECO avec TLS utilise le cryptage symétrique, permettant ainsi au client et au serveur web de disposer de clés de cryptage, et le client, s'il le souhaite, peut falsifier les données de la session TLS. Pour résoudre ce problÚme, DECO utilise un protocole de poignée de main tripartite entre le prouveur (smart contract), le vérificateur (oracle) et le serveur web (source de données).

Le principe de fonctionnement de DECO est que le vérificateur (prouveur) obtienne une partie des données D et confirme au vérificateur que D provient du serveur TLS S. Un autre problÚme est que TLS ne signe pas les données et le client TLS a du mal à prouver que les données proviennent bien de ce serveur (difficulté de provenance).
Dans le protocole DECO, des clĂ©s de chiffrement KEnc et KMac sont utilisĂ©es. Le client envoie une requĂȘte Q Ă serveur web, la rĂ©ponse du serveur R arrive sous forme chiffrĂ©e, mais le client et le serveur possĂšdent les mĂȘmes KMac, permettant au client de falsifier un message TLS. La solution de DECO consiste Ă "cacher" KMac du client (prover) jusqu'Ă ce qu'il rĂ©ponde Ă la requĂȘte. Maintenant, KMac est divisĂ© entre le prover et le vĂ©rificateur â KpMac et KvMac. Le serveur obtient KMac pour chiffrer la rĂ©ponse Ă l'aide de l'opĂ©ration sur les parties de la clĂ© KpMac â KvMac = KMac.
Avec un échange à trois voies établi, les données entre le client et le serveur seront échangées avec une garantie de sécurité.

En parlant des systĂšmes d'oracles dĂ©centralisĂ©s, on ne peut pas manquer de mentionner Chainlink, qui cherche Ă crĂ©er un rĂ©seau dĂ©centralisĂ© de nĆuds d'oracle compatible avec Ethereum, Bitcoin et Hyperledger, en tenant compte de la modularitĂ© : chaque partie du systĂšme peut ĂȘtre mise Ă jour. De plus, pour assurer la sĂ©curitĂ©, Chainlink propose Ă chaque oracle participant Ă la mission d'Ă©mettre une combinaison de clĂ©s (publique et privĂ©e). La clĂ© privĂ©e est utilisĂ©e pour gĂ©nĂ©rer une signature partielle, qui contient leur rĂ©ponse Ă la demande de donnĂ©es. Pour obtenir une rĂ©ponse, il est nĂ©cessaire de combiner toutes les signatures partielles des oracles du rĂ©seau.
Chainlink prévoit de réaliser un PoC DECO initial axé sur des applications financiÚres décentralisées telles que Mixicles. Au moment de la rédaction, une nouvelle sur Forbes indiquait que Chainlink avait acquis DECO de l'Université Cornell.
Attaques sur les oracles

Du point de vue de la sécurité de l'information, les attaques suivantes sur Town Crier ont été examinées :
Injection de code malveillant sur des nĆuds TEE.
Nature de l'attaque : transmission d'un code de contrat intelligent manifestement incorrect dans le TEE, permettant Ă un attaquant ayant accĂšs au nĆud d'exĂ©cuter son propre contrat intelligent (frauduleux) sur des donnĂ©es dĂ©chiffrĂ©es. Cependant, les valeurs retournĂ©es seront chiffrĂ©es Ă l'aide de la clĂ© privĂ©e, et la seule maniĂšre d'accĂ©der Ă ces donnĂ©es rĂ©side dans la fuite du texte chiffrĂ© lors du retour / de la sortie.
La protection contre cette attaque rĂ©side dans la vĂ©rification par l'enclave de la validitĂ© du code Ă l'adresse actuelle. Cela peut ĂȘtre accompli grĂące Ă un schĂ©ma d'adressage oĂč l'adresse du contrat est dĂ©terminĂ©e par le hachage du code du contrat.Les changements de ciphertext de l'Ă©tat du contrat provoquent des fuites.
La nature de l'attaque : Les propriĂ©taires des nĆuds sur lesquels s'exĂ©cutent des smart contracts ont accĂšs Ă l'Ă©tat du contrat sous une forme chiffrĂ©e en dehors de l'enclave. Un attaquant qui prend le contrĂŽle d'un nĆud peut comparer l'Ă©tat du contrat avant et aprĂšs l'exĂ©cution d'une transaction et peut dĂ©terminer quels arguments ont Ă©tĂ© ajoutĂ©s et quelle mĂ©thode spĂ©cifique du smart contract a Ă©tĂ© utilisĂ©e, car le code mĂȘme du smart contract et ses spĂ©cifications techniques sont accessibles au public.
Protection en garantissant la fiabilitĂ© du nĆud lui-mĂȘme.Attaques par canaux auxiliaires.
Un type particulier d'attaques qui utilise la surveillance des accÚs à la mémoire et au cache de l'enclave dans divers scénarios. Un exemple de cette attaque est le Prime and Probe.

Procédure de l'attaque :- t0 : L'attaquant remplit tout le cache de données du processus de la victime.
- t1 : La victime exécute du code avec des accÚs à la mémoire qui dépendent des données confidentielles de la victime (clés cryptographiques). Le choix de la ligne de cache se fait selon la valeur de keybit. Dans l'exemple illustré, keybit = 0 et l'adresse X a été lue dans la ligne de cache 2. Les données stockées dans X sont chargées dans le cache, évincant les données qui y étaient précédemment.
- t2 : L'attaquant vĂ©rifie quelles de ses lignes de cache ont Ă©tĂ© Ă©vincĂ©es â celles utilisĂ©es par la victime. Cela se fait en mesurant le temps d'accĂšs. En rĂ©pĂ©tant cette opĂ©ration pour chaque keybit, l'attaquant obtient la clĂ© entiĂšre.
Protection contre l'attaque : Intel SGX dispose d'une protection contre les attaques par canaux auxiliaires, qui interdit la surveillance des Ă©vĂ©nements liĂ©s au cache, mais l'attaque Prime and Probe rĂ©ussira quand mĂȘme, car l'attaquant observe les Ă©vĂ©nements du cache de son propre processus et partage le cache avec la victime.

Ainsi, Ă ce jour, il n'existe pas de protection fiable contre cette attaque.
On connaßt également des attaques de type Spectre et Foreshadow (L1TF), similaires à Prime and Probe. Elles permettent de lire des données à partir de la mémoire cache par le biais d'un canal auxiliaire. Une protection contre la vulnérabilité Spectre-v2 est prévue, qui fonctionne contre ces deux attaques.
Concernant DECO, un handshake à trois voies garantit une sécurité :
- IntĂ©gritĂ© du Prover : un prover compromis ne peut pas falsifier les informations sur l'origine du serveur et ne peut pas amener le serveur Ă accepter des requĂȘtes non valides ou Ă rĂ©pondre incorrectement Ă des requĂȘtes valides. Cela est rĂ©alisable via des modĂšles de requĂȘtes entre le serveur et le prover.
- Intégrité du Vérificateur : un vérificateur compromis ne peut pas amener le prover à recevoir des réponses incorrectes.
- ConfidentialitĂ© : Un verifier piratĂ© n'examine que les informations publiques (requĂȘte, nom du serveur).
Dans DECO, seules les vulnĂ©rabilitĂ©s liĂ©es Ă l'injection de trafic sont possibles. Au dĂ©part, lors de la poignĂ©e de main Ă trois voies, le verifier peut Ă©tablir l'identitĂ© du serveur grĂące Ă un fresh nonce. Cependant, aprĂšs la poignĂ©e de main, le verifier doit compter sur des indicateurs de niveau rĂ©seau (adresses IP). Ainsi, la liaison entre le verifier et le server doit ĂȘtre protĂ©gĂ©e contre l'injection de trafic. Cela est rĂ©alisĂ© en utilisant un Proxy.
Comparaison des oracles
Town Crier repose sur le travail avec un enclavement cÎté serveur, tandis que DECO permet la vérification de l'authenticité de l'origine des données grùce à une poignée de main à trois voies et à un chiffrement des données par des clés cryptographiques. La comparaison des données des oracles a été effectuée selon les critÚres suivants : performance, sécurité, coût et praticité.
Town Crier
DECO
performance
Plus rapide (0,6 s pour finir)
Plus lent (10,50 s pour finir le protocole)
sécurité
Moins sécurisé
Plus sécurisé
le coût
Plus cher
Moins cher
praticité
Nécessite un matériel spécial
Fonctionne avec n'importe quel serveur prenant en charge TLS
Performance: Pour utiliser DECO, une configuration de la poignée de main à trois voies est requise, ce qui prend 0,37 secondes via LAN, et pour les interactions aprÚs l'établissement de la connexion, 2PC-HMAC est efficace (0,13 s pour l'écriture). La performance de DECO dépend des suites de chiffrement TLS disponibles, de la taille des données personnelles et de la complexité des preuves pour une application donnée. Par exemple, pour l'application d'options binaires d'IC3 : la fin du protocole via LAN prend environ 10,50 s. En comparaison, Town Crier nécessite environ 0,6 seconde pour exécuter une application similaire, soit environ 20 fois plus rapide que DECO. Dans des conditions équivalentes, TC sera plus rapide.
Sécurité: Les attaques sur l'enclavement Intel SGX (attaques par canaux auxiliaires) fonctionnent et peuvent causer des dommages réels aux participants du smart contract. Pour DECO, des attaques liées à l'injection de trafic sont possibles, mais l'utilisation de proxy les annule. Ainsi, DECO est plus sécurisé.
Coût: Le coût du matériel compatible avec Intel SGX est supérieur au coût de configuration du protocole dans DECO. Par conséquent, TC est plus cher.
Praticité: Pour utiliser Town Crier, un équipement spécial prenant en charge TEE est indispensable. Par exemple, Intel SGX est supporté sur les processeurs de la famille Intel Core de 6Úme génération et plus. DECO, en revanche, fonctionne avec n'importe quel équipement, bien qu'il existe une configuration DECO utilisant TEE. Le processus de configuration du protocole à trois voies pour DECO peut prendre un certain temps, mais cela ne se compare en rien à la contrainte matérielle de TC, donc DECO est plus pratique.
Conclusion
En examinant les deux oracles séparément et en les comparant selon quatre critÚres, on constate que Town Crier est inférieur à DECO sur trois des quatre points. DECO est plus fiable en termes de sécurité informatique, moins cher et plus pratique, bien que la configuration du protocole à trois voies puisse prendre du temps et ait ses inconvénients, comme des opérations supplémentaires sur les clés de cryptage. TC fonctionne plus rapidement que DECO, mais la vulnérabilité liée aux attaques par canal auxiliaire le rend risqué en matiÚre de confidentialité. Il faut également prendre en compte que DECO a été présenté en janvier 2020, et il n'y a pas eu assez de temps pour le considérer comme sûr. Town Crier a déjà été soumis à des attaques pendant 4 ans et a traversé de nombreux tests, ce qui justifie son utilisation dans de nombreux projets.
Source : habr.com

