Securite du Client Embarque BP_MQX_ETH
Ce document decrit les mecanismes de securite implementes dans le firmware legacy : authentification HTTP, chiffrement des ordres d'alarme, et stockage des secrets en EEPROM SPI.
Retour : Client Embarque BP_MQX_ETH | Voir aussi : Build | Protocoles | GPIO | OTA | Debug | Hardware SC944D
1. Authentification HTTP (Basic Auth)
Le firmware utilise HTTP Basic Authentication pour s'identifier aupres du serveur.
Chaine de Generation de la Cle
uc_Cle_Acces_Distance[16] (16 octets bruts, stockes en EEPROM SPI)
│
▼
Conversion hexadecimale → chaine ASCII de 32 caracteres
│
▼
Hash MD5 (RFC 1321)
│
▼
Formatage "16premierschiffres:16dernierschiffres" (33 caracteres)
│
▼
Encodage Base64
│
▼
c_MatriculeCryptee[46] (cle finale pour le header HTTP)
Authorization: Basic <c_MatriculeCryptee>
Accept: application/json,application/xhtml1+xml,application/xml;q=0.9,*/*;q=0.8
host: mon.essensys.fr
Cache-Control: max-age=0
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Content-type: application/json ;charset=UTF-8
Fonctions Cles
| Fonction |
Fichier |
Role |
cryptage() |
Ethernet/Cryptage.c |
Generation complete de c_MatriculeCryptee |
c_EnteteTrameAuthorisation() |
Ethernet/www.c |
Retourne "Authorization: Basic " |
c_EnteteTrameMatricule() |
Ethernet/www.c |
Retourne c_MatriculeCryptee |
Limitations
- Pas de TLS : la communication HTTP est en clair sur le LAN (RTCS ne supporte pas TLS)
- La cle Base64 est calculee une seule fois au demarrage et reutilisee indefiniment
- MD5 est considere cryptographiquement faible (collisions connues)
2. Chiffrement des Ordres Alarme (AES/Rijndael)
Les ordres de changement de code alarme sont chiffres en AES-CBC pour proteger le code d'acces.
Algorithme
| Parametre |
Valeur |
| Algorithme |
Rijndael (AES) |
| Mode |
CBC (Cipher Block Chaining) |
| Taille bloc |
128 bits (16 octets) |
| Taille cle |
256 bits (32 octets) |
| IV |
8 premiers octets du hash MD5 de la cle serveur |
Flux de Dechiffrement
Trame serveur (valeurs separees par ";")
│
▼
UnParceAES() → Parse en structure stAESParse
│
▼
sc_AnalyseOrdreAlarmeServeur()
│
▼
block_decrypt(MODE_CBC, cle, IV) → code alarme en clair
│
▼
Stockage en EEPROM SPI (2 octets : LSB + MSB)
Fonctions Cles
| Fonction |
Fichier |
Role |
UnParceAES() |
Ethernet/Cryptage.c |
Parse la trame AES (separateur ;) |
sc_AnalyseOrdreAlarmeServeur() |
Ethernet/www.c |
Dechiffrement AES-CBC du code alarme |
sc_TraitementAlarme() |
Ethernet/www.c |
Traitement complet de l'ordre alarme |
rijndael_setup() |
Ethernet/Cryptagerijndael_mode.c |
Initialisation du contexte AES |
block_decrypt() |
Ethernet/Cryptagerijndael_mode.c |
Dechiffrement multi-blocs |
Derivation de la Cle de Dechiffrement
La cle de dechiffrement alarme (c_CleDecryptageAlarme[46]) est derivee du meme MD5 que l'authentification :
MD5(cle_serveur_hex) → digest[16]
└─ 8 premiers octets → c_CleDecryptageAlarme (IV pour AES-CBC)
3. Stockage des Secrets en EEPROM SPI
Cartographie EEPROM
| Adresse |
Taille |
Contenu |
0x00 |
16 octets |
Cle serveur (uc_Cle_Acces_Distance) |
0x10 (apres cle) |
2 octets |
Code alarme (LSB + MSB) |
0xFA |
6 octets |
Adresse MAC Ethernet |
Configuration SPI
| Parametre |
Valeur |
| Vitesse |
500 kHz |
| Mode |
Mode 0 (CPOL=0, CPHA=0) |
| Endianness |
Big endian |
| CS EEPROM MAC |
MCF5XXX_QSPI_QDR_QSPI_CS0 |
| CS EEPROM Soft |
MCF5XXX_QSPI_QDR_QSPI_CS2 |
Commandes EEPROM
| Commande |
Code |
Usage |
| READ |
0x03 |
Lecture : 0x03 + adresse + donnees |
| WRITE ENABLE |
0x06 |
Activation ecriture |
| WRITE |
0x02 |
Ecriture : 0x02 + adresse + donnees |
Delai apres ecriture : 5 ms minimum.
Fonctions Cles
| Fonction |
Fichier |
Role |
vd_ReadAdresseMac() |
C/EepromAdresseMac.c |
Lit 6 octets a l'adresse 0xFA |
vd_ReadCleServeur() |
C/EepromAdresseMac.c |
Lit 16 octets a l'adresse 0x00 |
vd_ReadCodeAlarme() |
C/EepromAdresseMac.c |
Lit 2 octets apres la cle serveur |
vd_UpdateCleServeurDansEEPROM() |
C/EepromAdresseMac.c |
Mise a jour cle si modifiee |
vd_UpdateCodeAlarmeDansEEPROM() |
C/EepromAdresseMac.c |
Mise a jour code alarme si modifie |
vd_SpiOpen() |
C/Eepromspi.c |
Configuration port SPI |
4. Synthese des Risques
| Risque |
Severite |
Mitigation |
| Communication HTTP en clair |
Elevee |
Gateway Raspberry Pi en relais local (LAN uniquement) |
| MD5 pour authentification |
Moyenne |
Cle unique par armoire, pas d'interception facile sur LAN |
| Cle serveur fixe en EEPROM |
Moyenne |
Modifiable par le serveur via vd_UpdateCleServeurDansEEPROM() |
| Code alarme en 2 octets |
Faible |
Chiffre en AES-CBC pendant le transport |
| Pas de rotation de cles |
Moyenne |
Architecture Gateway compense cote serveur |
References Sources
- Authentification :
client-essensys-legacy/Ethernet/Cryptage.c
- MD5 :
client-essensys-legacy/Ethernet/Cryptagemd5.c
- AES/Rijndael :
client-essensys-legacy/Ethernet/Cryptagerijndael_mode.c
- Headers HTTP :
client-essensys-legacy/Ethernet/www.c
- EEPROM SPI :
client-essensys-legacy/C/Eepromspi.c, C/EepromAdresseMac.c