현대 운영 체제에 SSL / TLS가 내장되어 있지 않은 이유는 무엇입니까?


16

인터넷 인프라를 구성하는 많은 기본 네트워크 프로토콜이 대부분의 주요 운영 체제에 내장되어 있습니다. 예를 들어 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가 있고 리눅스 / 솔라리스에는 번들이 있으며 + 다른 것들도 있습니다)
iivel

3
커널에서 정말로 원하십니까? 벌써 나에게 붐비는 것 같습니다.
Matthieu M.

답변:


9

나는 그것이 당신이 "OS"로 보는 것에 주로 달려 있다고 생각합니다. 그것이 커널이라면 내 대답은 다음과 같습니다. 왜해야합니까? 내가 틀렸을 수도 있지만 DNS는 Linux 시스템에서 glibc의 일부가 아닌 타사 라이브러리입니까?

커널 또는 사용자 공간에 관한 것이 아니라면 거의 모든 OS / 플랫폼에 SSL / TLS 스택이 있으며 일부는 둘 이상을 가질 수 있습니다.

심지어 이점으로 볼 수도 있습니다. OpenSSL이 없으면 Windows, Mac 및 Linux (및 ...) API에 적응해야합니다. OS의 일부가 아닌 TLS는 크로스 플랫폼 TLS 애플리케이션을 작성할 수 있습니다. 대상 플랫폼을 지원하는 TLS 라이브러리를 선택하십시오.

저에게 TLS의 실제 문제는 단순히 "켜기"수 없다는 것입니다. 대신 신뢰할 수있는 인증서, 인증서 해지 목록, 자체 서명 된 인증서 등을 관리해야합니다. 이들 모두는 많은 사용자 상호 작용이 필요합니다.

안타깝게도 보안은 무료로 제공되지 않습니다. 프로그래머를위한 노력과 사용자를위한 불편 함입니다.


대부분의 보안 배관은 사용자 개입없이 발생할 수 있습니다. 사람들이 신뢰할 수없는 인증서를 사용하는 경우에만 불편이 발생합니다.
zneak

1
사실입니다. 그러나 자체 서명 된 인증서가 너무 많습니다. 중앙 집중식 기관의 전체 모델 인 IMO는 확장되지 않습니다. 신뢰할 뿌리를 결정하는 방법? 어떤 사용자도 이것을 결정할 수 없습니다. 그들은 모두 프로그래머가 현명하게 선택하기를 희망합니다.
paztulio

인증서는 "실제"신뢰에 관한 것이 아니라 단지 암호화를 보완합니다. 악의적 인 서버와 대화 할 경우 암호화 된 채널은 무엇입니까? 인증서의 요점은 올바른 컴퓨터와 통신하고 있음을 증명하는 것이며,이를 위해 보안 수단을 통해받은 루트 인증서만으로도 진위를 검증 할 수 있습니다. 나머지의 경우, 인증서는 사람의 의도에 대해 아무 것도 증명하지 않으며 단지 실제 사람이고 일부 스푸핑이 아니라는 것을 증명합니다.
zneak

7

법적인 문제가 있습니다. 일부 국가에서는 암호화를 무기와 같은 그룹에 넣습니다. 커널에 암호화 코드를 넣으면 커널 코드 내보내기가 더 어려워집니다.


2

운영 체제에 TCP를 구축하면 확실한 이점이 있습니다. TCP는 애플리케이션 데이터가 관련되지 않은 경우에도 정확한 타이밍과 네트워크 패킷에 대한 빠른 응답을 요구합니다. 일반 IP API 위에있는 사용자 공간에서 TCP를 구현하려고하면 훨씬 더 나빠질 것입니다. 커널에 SSL을 통합 할 때 비슷한 이점이 없습니다.

