Sécurisation des communications =============================== <br><br> *Ce document a été créé en collaboration avec l'IA Copilot intégrée au moteur de recherche Bing (elle-même reliée à ChatGPT), qui a été utilisée pour transposer le cours correspondant (accessible [ici](securisation-communications)) en un diaporama.* --- # Introduction ---- # Introduction - Les objets numériques sont souvent la cible d'**attaques**. - La **cybersécurité** développe des méthodes **pour éviter ou détecter** ces actes malveillants. - C'est **enjeu majeur du 21ème siècle** (scientifique et technologique, économique, politique, militaire, etc.) ---- # Introduction - Le chiffre de César est un exemple ancien de chiffrement par décalage. - La valeur de ce décalage est appelé la **clé de chiffrement** <img class="centre image-responsive image-encadree" src="data/cesar.svg" alt="Schéma du chiffrement symétrique" width="400"> <p><small>Crédit : <a href="https://commons.wikimedia.org/wiki/File:Caesar3.svg">Cepheus</a>, Domaine public, via Wikimedia Commons</small></p> ---- # Introduction - Méthodes de chiffrement actuelles : beaucoup plus sophistiquées mais toujours basées sur **une ou plusieurs clés de chiffrement**. - Chiffrement : utilisé quotidiennement dans de nombreuses applications : vous l'utilisez des dizaines de fois par jour (des idées ?) - Deux grandes catégories de chiffrement : - les **chiffrements symétriques** - les **chiffrements asymétriques**. --- # Chiffrement symétrique ---- # Chiffrement symétrique <img class="r-stretch centre image-responsive image-encadree" src="data/chiffrement_symetrique.png" alt="Schéma du chiffrement symétrique"> <p><small>Crédit : <a href="https://commons.wikimedia.org/wiki/File:Chiffrement_sym%C3%A9trique.png">MarcT0K (icônes par JGraph)</a>, <a href="https://creativecommons.org/licenses/by-sa/4.0">CC BY-SA 4.0</a>, via Wikimedia Commons</small></p> - Aussi appelé chiffrement **à clé secrète** - Chiffrement dit **symétrique** car c'est le **même clé** qui permet de **chiffrer *et*** de **déchiffrer** (ex: chiffre de César) ---- # Chiffrement symétrique - Forme de chiffrement la plus ancienne. - Clé de chiffrement : - doit **rester secrète** - être suffisamment **complexe** pour résister à une attaque par **force brute**. > Qu'est-ce qu'une attaque par *force brute* ? ---- ## Chiffrement XOR - Chiffrement XOR = algorithme de chiffrement symétrique plus évolué. - Basé sur l'opérateur logique XOR. | **$x$** | $y$ | $x \oplus y$ | |---------|-----|:-------------:| | **0** | 0 | 0 | | **0** | 1 | 1 | | **1** | 0 | 1 | | **1** | 1 | 0 | - Utilisation d'une clé secrète pour chiffrer et déchiffrer un message. Exemple : message = "MOUNIER" et clé = "INFO". ---- ## Chiffrement XOR - **Pour chiffrer** : opération XOR bit à bit entre le message et la clé. <div style="font-size:0.8em"> <table class="tg"> <tbody> <tr> <td style="width:100px">Message</td> <td>M</td> <td>O</td> <td>U</td> <td>N</td> <td>I</td> <td>E</td> <td>R</td> </tr> <tr> <td>Clé</td> <td>i</td> <td>n</td> <td>f</td> <td>o</td> <td>i</td> <td>n</td> <td>f</td> </tr> <tr> <td>Message</td> <td>01001101</td> <td>01001111</td> <td>01010101</td> <td>01001110</td> <td>01001001</td> <td>01000101</td> <td>01010010</td> </tr> <tr> <td>Clé</td> <td>01101001</td> <td>01101110</td> <td>01100110</td> <td>01101111</td> <td>01101001</td> <td>01101110</td> <td>01100110</td> </tr> <tr> <td>Message chiffré (XOR)</td> <td>00100100</td> <td>00100001</td> <td>00110011</td> <td>00100001</td> <td>00100000</td> <td>00101011</td> <td>00110100</td> </tr> <tr> <td>Message chiffré</td> <td>24</td> <td>21</td> <td>33</td> <td>21</td> <td>20</td> <td>2B</td> <td>34</td> </tr> <tr> <td>Message chiffré</td> <td>$</td> <td>!</td> <td>3</td> <td>!</td> <td>(espace)</td> <td>+</td> <td>4</td> </tr> </tbody> </table> </div> ---- ## Chiffrement XOR et amélioration - **Pour déchiffer** : à nouveau XOR bit à bit entre le message chiffré et la clé (car $(x \oplus y) \oplus y = x$) - Pas infaillible si on utilise toujours la même clé et qu'on l'étend pour atteindre la taille du message - Mais une amélioration, appelée **masque jetable** ou **chiffre de Vernam**, permet d'obtenir un chiffrement incassable : - clé : aussi longue que le message à chiffrer - caractères de la clé : choisis de façon totalement aléatoire - chaque clé utilisée qu'une seule fois. ---- ## Chiffrement XOR et amélioration - **Chiffre de Vernam** (masque jetable) : inutilisable en pratique car générer aléatoirement une *nouvelle* clé à chaque chiffrement n'est pas possible - Il existe des chiffrements incassables qui permettent de conserver la même clé pour toute une série d'échanges, exemple : chiffrement AES ---- ## Chiffrement AES - Chiffrement **AES** (*Advanced Encryption Standard*, soit « norme de chiffrement avancé ») = **chiffrement *symétrique* le plus utilisé**. - Très similaire au chiffrement XOR ou masque jetable : - clé aléatoire de taille 128, 192 ou 256 bits. - clé utilisée pour transformer le message à chiffrer mais avec davantage d'opérations qu'un simple XOR - clé utilisée pour déchiffrer - Aucune attaque connue efficace ---- ## Chiffrement AES - Seule possibilité : attaque par *force brute* mais ... - Avec une clé de 256 bits (pour le chiffrement AES-256) - $2^{256}$ clés possibles soit $\simeq 1.16\times 10^{77}$ clés à tester. - en supposant que l'on puisse tester 1 000 milliards de clés par seconde - il faudra plus d'un milliard de milliards de milliards de milliards de fois l'âge de l'univers pour tester toutes les clés possibles 🤯🤯🤯 - Utilisé : - par la NSA pour ses documents "secrets défense" - dans les gestionnaires de mots de passe - pour chiffrer des bases de données ---- ## Point faible des chiffrements symétriques - **L'échange de la clé !** - *Comment s'échanger la clé servant à chiffrer les communications lorsque le canal n'est pas encore sécurisé ?* - Ce problème est résolu par l'utilisation de chiffrements *asymétriques*. --- # Chiffrement asymétrique ---- # Chiffrement asymétrique - Aussi appelé chiffrement **à clé publique** - Cette clé publique est connue de tous - Associée à une **clé privée** qui n'est jamais partagée - Chiffrement utilisé dans des protocoles qui permettent de sécuriser des communications, par exemple : Diffie-Hellman, RSA ---- ## Échange de clés de Diffie-Hellmann - Protocole *asymétrique* présenté par Whitfield Diffie et Martin Hellmann en 1976. - Permet à deux personnes de s'échanger des secrets même en étant écoutés en permanence par un espion ! - Concrètement : - Permet de construire une clé secrète partagée - Pour la construire : les échanges ne sont pas chiffrés - Un troisième participant qui écoute tous les échanges ne peut pas déterminer la clé secrète. - Basé sur des concepts mathématiques (voir vidéo de David Louapre : https://youtu.be/1Yv8m398Fv0) ---- ## Échange de clés de Diffie-Hellmann - Analogie avec des pots de peintures pour comprendre le principe. <img class="r-stretch centre image-responsive image-encadree" src="data/diffie_hellmann.svg" alt="Illustration conceptuelle de l'échange de clef Diffie-Hellman"> <p><small>Crédit : <a href="https://commons.wikimedia.org/wiki/File:Diffie-Hellman_Key_Exchange_(fr).svg">Idée originale : A.J. Han VinckVersion vectorielle : FlugaalTraduction : Dereckson</a>, Domaine public, via Wikimedia Commons</small></p> ---- <img class="r-stretch centre image-responsive image-encadree" src="data/diffie_hellmann.svg" alt="Illustration conceptuelle de l'échange de clef Diffie-Hellman"> <ul class="r-stack"> <li class="fragment fade-in-then-out" data-fragment-index="0"><strong>Étape 1</strong> : Alice et Bob choisissent au préalable une peinture commune, ici le jaune. Cette couleur est connue de tous, y compris de l'intrus Ève.</li> <li class="fragment fade-in-then-out" data-fragment-index="1"><strong>Étape 2</strong> : Alice choisit une autre couleur secrète (ici du rouge). Elle mélange la peinture commune et sa couleur secrète et obtient de l'orange. Alice envoie la couleur orange à Bob. La couleur orange est connue d'Ève.</li> <li class="fragment fade-in-then-out" data-fragment-index="2"><strong>Étape 3</strong> : Bob fait de même : il choisit une couleur secrète (ici du cyan) qu'il mélange à la peinture commune et il obtient du bleu. Bob envoie sa couleur bleu à Alice. La couleur bleue est connue d'Ève.</li> <li class="fragment fade-in-then-out" data-fragment-index="3"><strong>Étape 4</strong> : Alice prend la couleur reçue (le bleu) qu'elle mélange avec sa couleur secrète rouge. Elle obtient une couleur brune.</li> <li class="fragment fade-in-then-out" data-fragment-index="4"><strong>Étape 5</strong> : Bob prend la couleur reçue (le orange) qu'il mélange avec sa couleur secrète cyan. Il obtient la même couleur brune.</li> <li class="fragment" data-fragment-index="5">À l'issue du protocole : Alice et Bob possèdent la même couleur brune qui représente la <strong>couleur secrète partagée</strong></li> </ul> ---- <img class="r-stretch centre image-responsive image-encadree" src="data/diffie_hellmann.svg" alt="Illustration conceptuelle de l'échange de clef Diffie-Hellman"> **Sur quoi repose la sécurité du protocole ?** - Si on connaît un mélange de deux couleurs et l'une des deux couleurs utilisées, il est difficile de retrouver l'autre - Ici : Ève connaît les couleurs publiques (orange et bleue) et la couleur commune de départ mais impossible de retrouver les couleurs secrètes (rouge et cyan) : elle ne peut donc pas trouver la couleur brune secrète. ---- <img class="r-stretch centre image-responsive image-encadree" src="data/diffie_hellmann.svg" alt="Illustration conceptuelle de l'échange de clef Diffie-Hellman"> **L'analogie fonctionne car :** - si on connait une couleur $x$ et la couleur du mélange $M(x,y)$ entre les couleurs $x$ et $y$, il est « difficile » de déterminer exactement la nuance de couleur $y$ - le mélange de trois couleurs donne la même couleur peut importe l'ordre dans lequel on fait le mélange : $M(M(x,y),z) = M(M(x,z),y)$. ---- ## Échange de clés de Diffie-Hellmann - Clé secrète partagée (couleur commune) : ensuite utilisée pour chiffrer et déchiffrer les communications de manière sûre. - Concrètement : - les couleurs sont remplacés par des entiers et un nombre premier, tous très grands - des calculs sur ces nombres permettent de faire les "mélanges" - à partir des nombres obtenus : très difficile de retrouver ceux de départ - voir vidéo de David Louapre (https://youtu.be/1Yv8m398Fv0) ---- ## Échange de clés de Diffie-Hellmann - **Point faible** : ne permet pas d'**authentifier** les participants. - Autrement dit : - Ève peut se faire passer pour Bob auprès d'Alice, et pour Alice auprès de Bob - C'est l'**attaque de l'homme au milieu**, ou **man in the middle**. - Autres chiffrements asymétriques, comme le chiffrement RSA, règlent ce problème d'authentification. ---- ## RSA : le *chiffrement* - **RSA** = système de chiffrement *asymétrique* implémenté en **1978** - Du nom de ses trois inventeurs : les cryptologues Ronald **Rivest**, Adi **Shamir** et Leonard **Adleman** - Repose sur l'utilisation d'un couple de clés : - une **clé publique** notée $C^{\text{pub}}$ - et une **clé privée** notée $C^{\text{priv}}$ - Une clé sert à chiffrer le message et l'autre à le déchiffrer. ---- ## RSA : le *chiffrement* - Les clés sont générées de manière complexe, basée sur des théorèmes d'arithmétique. - Elles sont liées de la façon suivante : $$C^{\text{pub}}(C^{\text{priv}}(m)) = C^{\text{priv}}(C^{\text{pub}}(m)) = m$$ - Connaissant l'une, il est impossible de déduire l'autre ou de déduire le message original (= on ne peut pas trouver $m$ en connaissant $C^{\text{pub}}(m)$ ou $C^{\text{priv}}(m)$) - En utilisant ces deux clés, Alice peut envoyer un message chiffré à Bob. ---- ## RSA : le *chiffrement* ![RSA étape 1](data/rsa_etape1.svg) **Étape 1** - Bob fabrique sa clé publique et sa clé privée. - Il envoie sa clé publique à Alice et garde sa clé privée secrète. ---- ## RSA : le *chiffrement* ![RSA étape 2](data/rsa_etape2.svg) **Étape 2** - Alice chiffre son message $m$ avec la clé publique de Bob. - Elle envoie le message chiffré $C^{\text{pub}}_\text{Bob}(m)$ à Bob. ---- ## RSA : le *chiffrement* ![RSA étape 3](data/rsa_etape3.svg) **Étape 3** - Bob utilise sa clé privée pour déchiffrer le message d'Alice - Bob peut lire le message original. ---- ## RSA : le *chiffrement* ![RSA étape 2 bis](data/rsa_etape2_bis.svg) - Si Ève intercepte le message chiffré (étape 2), elle ne peut rien en faire sans la clé privée de Bob - La communication est sécurisée ---- ## RSA : le *chiffrement* - En pratique, RSA est lourd en calculs pour chiffrer et déchiffrer des messages : cela ralentit les échanges - Donc RSA est difficilement utilisable en pratique pour échanger des données volumineuses - Mais il peut être **utilisé pour échanger une clé symétrique** en toute sécurité, et, une fois la clé échangée avec RSA, le reste des commnications se poursuit avec un chiffrement symétrique beaucoup plus efficace (ex : AES) ---- ## RSA : le *chiffrement* **Comment utiliser RSA pour s'échanger une clé symétrique ?** - Alice choisit comme message $m$ une clé symétrique (AES) - Elle chiffre cette clé symétrique avec la clé publique de Bob. ![RSA étape 2](data/rsa_etape2.svg) - Bob déchiffre la clé avec sa clé privée. - Ensuite, ils utilisent cette clé symétrique pour chiffrer leurs communications. ---- ## RSA : l'*authentification* - La partie *chiffrement* de RSA décrite à l'instant (tout comme Diffie-Hellman) ne garantit pas l'identité des participants. - Ils sont vulnérables à l'attaque **man in the middle** ![Attaque man in the middle](data/man_in_the_middle.svg) - Ève peut se faire passer pour Bob auprès d'Alice et pour Alice auprès de Bob ---- ## RSA : l'*authentification* - L'**authentification** assure que chaque participant s'adresse à la bonne personne. - Le chiffrement RSA tel qu'on l'a vu est complété par un mécanisme permettant de gérer l'**authentification des participants**. ---- ## RSA : l'*authentification* - **Solution** : **certificats** et **autorités de certification** - Un certificat, délivré par une autorité de certification (AC), prouve l'identité d'un participant. - Le certificat est obtenu en chiffrant la clé publique d'un participant avec la clé privée de l'AC. ---- ## RSA : l'*authentification* **Étape 1 : Demande de certificat** - Bob demande un certificat à une autorité de certification (AC). - L'AC : - vérifie qu'il s'agit bien de Bob (on ne détaille pas) - chiffre la clé publique de Bob avec sa clé privée pour obtenir le **certificat** : $s = C^{\text{priv}}\_{\text{AC}}(C^{\text{pub}}_\text{Bob})$ - Bob peut communiquer le certificat (c'est un fichier) à ses interlocuteurs pour justifier qu'il s'agit bien de lui ---- ## RSA : l'*authentification* **Étape 2 : Communication** - Alice veut communiquer avec Bob, elle le contacte - Bob transmet : - sa clé publique $C^{\text{pub}}_\text{Bob}$ - **et son certificat $s$** ---- ## RSA : l'*authentification* **Étape 3 : Vérification du certificat** - Alice utilise la clé publique de l'AC (en qui elle a aussi confiance) pour vérifier le certificat : $$C^{\text{pub}}\_\text{AC}(s)=\underbrace{C^{\text{pub}}\_\text{AC}(C^{\text{priv}}\_\text{AC}}\_{\text{s'annulent}}(C^{\text{pub}}\_\text{Bob}))=C^{\text{pub}}\_\text{Bob}$$ - Si le résultat correspond à la clé publique de Bob, Alice peut être certaine de l'identité de Bob. ---- ## RSA : l'*authentification* **Étape 4 : Initialisation de la communication** - Alice peut commencer la communication en utilisant la clé publique de Bob ou en utilisant le protocole de Diffie-Hellmann pour établir une clé partagée. ---- ## RSA : l'*authentification* - Lorsque l'autorité de certification chiffre la clé publique de Bob avec sa clé privée ($s = C^{\text{priv}}\_{\text{AC}}(C^{\text{pub}}_\text{Bob})$), on dit qu'elle **signe** la clé publique de Bob, d'où le nom $s$. - Ce mécanisme est aussi utilisé pour les **signatures électroniques** --- # Le protocole HTTPS ---- ## Introduction - Le protocole **HTTP** présente des vulnérabilités en termes de sécurité : - la transmission en clair des informations - l'absence de mécanisme d'authentification (donc vulnérabilité à l'attaque de l'homme au milieu). - Protocole **HTTPS** (Hypertext Transfer Protocol **Secure**) : - chiffre tous les échanges sur le Web - combinaison d'un chiffrement **asymétrique** **et** d'un chiffrement **symétrique** ---- ## HTTPS - HTTPS = - protocole HTTP - **et** une couche de **cryptographie** grâce au **protocole TLS** (Transport Layer Security). - TLS permet d'*authentifier* le serveur et d'établir une *clé de chiffrement symétrique*, appelée **clé de session** pour sécuriser les échanges. - La suite des échanges se fait suivant le protocole HTTP en chiffrant les messages avec la clé de session. ---- ### Fonctionnement de HTTPS <img class="r-stretch" alt="Fonctionnement du protocole HTTPS" src="data/tls.svg"> <!-- ![Fonctionnement du protocole HTTPS](data/tls.svg) --> <ul class="r-stack"> <li class="fragment fade-in-then-out" data-fragment-index="0"><strong>Étape 1</strong> : Le client envoie un message "Hello" au serveur pour demander une connexion sécurisée.</li> <li class="fragment fade-in-then-out" data-fragment-index="1"><strong>Étape 2</strong> : Le serveur répond avec sa clé publique et son certificat (qui est la signature de la clé publique par l'AC)</li> <li class="fragment fade-in-then-out" data-fragment-index="2"><strong>Étape 3</strong> : Le client valide le certificat en utilisant la clé publique de l'AC comme vu précédemment (en pratique les navigateurs disposent des clés publiques des AC)</li> <li class="fragment fade-in-then-out" data-fragment-index="3"><strong>Étape 4</strong> : Le client et le serveur utilisent un algo de chiffrement à clé publique (asymétrique) pour établir une <strong>clé de session</strong> partagée.</li> <li class="fragment" data-fragment-index="4"><strong>Étape 5</strong> : Pour la suite : client et serveur utilisent cette clé dans un chiffrement symétrique (AES) selon le protocole HTTP mais avec des requêtes et réponses chiffrées.</li> </ul> ---- ### Authentification dans le navigateur - En cas d'échec d'authentification (étape 3), le navigateur affiche un avertissement à l'utilisateur. <img class="r-stretch" alt="message d'alerte d'une connexion non certifiée" src="data/echec_authentification.png"> <!-- ![message d'alerte d'une connexion non certifiée](data/echec_authentification.png) --> <p><small>Crédit : <a href="https://commons.wikimedia.org/wiki/File:Caesar3.svg">Cepheus</a>, Domaine public, via Wikimedia Commons</small></p> ---- ### Authentification dans le navigateur - Si le certificat est expiré, le navigateur alerte également l'utilisateur. ![message d'alerte pour un certificat expiré](data/certificat_expire.png) ---- ### Authentification dans le navigateur - Il est possible de consulter le certificat d'un site HTTPS dans le navigateur (ex : `info-mounier.fr`) <img class="r-stretch" alt="certificat du site info-mounier.fr" src="data/certificat_info-mounier.png"> <!-- ![certificat du site info-mounier.fr](data/certificat_info-mounier.png) --> ---- ### Authentification dans le navigateur - L'AC est DigiCert Inc - On voit comment est chiffrée la connexion dans les détails techniques : ```plaintext TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 128 bits, TLS 1.2 ``` - Donc : - Protocole TLS utilisé (version 1.2) - `ECDHE` (*Elliptic Curve Diffie-Hellmann Ephemeral*) : la clé de session a été échangée par le protocole de Diffie-Hellmann (dans une variante utilisant les *courbes elliptiques* comme problème mathématique sous-jacent). - Authentification : assurée par le protocole RSA. - Le chiffrement symétrique (grâce à la clé de session) : assuré par l'algorithme AES128 --- # Bilan - Il existe deux familles de chiffrement : **symétrique** et **asymétrique**. - Chiffrement **symétrique** : - dit chiffrement **à clé secrète** - cette clé, partagée par les deux participants, sert à chiffrer et déchiffrer - exemple : AES - point faible : l'échange de la clé - Chiffrement **asymétrique** : - dit chiffrement **à clé publique** - basé sur des paires de clés publiques et privées - exemples : Diffie-Helmman, RSA ---- # Bilan - Le protocole d'**échange de clés de Diffie-Hellman** permet à deux participants de s'échanger de manière sécurisée une clé partagée même si le canal de communication est écouté - Mais ce protocole ne permet pas l'**authentification** donc est vulnérable à l'**attaque de l'homme au milieu** - L'algorithme **RSA**, basé sur une paire (clé privé, clé publique), permet de chiffrer les échanges mais ajoute une couche d'authentification grâce à des **autorités de certification** qui produisent des **certificats** attestant de l'identité d'un participant. ---- # Bilan - Le protocole **HTTPS** ajoute une **couche de sécurité** au protocole HTTP grâce au **protocole TLS**. - TLS : - utilise RSA pour sécuriser le début de la communication et authentifier le serveur - implémente l'échange d'une **clé de session** via Diffie-Hellmann ou RSA. - HTTP : - Lorsque les deux participants disposent de cette clé, la suite des échanges (requêtes/réponses HTTP) se fait avec un chiffrement symétrique, beaucoup plus rapide, tel que **AES**. ---- # Bilan - Tous les algos de chiffrement sont basés sur des clés, qui s'allongent au fur et à mesure de l'augmentation des performances des ordinateurs (pour éviter des attaques par *force brute*). - L'arrivée d'un ordinateur quantique rendrait instantanément obsolètes tous les chiffrements actuels. --- **Références** : - Articles Wikipédia : [Cryptographie symétrique](https://fr.wikipedia.org/wiki/Cryptographie_sym%C3%A9trique), [Cryptographie asymétrique](https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique), [Échange de clés de Diffie-Hellmann](https://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman), [Chiffrement RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA), [Attaque de l'homme du milieu](https://fr.wikipedia.org/wiki/Attaque_de_l%27homme_du_milieu), [Transporte Layer Security](https://fr.wikipedia.org/wiki/Transport_Layer_Security), [masque jetable](https://fr.wikipedia.org/wiki/Masque_jetable), [Advanced Encryption Standard](https://fr.wikipedia.org/wiki/Advanced_Encryption_Standard) - Livre *Numérique et Sciences Informatiques, 24 leçons, Terminale*, T. BALABONSKI, S. CONCHON, J.-C. FILLIATRE, K. NGUYEN, éditions ELLIPSES. - Livre *Prépabac NSI, Terminale*, G. CONNAN, V. PETROV, G. ROZSAVOLGYI, L. SIGNAC, éditions HATIER. - Les schémas ont été réalisés avec des images libres de droit (uniquement Public Domain ou CC0) accessibles sur le site : [https://www.svgrepo.com/](https://www.svgrepo.com/). --- Germain Becker, Lycée Emmanuel Mounier, Angers. ![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)