Чому SSL / TLS не вбудований в сучасні операційні системи?


16

Більшість основних мережевих протоколів, що складають інфраструктуру Інтернету, вбудовані в більшість основних операційних систем. Наприклад, TCP, UDP і DNS всі вбудовані в Linux, UNIX та Windows і надаються програмісту через системні API низького рівня.

Але якщо мова йде про SSL або TLS, потрібно звернутися до сторонніх бібліотек, таких як OpenSSL або Mozilla NSS.

SSL - це відносно старий протокол, і він в основному є галузевим стандартом настільки всюдисущим, як TCP / IP, так чому він не вбудований у більшість операційних систем?


5
Яка практична різниця між "вбудованим" та "вбудованим"? Наскільки мені відомо, всі ОС якимось чином поставляються із пакетними реалізаціями SSL / TLS.
zneak

Різниця полягає в тому, що TCP і DNS реалізовані в коді ядра. Але SSL доступний лише через сторонні бібліотеки. Хоча зазвичай встановити підтримку SSL, як правило, банальна справа, і багато ОС навіть поставляються з нею поза коробкою, все ж є практичні недоліки: Наприклад, якщо я пишу бібліотеку, яка використовує певну реалізацію SSL, (наприклад, OpenSSL, NSS, GnuTLS тощо) моє програмне забезпечення тепер має залежність, з якою мають стикатися користувачі. Це було б проблемою, якби SSL був вбудований в ОС. Я маю на увазі, це не так, як я переживаю, якщо комусь із моїх користувачів буде потрібно встановити підтримку TCP.
Канал72

3
Я не думаю, що вбудований SSL не вирішить проблему, яку ви згадуєте. Тепер замість конкретних бібліотек ви будете залежати від конкретних операційних систем.
zneak

1
Чому немає бібліотек jpeg? Це ж ефективне питання. Ви дивитесь на неправильне розташування стека. Усі сучасні ОС мають щось у комплекті, щоб забезпечити підтримку SSL. (MSFT має .NET SDK, linux / solaris мають купу, + є й інші)
iivel

3
ти справді хочеш цього в ядрі? Мені це здається жахливо переповненим.
Матьє М.

Відповіді:


9

Я думаю, що це головним чином залежить від того, що ви бачите як "ОС". Якщо це ядро, то моя відповідь буде: навіщо це робити? Можливо, я помиляюся, але хіба DNS не є частиною glibc в системах Linux, що є бібліотекою третьої сторони?

Якщо справа не в ядрі чи користувальницькому просторі, майже кожна ОС / платформа має стек SSL / TLS, у деяких може бути більше одного.

Це навіть можна сприймати як перевагу. Якби не було OpenSSL, вам доведеться адаптуватися до API Windows, Mac та Linux (і ...). TLS, що не входить до складу ОС, дозволяє писати кросплатформенні програми TLS. Просто виберіть бібліотеку TLS, яка підтримує цільові платформи.

Для мене справжня проблема з TLS полягає в тому, що ви не можете просто «включити його». Натомість вам належить керувати набором довірених сертифікатів, списками відкликання сертифікатів, сертифікатами, що підписуються самостійно тощо. Все це вимагає багато взаємодії з користувачем.

На жаль, безпека ніколи не приходить безкоштовно. Це зусилля для програмістів і незручності для користувачів.


Переважна більшість сантехнічних систем може відбуватися без будь-якої взаємодії з користувачем. Незручність виникає лише тоді, коли люди використовують сертифікати, яким не можна довіряти.
zneak

1
Це правда. Але там так багато самопідписаних сертів. ІМО, вся модель централізованих органів влади не масштабується. Як вирішити, яким корінням довіряти? Жоден користувач не вирішить цього питання. Всі вони сподіваються, що програмісти обрали розумно.
paztulio

Сертифікати - це не багато про "справжню" довіру, вони просто доповнюють шифрування. Яка користь у зашифрованому каналі, якщо ви розмовляєте з сервером-шахраєм? Суть сертифікатів полягає в тому, щоб довести, що ви спілкуєтесь з потрібним комп'ютером, і для цього достатньо будь-якого кореневого сертифіката, який ви отримали захищеними засобами, для підтвердження справжності. В іншому, довідки нічого не підтверджують наміри людини, вони просто доводять, що це справжня людина, а не якась підробка.
zneak

