Cryptographie!

La sécurité des connexions Bluetooth

Historique et description générale
  C'est dans les années 1990 qu'est venue l'idée que des périphériques, reliés auparavant par des fils (comme le clavier et la souris d'un ordinateur, le casque d'une chaine hifi, les manettes d'une console de jeu) pourraient désormais communiquer avec leur hôte en utilisant des ondes radio. C'est la société suédoise Ericsson qui développa la première cette technologie baptisée Bluetooth en 1994, rejointe peu après dans un consortium par IBM, Intel, Nokia et Toshiba. La norme 1.0 du Bluetooth est publiée en juillet 1999, et en 2012, le consortium regroupait plus de 16000 sociétés. Les applications du Bluetooth ont largement dépassé le cadre prévu initialement, désormais on connecte son téléphone mobile à sa voiture par cette technologie.

  Le nom Bluetooth vient du roi danois Harald Blåtand, que l'on écrit Harold Bluetooth en anglais, qui vécut au Xième siècle. Ce roi avait beaucoup oeuvré dans sa vie afin d'unifier des parties de ce qui sont maintenant le Danemark, la Norvège et la Suède, exactement comme la technologie Bluetooth a pour but de faire dialoguer des appareils très différents. Le logo de Bluetooth célèbre lui aussi Harald Bluetooth, puisqu'il est constitué en caractères runniques des initiales HB du roi.

  Les spécifications du Bluetooth sont les suivantes :
  • très faible consommation d'énergie
  • très faible portée (sur un rayon de l'ordre d'une dizaine de mètres)
  • faible débit
  • très bon marché et peu encombrant.
  Lorsque deux objets équipés de la technologie Bluetooth veulent communiquer, ils doivent suivre un protocole en trois points :
  • l'appariement (pairing en anglais) : les deux objets doivent se reconnaitre comme étant équipés de la technologie Bluetooth et ils préparent les communications futures en s'échangeant un certain nombre d'informations. L'appariement ne doit être réalisé qu'une seule fois, et il nécessite dans l'idéal une intervention humaine externe.
  • l'authentification : à chaque fois que les objets veulent communiquer (par exemple, chaque fois que vous rentrez avec votre mobile dans votre voiture), les deux objets doivent s'identifier l'un à l'autre et vérifier qu'ils ont bien le droit de communiquer (il ne faudrait pas que l'oreillette de votre téléphone portable envoie vos données au téléphone portable du voisin!)
  • l'échange de données.
  Nous détaillons maintenant chaque étape, sans rentrer dans le détail technique des algorithmes utilisés (la spécification complète du Bluetooth comporte plus de 1200 pages!).
L'appariement de deux périphériques
  C'est le point le plus important dans la sécurité du Bluetooth. D'abord, les deux objets doivent être mis dans un état de recherche de périphériques Bluetooth à proximité. Une fois le dialogue amorcé, les deux s'accordent pour que l'un soit le maitre, et l'autre soit l'esclave, mais le fait d'être maitre ou esclave n'a pas d'importance.

  Le propriétaire des objets intervient d'abord en rentrant un code d'identification (on dit aussi code PIN), le plus souvent à 4 chiffres, sur chacun des objets. Puis, le maitre choisit au hasard un nombre aléatoire $N$, et il l'envoie à l'esclave. L'esclave et le maitre calculent $K_{init}=E22(N,PIN)$, où $E22$ est une certaine fonction décrite dans le protocole du Bluetooth. $K_{init}$ est une clé d'échange provisoire que les deux objets possèdent en commun, et qui sécurise les échanges à venir.

  Ce faisant, les deux objets n'ont pas encore vérifié qu'ils possédaient le même code PIN. Le maitre et l'esclave choisissent chacun un autre nombre aléatoire, disons $A_M$ pour le maitre et $A_E$ pour l'esclave. Le maitre envoie $A_M$ à l'esclave et l'esclave envoie $A_E$ au maitre. Le maitre et l'esclave calculent tous deux $C_M=A_M\oplus K_{init}$ et $C_E=A_E\oplus K_{init}$. Le maitre envoie à l'esclave $C_E$. L'esclave compare à la valeur qu'il a lui-même calculé. Si elles coincident, il sait que le maitre a eu le même code PIN que lui, et donc il peut continuer l'appariement. Réciproquement, l'esclave envoie $C_M$ au maitre. Celui-ci compare avec la valeur qu'il a lui-même calculé. Si elles coincident, l'esclave a eu le même code PIN, et les deux objets ont le droit de dialoguer.

  Le processus d'appariement n'est pas fini. Les deux objets calculent à partir de $A_E$, $A_M$ (qu'ils connaissent tous deux, mais qu'ils se sont échangés de façon sécurisée grâce à $K_{init}$) et de leurs adresses physiques (nombre unique créé à leur fabrication) une clé d'authentification commune $K_{auth}$. Ils stockent ensuite cette clé dans une petite mémoire. Le processus d'appariement est terminé et n'aura pas besoin d'être renouvelé.

  Dans les versions plus récentes du protocole, l'intervention d'un homme n'est plus nécessaire que pour mettre les deux appareils en état de recherche d'appariement, mais l'utilisation du code PIN n'est plus nécessaire. Les deux objets s'échangent en effet une clé d'initialisation à l'aide d'un protocole proche de celui de Diffie-Helman où on peut s'échanger une clé sans se la communiquer, et sans qu'un tiers qui écoute tous les échanges puisse la découvrir!
