Introduction

La sécurité des données est un enjeu majeur dans le développement de systèmes informatiques. Lorsqu'il s'agit de sérialiser des données pour les utiliser avec des algorithmes cryptographiques, tels que la signature, le chiffrement ou le hachage, il est essentiel de garantir que les données soient correctement formatées pour éviter les erreurs de sécurité.

Contexte Technique

Les systèmes de sérialisation de données, tels que Protobufs, sont souvent utilisés pour encoder les données avant de les utiliser avec des algorithmes cryptographiques. Cependant, ces systèmes ne garantissent pas toujours la production de sorties canoniques, ce qui peut entraîner des problèmes de sécurité. Par exemple, si deux structures de données différentes ont la même représentation sérialisée, un attaquant peut utiliser cette vulnérabilité pour créer une fausse signature ou un faux message.

Un exemple concret de ce problème est le suivant : supposons que nous ayons deux structures de données, TreeRoot et KeyRevoke, qui ont les mêmes champs mais avec des significations différentes. Si un attaquant peut créer une fausse structure de données KeyRevoke qui a la même représentation sérialisée qu'une structure de données TreeRoot signée, il peut alors utiliser la signature de la structure de données TreeRoot pour valider la fausse structure de données KeyRevoke.

Analyse et Implications

Ce type d'attaque n'est pas théorique et a déjà été utilisé avec succès dans plusieurs contextes, notamment dans les systèmes de paiement Bitcoin, les échanges de données Ethereum, les protocoles de communication TLS et les jetons de sécurité JWT. Il est donc essentiel de prendre des mesures pour garantir la sécurité des données et prévenir ce type d'attaque.

Les systèmes qui ont tenté de résoudre ce problème ont utilisé des techniques ad hoc, telles que l'utilisation de chaînes de contexte ou de noms de méthodes locaux. Cependant, ces approches ne sont pas systématiques et peuvent ne pas être efficaces pour prévenir toutes les attaques possibles.

Perspective

Pour résoudre ce problème, il est nécessaire de développer une approche systématique pour garantir la sécurité des données. L'une des solutions proposées est l'utilisation de séparateurs de domaine aléatoires dans les définitions de données. Ces séparateurs de domaine sont des valeurs uniques qui sont ajoutées aux structures de données pour garantir que les données soient correctement formatées et que les attaques de type « collision » soient impossibles.

Le système de sérialisation de données Snowpack propose une solution pour garantir la sécurité des données en utilisant des séparateurs de domaine aléatoires. Ce système permet de garantir que les données soient correctement formatées et que les attaques de type « collision » soient impossibles. De plus, le système Snowpack prend en charge la suppression et l'ajout de champs dans les structures de données, tout en garantissant que les positions des champs restants ne changent pas et que les champs supprimés ne soient pas réutilisés.