Pourquoi SSL / TLS n'est-il pas intégré aux systèmes d'exploitation modernes?

16

Un grand nombre des protocoles réseau de base qui composent l'infrastructure d'Internet sont intégrés à la plupart des principaux systèmes d'exploitation. Par exemple, TCP, UDP et DNS sont tous intégrés à Linux, UNIX et Windows, et sont mis à la disposition du programmeur via des API système de bas niveau.

Mais en ce qui concerne SSL ou TLS, il faut se tourner vers une bibliothèque tierce telle que OpenSSL ou Mozilla NSS.

SSL est un protocole relativement ancien, et c'est essentiellement une norme industrielle aussi omniprésente que TCP / IP, alors pourquoi n'est-il pas intégré à la plupart des systèmes d'exploitation?

Channel72
la source
5
Quelle est la différence pratique entre «intégré» et «intégré»? Pour autant que je sache, tous les systèmes d'exploitation sont en quelque sorte livrés avec des implémentations groupées de SSL / TLS.
zneak
La différence est que TCP et DNS sont implémentés dans le code du noyau. Mais SSL n'est disponible que via des bibliothèques tierces. Bien qu'il soit généralement trivial d'installer le support SSL, et que de nombreux systèmes d'exploitation viennent même avec celui-ci, il y a toujours des inconvénients pratiques: par exemple, si j'écris une bibliothèque qui utilise une implémentation SSL particulière, (comme OpenSSL, NSS, GnuTLS, etc.) mon logiciel a maintenant une dépendance que les utilisateurs doivent gérer. Ce ne serait pas un problème si SSL était intégré au système d'exploitation. Je veux dire, ce n'est pas comme si je m'inquiétais si l'un de mes utilisateurs aurait besoin d'installer le support pour TCP.
Channel72
3
Je ne pense pas qu'avoir un SSL intégré résoudrait le problème que vous mentionnez. Maintenant, au lieu de dépendre de bibliothèques spécifiques, vous dépendrez de systèmes d'exploitation spécifiques.
zneak
1
Pourquoi n'y a-t-il pas de bibliothèques jpeg? Même question efficace. Vous regardez au mauvais emplacement de la pile. Tous les systèmes d'exploitation modernes ont quelque chose de fourni pour fournir une prise en charge SSL. (MSFT a le SDK .NET, linux / solaris en a un tas, et il y en a d'autres)
iivel
3
le voudriez-vous vraiment dans le noyau? Il me semble déjà terriblement encombré.
Matthieu M.

Réponses:

9

Je pense que cela dépend principalement de ce que vous voyez comme "l'OS". Si c'est le noyau, ma réponse serait: pourquoi le devrait-il? Je me trompe peut-être, mais le DNS ne fait-il pas partie de la glibc sur les systèmes Linux, qui est une bibliothèque tierce?

S'il ne s'agit pas du noyau ou de l'espace utilisateur, presque tous les OS / plates-formes ont une pile SSL / TLS, certains peuvent en avoir plus d'un.

Cela peut même être considéré comme un avantage. S'il n'y avait pas d'OpenSSL, il faudrait s'adapter à l'API Windows, Mac et Linux (et ...). TLS ne faisant pas partie du système d'exploitation permet d'écrire des applications TLS multiplateforme. Choisissez simplement une bibliothèque TLS qui prend en charge vos plateformes cibles.

Pour moi, le vrai problème avec TLS est que vous ne pouvez pas simplement "l'activer". Au lieu de cela, vous devez gérer un ensemble de certificats approuvés, des listes de révocation de certificats, des certificats auto-signés, etc. Tout cela nécessite beaucoup d'interaction avec l'utilisateur.

Malheureusement, la sécurité n'est jamais gratuite. C'est un effort pour les programmeurs et un inconvénient pour les utilisateurs.

paztulio
la source
La grande majorité de la plomberie de sécurité peut se produire sans aucune interaction de l'utilisateur. L'inconvénient ne se produit que lorsque des personnes utilisent des certificats auxquels on ne peut pas faire confiance.
zneak
1
C'est vrai. Mais il y a tellement de certificats autosignés. OMI, l'ensemble du modèle d'autorités centralisées n'est pas à l'échelle. Comment décider à quelles racines faire confiance? Aucun utilisateur ne décidera de cela. Ils espèrent tous que les programmeurs ont choisi judicieusement.
paztulio
Les certificats ne concernent pas vraiment la «vraie» confiance, ils complètent simplement le chiffrement. À quoi sert un canal crypté si vous parlez avec un serveur escroc? Le but des certificats est de prouver que vous communiquez avec le bon ordinateur, et à cette fin, tout certificat racine que vous avez reçu par des moyens sécurisés suffit pour valider l'authenticité. Pour le reste, les certificats ne prouvent rien sur les intentions d'une personne, ils prouvent juste que c'est la vraie personne et non une parodie.
zneak
7

Il y a un problème juridique. Certains pays mettent la cryptographie dans le même groupe que les armes. Mettre du code cryptographique dans le noyau rend alors plus difficile l'exportation de tout le code du noyau.

dan_waterworth
la source
2

Il y a des avantages évidents à intégrer TCP dans le système d'exploitation. TCP nécessite une synchronisation précise et une réponse rapide aux paquets réseau, même lorsqu'aucune donnée d'application n'est impliquée. Si vous essayez d'implémenter TCP dans l'espace utilisateur au-dessus d'une API IP générique, ce serait bien pire. Il n'y a pas d'avantages similaires à intégrer SSL dans le noyau.

D'un autre côté, il y a quelques inconvénients. Par exemple, SSL nécessite la manipulation de porte-clés et de listes de certificats, etc. Faire cela via un noyau ou une API de système d'exploitation serait inélégant. Donc, même s'il était fourni avec le système d'exploitation, ce serait juste une bibliothèque (comme c'est le cas sous Windows). Ces bibliothèques sont déjà disponibles de toute façon, donc ce n'est finalement qu'un changement d'emballage.

David Schwartz
la source
1

Il y a un certain nombre de raisons, mais peut - être est le plus convaincant que la cryptographie est très, très difficile à réellement obtenir droit . Il n'est pas judicieux de l'implémenter vous-même, sauf si vous pouvez consacrer des ressources importantes à vérifier qu'il est correct et solide. La plupart des gens qui travaillent avec des logiciels cryptographiques n'ont pas le temps, l'expertise ou le désir de s'enliser dans ce domaine; ils font confiance aux bibliothèques tierces pour que leurs développeurs puissent gérer cette partie du travail, tandis que les développeurs d'applications peuvent recommencer à faire ce qu'ils veulent faire.

Les développeurs de systèmes d'exploitation ne sont pas si différents. Parfois, il y a un intérêt supérieur - par exemple, votre modèle commercial ou vos avocats vous obligent à garder le code fermé - et donc vous n'avez pas beaucoup de choix en la matière: si vous ne trouvez pas quelqu'un qui vous laissera faire ce que vous devez, alors vous devez lancer le vôtre. D'autres ont déjà mentionné comment Microsoft procède. Mais d'une manière générale, les développeurs de systèmes d'exploitation qui peuvent utiliser des bibliothèques tierces préfèrent le faire de cette façon, pour les mêmes raisons que les développeurs d'applications.

The Spooniest
la source
0

Je suis développeur Windows, je ne peux donc pas parler pour d'autres systèmes d'exploitation, mais sur Windows, SSL a été intégré pendant très longtemps. Ils l'appellent SChannel et bien qu'il soit pris en charge, c'est l'une des API les plus cryptiques que l'on aurait jamais à comprendre.

DXM
la source
0

SSL est une couche au-dessus d'un protocole de niveau inférieur. Par exemple, SSL s'exécute sur le dessus de TCP (qui est sur le dessus d'IP).

Où s'arrête le système d'exploitation?

Il est très facile d'affirmer que le système d'exploitation fournit des services de base tels que la mise en réseau jusqu'à un point où un client du système d'exploitation "fait des choses". Et ce truc peut être ce que vous voulez.

Il est peu probable que SSL dans le noyau conduise à un gain de performances massif, alors pourquoi s'embêter?

Les noyaux de système d'exploitation modernes fonctionnent sur des millions de lignes de code, en ajouter plus ajoute simplement de la complexité et plus de temps de débogage. Le fait de laisser des éléments comme le protocole de couche supérieure hors du système d'exploitation facilite le développement du système d'exploitation et, en fin de compte, ne fait pas grande différence dans la fonction ou les performances d'une application finale. (Cela pourrait rendre le travail des développeurs pour l'application finale un peu plus pénible.)

vite_maintenant
la source
0

Il existe une prise en charge du noyau pour Crypto et SSL. Cela est logique car le noyau peut s'interfacer plus efficacement avec le matériel et il est également pratique de protéger les informations d'identification de toute application. De bons exemples sont kssl, un proxy SSL inversé au niveau du noyau dans Solaris ou les diverses bibliothèques de chiffrement dans le noyau (utilisées par exemple pour les VPN). Un moteur de chiffrement accéléré matériel typique a également un module de noyau (et est accessible via PKCS # 11 ou des interfaces de chiffrement spécifiques au système d'exploitation).

Certaines raisons pour lesquelles vous ne le voyez pas plus souvent sont que certains protocoles d'application ne sont pas correctement superposés (pensez STARTLS) ou nécessitent des décisions d'application pendant la prise de contact (pensez certificat client et vérification CRL) ou sont simplement dans une évolution régulière.

eckes
la source