SSL / TLSが最新のオペレーティングシステムに組み込まれていないのはなぜですか?


15

インターネットのインフラストラクチャを構成する基本的なネットワークプロトコルの多くは、ほとんどの主要なオペレーティングシステムに組み込まれています。たとえば、TCP、UDP、およびDNSはすべてLinux、UNIX、およびWindowsに組み込まれており、低レベルのシステムAPIを通じてプログラマーが利用できます。

しかし、SSLやTLSに関しては、OpenSSLやMozilla NSSなどのサードパーティライブラリを使用する必要があります。

SSLは比較的古いプロトコルであり、基本的にTCP / IPと同じくらいユビキタスな業界標準であるため、ほとんどのオペレーティングシステムに組み込まれていないのはなぜですか?


5
「組み込み」と「バンドル」の実際の違いは何ですか?私の知る限り、すべてのOSにはSSL / TLSの実装がバンドルされています。
zneak

違いは、TCPとDNSがカーネルコードに実装されていることです。ただし、SSLはサードパーティライブラリを介してのみ利用できます。通常、SSLサポートをインストールするのは簡単なことですが、多くのOSにはすぐに使用できるようになっていますが、実際の欠点もあります。たとえば、特定のSSL実装を使用するライブラリを作成する場合( OpenSSL、NSS、GnuTLSなど)私のソフトウェアには、ユーザーが対処しなければならない依存関係があります。SSLがOSに組み込まれていれば、これは問題になりません。つまり、ユーザーのいずれかがTCPのサポートをインストールする必要があるかどうかを心配するわけではありません。
Channel72

3
SSLが組み込まれていれば、あなたが言及した問題を解決できるとは思いません。これで、特定のライブラリに依存する代わりに、特定のオペレーティングシステムに依存するようになります。
zneak

1
jpegライブラリがないのはなぜですか?同じ効果的な質問。スタックの間違った場所を見ています。すべての最新のOSには、SSLサポートを提供するための何かがバンドルされています。(MSFTには.NET SDKがあり、linux / solarisにはたくさんありますが、他にもあります)
iivel

3
カーネルで本当に必要ですか?すでに私にはひどく混んでいるようです。
マチューM.

回答:


8

主に「OS」として見るものに依存すると思います。カーネルの場合、私の答えは次のとおりです。私は間違っているかもしれませんが、DNSはLinuxシステムのglibcの一部ではありません。これはサードパーティライブラリです。

カーネルまたはユーザースペースに関するものではない場合、ほぼすべてのOS /プラットフォームにSSL / TLSスタックがあります。

それは利点として見ることさえできます。OpenSSLがない場合は、Windows、Mac、Linux(および...)APIに適応する必要があります。OSの一部ではないTLSにより、クロスプラットフォームTLSアプリケーションを作成できます。ターゲットプラットフォームをサポートするTLSライブラリを選択するだけです。

私にとって、TLSの本当の問題は、単に「オンにする」ことはできないということです。代わりに、信頼できる証明書、証明書失効リスト、自己署名証明書などのセットを管理する必要があります。これらはすべて、ユーザーとの多くの対話を必要とします。

悲しいことに、セキュリティは決して無料ではありません。それはプログラマにとっては努力であり、ユーザーにとっては不便です。


セキュリティ配管の大部分は、ユーザーの操作なしで発生します。不便なのは、信頼できない証明書を使用する場合のみです。
zneak

1
これは本当です。しかし、そこには非常に多くの自己署名証明書があります。IMO、中央集権化された当局の全体モデルは拡大縮小しません。信頼するルートを決定する方法は?ユーザーはこれを決定しません。彼らはすべて、プログラマーが賢明に選択したことを望んでいます。
paztulio

証明書は「本当の」信頼に関するものではなく、単に暗号化を補完するものです。不正なサーバーと会話する場合、暗号化されたチャネルはどれほど良いですか?証明書のポイントは、適切なコンピューターと通信していることを証明することです。そのためには、安全な手段で受け取ったルート証明書だけで、信頼性を検証できます。残りの部分については、証明書は人の意図については何も証明していません。彼らはそれが本物であり、なりすましではないことを証明しています。
zneak

