P31 Partition HTTP/TLS pour Pepin : Différence entre versions

De Wiki de Projets IMA
Ligne 43 : Ligne 43 :
  
 
===Identification d'un serveur web adapté pour Pépin===
 
===Identification d'un serveur web adapté pour Pépin===
 +
Il existe plusieurs serveur web qui ont déja été développé. La table ci-dessous résume certains serveurs web qui pourraient être porté vers Pépin
 +
 +
{| class="wikitable"
 +
! Serveur web
 +
! Avantage
 +
! Inconvénient
 +
! SSL/TLS
 +
|-
 +
! rowspan="2" | Apache
 +
| rowspan="2" | Plus utilisé
 +
| Lourds
 +
| rowspan="2" | Oui
 +
|-
 +
| Inadapté pour l'embarqué
 +
|-
 +
! rowspan="2" | LigHTTPD
 +
| Léger
 +
| rowspan="2" | Besoin d'un OS classique ou OS embarqué
 +
| rowspan="2" | Oui
 +
|-
 +
| Facile à mettre en oeuvre
 +
|-
 +
! rowspan="2" | Mongoose
 +
| Petite en taille
 +
| rowspan="2" | Implémentation non complète de SSL/TLS
 +
| rowspan="2" | Manque certain type de mécanisme d'échange de clé
 +
|-
 +
| API en C pour le dévelopement
 +
|-
 +
! rowspan="2" | SMEWS
 +
| Très petite en taille
 +
| rowspan="2" | Pas d'implementation de SSL/TLS
 +
| rowspan="2" | Non
 +
|-
 +
| Bien adapté pour plusieurs types de systèmes embarqués
 +
|}
 +
 +
Nous avons choisi la solution Mongoose parce qu'il est bien adapté (même s'il manque certaines implémentation de SSL/TLS comme l'échange de clé par PSK). Donc, on va ajouter une couche de wolfSSL qui contient plusieurs mécanisme de TLS-PSK comme:
 +
*TLS_PSK_WITH_AES_128_GCM_SHA256
 +
*TLS_PSK_WITH_AES_256_GCM_SHA384
 +
*TLS_PSK_WITH_AES_256_CBC_SHA384
 +
*TLS_PSK_WITH_NULL_SHA384
 +
*TLS_DHE_PSK_WITH_AES_128_GCM_SHA256
 +
*TLS_DHE_PSK_WITH_AES_256_GCM_SHA384
 +
*TLS_DHE_PSK_WITH_AES_128_CBC_SHA256
 +
*TLS_DHE_PSK_WITH_AES_256_CBC_SHA384
 +
*TLS_DHE_PSK_WITH_NULL_SHA256
 +
*TLS_DHE_PSK_WITH_NULL_SHA384
 +
*TLS_DHE_PSK_WITH_AES_128_CCM
 +
*TLS_DHE_PSK_WITH_AES_256_CCM
 +
 +
Dans Pépin, nous devrions avoir une pile TCP/IP qui gère les couches hautes comme le transport et l'application sachant que les couches base sont en cours de développement. Pour cela, on a décidé d'utiliser la solution picoTCP. Donc, la solution complète est :
 +
 +
{| class="wikitable" style="text-align: center;"
 +
! rowspan="3" | Couches hautes
 +
| Application
 +
| Mongoose (HTTPS)
 +
|-
 +
| rowspan="2" | Transport
 +
| wolfSSL
 +
|-
 +
| picoTCP
 +
|-
 +
! rowspan="3" | Couches bases
 +
| colspan="2" | Réseau
 +
|-
 +
| colspan="2" | Liaison de données
 +
|-
 +
| colspan="2" | Physique
 +
|}
 +
 
===Adaptation de code de serveur web pour Pépin===
 
===Adaptation de code de serveur web pour Pépin===
 
===Intégration de la solution dans la carte Intel Galileo===
 
===Intégration de la solution dans la carte Intel Galileo===

Version du 11 octobre 2016 à 18:38


Cahier des charges

Présentation générale du projet

Contexte

L’équipe 2XS (eXtra Small, eXtra Safe) de l’IRCICA en train de développer un exo-noyau qui a une architecture plus simple (donc plus sécurisé) qu’un noyau monolithique. Ce type d’architecture fonctionne plutôt dans l’espace utilisateur que l’espace noyau ce qui permet d’éliminer l’abstraction d’un système d’exploitation. Ceci permet l’interaction plus direct avec les matériels.

