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?
security
operating-systems
protocol
ssl
Channel72
la source
la source
Réponses:
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.)
la source
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.
la source