6

法的問題があります。一部の国では、暗号化を武器と同じグループに入れています。カーネルに暗号化コードを配置すると、カーネルコードのエクスポートがより困難になります。


2

TCPをオペレーティングシステムに組み込むことには明らかな利点があります。TCPでは、アプリケーションデータが含まれていない場合でも、正確なタイミングとネットワークパケットへの迅速な応答が必要です。汎用IP APIの上にあるユーザー空間にTCPを実装しようとすると、さらに悪化します。カーネルにSSLを統合することと同様の利点はありません。

一方、いくつかの欠点があります。たとえば、SSLではキーリングや証明書のリストなどを操作する必要があります。カーネルまたはOS APIを介してそれを行うことは、エレガントではありません。オペレーティングシステムに付属している場合でも、それは単なるライブラリになります(Windowsの場合と同様)。これらのライブラリはとにかくすでに利用可能であるため、最終的にはパッケージの変更にすぎません。


1

いくつかの理由がありますが、おそらく最も説得力のあることは、暗号化が実際に正しくなるのが非常に難しいことです。正しくて強力であることを確認するために主要なリソースを費やすことができる場合を除き、自分で実装するのは賢明ではありません。暗号化ソフトウェアを使用するほとんどの人は、時間、専門知識、またはこれに固執したいという希望を持っていません。ように、彼らは、サードパーティのライブラリを信頼し、そのアプリケーションの開発者は、彼らが作りたいものを作るに戻って取得することができますしながら、開発者は、作業の一部を処理することができます。

OS開発者はそれほど違いはありません。時には、最も重要な関心がある場合があります-たとえば、ビジネスモデルや弁護士は、コードを閉じたままにしておく必要があるため、問題について多くの選択肢がありません。あなたがしなければならないこと、それからあなたはあなた自身を転がさなければなりません。他の人はすでにマイクロソフトがこれをどのように行っているかについて言及しています。しかし、一般的に言えば、サードパーティのライブラリを使用できるOS開発者は、アプリケーション開発者と同じ理由で、そのようにすることを好みます。


0

私はWindows開発者なので、他のOSについて話すことはできませんが、Windowsには長い間SSLが組み込まれていました。彼らはそれをSChannelと呼んでいますが、サポートされている間、それは理解しなければならないより謎めいたAPIの1つです。


0

SSLは、低レベルのプロトコルの最上層です。たとえば、SSLはTCPの上部(IPの上部)で実行されます。

OSはどこで停止しますか?

OSは、OSのクライアントが「何かをする」までのネットワーキングなどの基本的なサービスを提供していると主張するのは非常に簡単です。そして、それらはあなたが望むものになります。

カーネル内のSSLによってパフォーマンスが大幅に向上する可能性はほとんどありませんが、なぜ気にするのでしょうか?

最新のOSカーネルは数百万行のコードで実行されるため、追加するだけで複雑さが増し、デバッグ時間が長くなります。上位層プロトコルのようなものをOSから除外すると、OS開発が容易になり、最終的にはエンドアプリケーションの機能やパフォーマンスにほとんど違いが生じません。(これにより、開発者は最終アプリケーションの仕事をもう少し苦痛に思うかもしれません。)


0

CryptoおよびSSLのカーネルサポートがいくつかあります。これは、カーネルがハードウェアとより効率的にインターフェイスでき、資格情報をあらゆるアプリケーションから保護するのに便利であるため、理にかなっています。よい例は、kssl、SolarisのカーネルレベルのリバースSSLプロキシ、またはカーネルのさまざまな暗号ライブラリ(VPNなどに使用)です。典型的なハードウェアアクセラレーション暗号化エンジンにはカーネルモジュールもあります(PKCS#11またはOS固有の暗号化インターフェイスを介してアクセス可能です)。

頻繁に表示されないいくつかの理由は、一部のアプリケーションプロトコルが適切に階層化されていない(STARTLSを考える)か、ハンドシェイク中にアプリケーションの決定を必要とする(クライアント証明書とCRLチェックを考える)か、単に定期的に進化していることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.