Description du projet

Pépin (ou PIP) est l’exo-noyau développé par l’équipe dans le but de créer un système qui isole complètement les partitions de mémoire selon un modèle hiérarchique : une partition peut contenir des sous-partitions (qui peuvent elles-mêmes contenir des sous-sous-partitions). Cette isolation de mémoire garantit un niveau de sécurité élevée car les partitions de même niveau (dans la hiérarchie) ne peuvent pas communiquer entre elles.

Objectif du projet

L’intérêt de ce projet est de développer une partition qui s’exécutent au-dessus de Pépin qui héberge un serveur web et implémente un protocole d’échange sécurisé de type TLS-PSK. Pour cela, il faut adapter un serveur web existant afin de pouvoir le porter au Pépin.

Choix techniques : matériel et logiciel

Pour le développement de la partition de serveur web, on utilise le langage C et assembleur (si besoin). Pour tester le système, on l’implémente dans une carte embarquée ayant l’architecture x86 (ie : Intel Galileo).

Etapes du projet

  • Etudier l'architecture de Pépin
  • Identifier une solution existante de serveur web qui peut être adapté pour le système
  • Adapter le code du serveur web pour pouvoir utiliser avec Pépin
  • Intégrer Pépin et le serveur web dans une carte embarqué et tester la solution

Avancement du Projet

Etudes de l'architecture de Pépin

L'exo-noyau Pépin se situe au dessus de niveau matériel et se constitue d'IAL, de MAL, d'une section BOOT et une section CORE.

User space Les différentes partitions
Multiplexeur
Kernel space IAL MAL Boot Core
Matériel (Hardware)
  • IAL: sert à la gestion de communication avec le processeur
  • MAL: sert à l agestion de communication avec le processeur
  • BOOT: contient le code pour démarrer Pépin
  • CORE: contient le code de fonctionnement de Pépin
  • Multiplexeur: sert à démarrer et partitionner l'espace mémoire

Identification d'un serveur web adapté pour Pépin

Il existe plusieurs serveur web qui ont déja été développé. La table ci-dessous résume certains serveurs web qui pourraient être porté vers Pépin

Serveur web Avantage Inconvénient SSL/TLS
Apache Plus utilisé Lourds Oui
Inadapté pour l'embarqué
LigHTTPD Léger Besoin d'un OS classique ou OS embarqué Oui
Facile à mettre en oeuvre
Mongoose Petite en taille Implémentation non complète de SSL/TLS Manque certain type de mécanisme d'échange de clé
API en C pour le dévelopement
SMEWS Très petite en taille Pas d'implementation de SSL/TLS Non
Bien adapté pour plusieurs types de systèmes embarqués

Nous avons choisi la solution Mongoose parce qu'il est bien adapté (même s'il manque certaines implémentation de SSL/TLS comme l'échange de clé par PSK). Donc, on va ajouter une couche de wolfSSL qui contient plusieurs mécanisme de TLS-PSK comme:

  • TLS_PSK_WITH_AES_128_GCM_SHA256
  • TLS_PSK_WITH_AES_256_GCM_SHA384
  • TLS_PSK_WITH_AES_256_CBC_SHA384
  • TLS_PSK_WITH_NULL_SHA384
  • TLS_DHE_PSK_WITH_AES_128_GCM_SHA256
  • TLS_DHE_PSK_WITH_AES_256_GCM_SHA384
  • TLS_DHE_PSK_WITH_AES_128_CBC_SHA256
  • TLS_DHE_PSK_WITH_AES_256_CBC_SHA384
  • TLS_DHE_PSK_WITH_NULL_SHA256
  • TLS_DHE_PSK_WITH_NULL_SHA384
  • TLS_DHE_PSK_WITH_AES_128_CCM
  • TLS_DHE_PSK_WITH_AES_256_CCM

Dans Pépin, nous devrions avoir une pile TCP/IP qui gère les couches hautes comme le transport et l'application sachant que les couches base sont en cours de développement. Pour cela, on a décidé d'utiliser la solution picoTCP. Donc, la solution complète est :

Couches hautes Application Mongoose (HTTPS)
Transport wolfSSL
picoTCP
Couches bases Réseau
Liaison de données
Physique

Adaptation de code de serveur web pour Pépin

Intégration de la solution dans la carte Intel Galileo