# Canal caché

Un canal caché (en anglais : covert channel) est en informatique un canal de communication entre deux ordinateurs qui utilise la bande passante d'un autre canal dans l'objectif de transmettre des informations sans l'autorisation ou la connaissance du propriétaire de l'information ou de l'administrateur du réseau.

## Fonctionnement

Les canaux cachés sont des entités dynamiques ; ils accaparent un emplacement mémoire sans nécessairement avoir besoin d'être stockés. De plus, sachant que l'unité informatique la plus basse connue est le bit, certains canaux cachés sont capables d'extraire des demi-bit (half-bit). Si pour un utilisateur classique, les antivirus et autres pare-feu sont souvent suffisants pour contrecarrer une attaque par un cheval de Troie, ils sont totalement impuissants devant un canal caché bruité.

## Type de canal caché

Il existe deux types de canaux cachés :
* Les storage channels : le processus émetteur modifie une donnée particulière, et le processus récepteur détecte et interprète la donnée modifiée pour recevoir indirectement des informations.
* Les timing channels : le processus émetteur module la durée d'une tâche effectuée par le processus récepteur, et le processus récepteur interprète cette variation comme une information.
Il n'est pas simple de distinguer un storage d'un timing channel. Pour J. Wray, la différence est que, dans le cas d'un timing channel, le processus récepteur a besoin d'avoir accès à une horloge indépendante qui lui permet de dater les événements. Les storage channels sont exploitables sans l'aide de cette référence temporelle externe.
La caractéristique propre d'un canal caché est la quantité d'informations qu'il peut envoyer. Pour qu'un cheval de Troie soit opérationnel, il suffit qu'il puisse communiquer deux messages différents. Le type de canal binaire est appelé, par D. McCullough, un one-bit channel et permet à un cheval de Troie de transmettre n'importe quel message si le temps le lui permet. La présence d'un one-bit channel peut constituer une menace grave pour la confidentialité d'un système.

## Canal caché probabiliste

Un one-bit channel peut être bruité c’est-à-dire que le processus récepteur reçoit une valeur différente ou égale au signal émis par le Cheval de Troie. Dans ce cas, le signal provenant du Cheval de Troie est ambigu.
Tant que le signal reçu est différent de celui émis par le Cheval de Troie, alors le Cheval de Troie peut toujours transmettre n'importe quelle information en émettant de nouveau le message jusqu'à ce que le signal reçu soit identique à celui émis. Si le bruit est total, il n'y a plus de covert channel. Sinon, le Cheval de Troie peut encore envoyer un message plus ou moins bruité. Nous introduisons la notion de canal caché probabiliste.

## Notion de half-bit channel

D. McCullough introduit la notion de half-bit channel qui est un canal qui permet de ne communiquer qu'un seul message. L'information transmise n'est que partielle, cependant, avec deux half-bit channels, nous pouvons construire un one-bit channel.
Un exemple illustre bien cette notion, il s'agit des inputs bloquants.

### Objectif

Le but du Cheval de Troie est de transférer le contenu du buffer BS (source secrète) dans le buffer non classifié BU.

### Hypothèses

* Nous supposons que les buffers BA et BB sont des buffers de taille finie. En effet, si le buffer était infini, alors le problème des inputs bloquants ne se poserait pas.
* Les processus ne savent pas combien de temps ils sont bloqués ni même s'ils ont été bloqués.
* La seule chose que les processus savent, c'est : Si je ne suis pas bloqué alors, je sais que je ne suis pas bloqué. Il s'agit bien d'un half-bit channel.

### Construction

Le processus A sature le buffer BA de messages. Le processus B fait de même avec le buffer BB. Le buffer BC sert à synchroniser les processus A et B avec le Cheval de Troie.

### Fonctionnement

Lorsque les processus A et B sont bloqués (buffers respectifs BA et BB saturés), le Cheval de Troie lit un bit dans le buffer BS. Si le message lu est égal à 0, alors A est débloqué ; ce dernier écrit un 0 dans BU puis envoie un message dans BC pour informer le Cheval de Troie que le transfert est réalisé. Si le message lu est égal à 1, alors B est débloqué ; il écrit un 1 dans BU puis envoie un message dans BC pour informer le Cheval de Troie que le transfert est réalisé. Le Cheval de Troie a bien transféré le contenu de BS dans BU.