L'authentification
  On se place désormais dans le cadre où deux appareils possédant la technologie Bluetooth ont déjà été appariés. Ils partagent donc tous les deux la même clé d'authentification $K_{auth}$. Après un moment où ils ont été séparés, on les présente à nouveau l'un à l'autre. Comment reprennent-ils leur conversation?

  Le point clé est qu'ils doivent s'authentifier l'un à l'autre, c'est-à-dire vérifier qu'on leur a bien donner l'autorisation de dialoguer. Plus concrètement, ils doivent vérifier qu'ils possèdent la même clé $K_{auth}$. C'est à nouveau un procédé de challenge (ou de question/réponse) à base de nombres aléatoires qui va donner la solution.

  Le maitre choisit un nombre au hasard, que je vais noter $Aut_M$. Il l'envoie à l'esclave. Celui calcule une réponse $Rep_E$ qui dépend à la fois de la clé d'authentification $K_{auth}$ et de $Aut_M$. Il utilise pour cela un certain algorithme $E1$, et on a donc $Rep_E=E1(K_{auth},Aut_M)$. Il retourne $Rep_E$ au maitre. Celui-ci a, pendant ce temps-là, calculé également à quoi doit être égal $Rep_E$. Si la valeur reçue et la valeur calculée sont égales, il a bien authentifié l'esclave.

  Le procédé se poursuit alors de façon symétrique. Cette fois, c'est l'esclave qui choisit un nombre au hasard, que je note $Aut_E$. Il l'envoie au maitre qui calcule, avec le même algorithme, $Rep_M=E1(K,Aut_E)$. Il envoie cette réponse à l'esclave qui a calculé cette valeur entretemps. Si les deux valeurs coïncident, l'esclave a authentifié le maitre. L'authentification est alors terminée et les deux appareils vont pouvoir passer aux choses sérieuses : l'échange de données.

L'échange de données
  L'échange de données est finalement la partie la plus facile de la communication Bluetooth. Une fois qu'ils se sont authentifiés, les deux appareils s'échangent une clé de communication, générée par un algorithme appelé $E3$ à partir de la clé d'authentification $K_{auth}$ et d'une valeur aléatoire. Les données envoyées sont chiffrées ensuite à l'aide d'un algorithme de chiffrement par flots, l'horloge du maitre jouant le rôle de nunique.
Des failles dans la sécurité
  Comme expliqué ci-dessus, la sécurité du Bluetooth dépend pour beaucoup de la phase d'authentification. Malheureusement, il est souvent impossible de la réaliser dans des conditions idéales. Par exemple, une oreillette n'a pas de clavier pour rentrer un code PIN. Dans ce cas, l'oreillette impose d'utiliser un code PIN fixé en usine, qui est souvent 0000 ou 1234!

  Parfois même, certains produits bas de gamme imposent une clé d'authentification fixe. Dans ce cas, si on vous emprunte quelques secondes votre oreillette, on pourra découvrir cette clé d'authentification, puis espionner les communications futures de cette oreillette avec n'importe quel autre appareil Bluetooth!