7

Виникає юридична проблема. Деякі країни ставлять криптовалюту до тієї ж групи, що і зброя. Введення криптографічного коду в ядро ​​ускладнює експорт будь-якого коду ядра.


2

Очевидні переваги вбудовування TCP в операційну систему. TCP вимагає точності синхронізації та швидкого реагування на мережеві пакети, навіть якщо дані програми не задіяні. Якщо ви спробували реалізувати TCP в просторі користувачів поверх загального API для IP, це було б набагато гірше. Немає подібних переваг щодо інтеграції SSL в ядро.

З іншого боку, є кілька недоліків. Наприклад, SSL вимагає маніпуляції з брелоками та списками сертифікатів тощо. Зробити це через API ядра або ОС було б неелегантно. Тож навіть якби він поставився з операційною системою, це була б просто бібліотека (як і в Windows). Ці бібліотеки вже доступні, так що в кінцевому рахунку це лише зміна упаковки.


1

Є цілий ряд причин, але , можливо, найбільш переконливим є те , що криптографія дуже, дуже важко насправді отримати право . Нерозумно це реалізовувати самостійно, якщо ви не зможете виділити основні ресурси на те, щоб перевірити, чи він правильний і сильний. Більшість людей, які працюють з криптографічним програмним забезпеченням, не мають часу, досвіду чи бажання в цьому розмитися; вони довіряють стороннім бібліотекам, щоб їх розробники могли впоратися з тією частиною роботи, тоді як розробники додатків можуть повернутися до того, що хочуть зробити.

Розробники ОС не такі вже й різні. Іноді виникає переважаючий інтерес - наприклад, ваша бізнес-модель або адвокати вимагають від вас тримати код закритим, - і тому у вас немає великого вибору в цьому питанні: якщо ви не можете знайти когось, хто дозволить вам це зробити що ти маєш, то треба прокатати своє. Інші вже згадували, як це робить Microsoft. Але взагалі розробники ОС, які можуть використовувати сторонні бібліотеки, вважають за краще це робити з тих же причин, що і розробники додатків.


0

Я розробник Windows, тому не можу говорити про інші ОС, але в Windows у них був вбудований SSL дуже довго. Вони називають це SChannel, і, хоча він підтримується, це один з найбільш кричущих API, який коли-небудь доведеться з'ясувати.


0

SSL - шар над вершиною протоколу нижнього рівня. Наприклад, SSL працює над вершиною TCP (що знаходиться над вершиною IP).

Де зупиняється ОС?

Дуже легко стверджувати, що ОС надає основні послуги, такі як мережа до тієї точки, коли клієнт ОС "робить щось". І цей матеріал може бути будь-яким, що ви хочете.

Навряд чи SSL в ядрі призведе до значного підвищення продуктивності, то чому б це турбувати?

Сучасні ядра ОС працюють на мільйони рядків коду, додаючи більше просто додає складності та більше часу налагодження. Якщо випустити такі речі, як протокол вищого рівня, поза операційною системою, це полегшує розробку ОС і, зрештою, мало впливає на функцію чи продуктивність кінцевої програми. (Це може зробити роботу розробників для кінцевої програми трохи більш болючою.)


0

Існує деяка підтримка Kernel для Crypto та SSL. Це має сенс, тому що ядро ​​може ефективніше взаємодіяти з апаратним забезпеченням, а також зручно захищати облікові дані від будь-якої програми. Хорошими прикладами є kssl, зворотний проксі-SSL-проксі на рівні ядра в Solaris або різні криптовалюти в ядрі (використовуються, наприклад, для VPN). Типовий апаратний прискорений криптовалют також має модуль ядра (і доступний через PKCS # 11 або специфічні криптоінтерфейси для ОС).

Деякі причини, чому ви цього не бачите частіше, полягає в тому, що деякі протоколи додатків не є належним чином шаруватими (думаю, STARTLS) або вимагають рішень додатків під час рукостискань (думаю, сертифікат клієнта та перевірка CRL) або просто перебувають у регулярній еволюції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.