Le langage E : une réponse aux besoins en sécurité informatique distribuée ?
E est un langage inconnu du grand public. Vieux de dix ans, il est notamment spécialisé dans le domaine de la sécurité informatique distribuée. C’est un capability system, c’est-à-dire un système dont la sécurité se base sur un ensemble de références à des objets, auxquels sont associés des droits d’accès spécifiques. Ainsi le langage E apporte une sécurité renforcée à ses programmes, couplée à une certaine flexibilité qui n’affecte pas ses performances.
Ce langage présente des propriétés que des langages plus populaires tels que Java, ou C ne présentent pas en totalité. Et cela suffit alors à rendre vulnérable un langage ainsi que les programmes rédigés dans ces langages. Voici donc quelques atouts importants du E, dont les principes sont simples.
En premier lieu E ressemble à Java et Python, dans la mesure où sa syntaxe est très proche des leurs. Et comme ces deux langages E est orienté-objet, ce qui lui apporte d’entrée de jeu des propriétés en programmation sécurisée. Ceci couplé à ses propriétés de capability system, E présente alors des object-capabilities, i.e. les propriétés de la programmation orientée-objet, exploitées de manière plus rigoureuse.
Le E n’effectue pas d’opérations d’arithmétique sur les pointeurs. Les objets ne sont donc pas accessibles par le biais des pointeurs, mais par le biais des références à ceux-ci. Les pointeurs, eux, mènent directement aux valeurs, qui peuvent ainsi être facilement modifiées par des utilisateurs malicieux.
D’autre part les objets de la documentation du langage ne sont ni remplaçables, ni modifiables. Dans le cas contraire, un programmeur pourrait facilement les transformer comme bon lui semble.
Enfin, l’API du E a été rédigée de façon à ce qu’il n’y ait pas de contradiction ou de faiblesse induite entre les objets. En effet, la présence de failles suffit à corrompre un langage dans son ensemble. Par exemple, si un programme Java avait besoin de lire un fichier pour l’analyser, l’utilisation d’un objet InputStream serait appropriée. Cependant le manque d’autorité d’InputStream fait qu’il peut être casté en FileInputStream donc on peut obtenir l’objet WriteStream, autorisant alors la modification par écriture du fichier qui devait être lu uniquement.
Au-delà de cette liste non exhaustive de propriétés, le E étend cette idée de langage sécurisé aux objets distribués. En effet :
- Tous les objets manipulés sont authentifiés. Il n’est donc pas possible qu’un objet se fasse passer pour un autre ;
- Pour accéder à un objet, son créateur doit d’abord en fournir la référence;
- Les communications entre programmes sont chiffrées. Seules les personnes impliquées y ont accès.
A mesure que le temps passe, les programmes nécessitent d’être de plus en plus performants en termes de sécurité. Le langage E peut donc s’avérer efficace, étant conçu précisément à ces fins. Sa philosophie suit le « Principle Of Least Authority » (POLA) : ne pas accorder plus de privilèges à un objet que ceux dont il a besoin. C’est un principe instinctif et évident, mais qui n’est pas totalement mis au point dans le monde de la programmation.