반면에 몇 가지 단점이 있습니다. 예를 들어, SSL을 사용하려면 키 링 및 인증서 목록 등을 조작해야합니다. 커널 또는 OS API를 통해이를 수행하는 것은 중요하지 않습니다. 따라서 운영 체제와 함께 제공되는 경우에도 Windows와 마찬가지로 라이브러리 일뿐입니다. 이 라이브러리는 어쨌든 이미 사용 가능하므로 궁극적으로 패키징의 변화 일뿐입니다.


1

이 여러 가지 이유가 있지만 아마도 가장 강력한는 암호화 실제로 얻기 위해 매우 열심히이다 권리 . 주요 리소스를 정확하고 강력한 지 확인하는 데 전념 할 수 없다면 직접 구현하는 것은 현명하지 않습니다. 암호화 소프트웨어를 사용하는 대부분의 사람들은 시간, 전문 지식이 없거나 이것에 대해 숙고하고 싶지 않습니다. 그래서 그들은 타사 라이브러리를 신뢰 그들의 응용 프로그램 개발자가 만들고 싶어 무엇을 만들기 위해 다시 얻을 수 있습니다 동안의 devs, 작업의 일부를 처리 할 수 있습니다.

OS 개발자는 그렇게 다르지 않습니다. 비즈니스 모델이나 변호사가 코드를 닫아 둘 것을 요구하는 경우와 같이 우선적 인 관심이있는 경우가 있습니다. 따라서 문제에 대한 선택의 여지가 없습니다. 당신이해야 할 일, 당신은 자신의 롤을해야합니다. 다른 사람들은 이미 Microsoft가 어떻게하는지 언급했습니다. 그러나 일반적으로 타사 라이브러리를 사용할 수있는 OS 개발자는 응용 프로그램 개발자와 같은 이유로 이러한 방식을 선호합니다.


0

저는 Windows 개발자이므로 다른 OS에서는 말할 수 없지만 Windows에서는 오랫동안 SSL이 내장되어 있습니다. 그들은 그것을 SChannel 이라고 부르며 지원되는 동안 알아 내야 할보다 암호 API 중 하나입니다.


0

SSL은 하위 수준 프로토콜의 최상위 계층입니다. 예를 들어 SSL은 TCP 상단 (IP 상단)을 통해 실행됩니다.

OS는 어디에서 멈추나요?

OS가 클라이언트가 "작업을 수행"하는 지점까지 네트워킹과 같은 기본 서비스를 제공한다고 주장하는 것은 매우 쉽습니다. 그리고 그 물건은 당신이 원하는 무엇이든 될 수 있습니다.

커널의 SSL이 엄청난 성능 향상을 가져올 것 같지 않은 이유는 무엇입니까?

최신 OS 커널은 수백만 줄의 코드로 실행되므로 복잡성을 높이고 디버깅 시간을 늘릴 수 있습니다. OS에서 상위 계층 프로토콜과 같은 것들을 남겨두면 OS 개발이 쉬워지고 결국 최종 애플리케이션의 기능이나 성능에 거의 차이가 없습니다. (개발자가 최종 애플리케이션 작업을 좀 더 힘들게 만들 수 있습니다.)


0

암호화 및 SSL에 대한 일부 커널 지원이 있습니다. 커널이 하드웨어와보다 효율적으로 인터페이스 할 수 있고 모든 응용 프로그램에서 자격 증명을 보호하는 것이 편리하기 때문에 이치에 맞습니다. 좋은 예는 kssl, Solaris의 커널 레벨 리버스 SSL 프록시 또는 커널의 다양한 암호화 라이브러리 (예 : VPN에 사용)입니다. 일반적인 하드웨어 가속 암호화 엔진에는 커널 모듈도 있습니다 (PKCS # 11 또는 OS 별 암호화 인터페이스를 통해 액세스 가능).

더 자주 알지 못하는 몇 가지 이유는 일부 응용 프로그램 프로토콜이 제대로 계층화되지 않았거나 (STARTLS 생각) 핸드 셰이크 (클라이언트 인증서 및 CRL 확인 생각) 중에 응용 프로그램 결정이 필요하거나 단순히 규칙적으로 발전하고 있기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.