OpenSSL DLL 없는 Delphi TLS 1.3

· 컴포넌트
OpenSSL DLL 없는 Delphi TLS 1.3

TLS를 배포해본 모든 Delphi 개발자는 이 절차를 잘 압니다. 이 컴퓨터에는 어떤 버전의 OpenSSL이 있는지. 고객의 서버에는 1.1이 있는데 빌드 서버에는 왜 3.0이 있는지. 실행 파일 옆에 어떤 두 개의 DLL을 두어야 하는지, 그리고 백신 프로그램이 그중 하나를 지워버리면 어떻게 되는지. sgcWebSockets 2026.10은 여기서 벗어날 길을 제공합니다. 라이브러리 안에 내장된, Object Pascal로 작성된 TLS 1.3 엔진이며, 어떤 종류의 DLL도 필요 없습니다.

이것은 래퍼가 아니라 진짜 구현입니다. 핸드셰이크, 레코드 계층, 키 스케줄, 인증서 검증 모두 Pascal로 작성되어 있습니다. 클라이언트나 서버는 아무것도 설치하지 않고도 TLS로 통신합니다.

속성 하나

oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLSOptions.IOHandler := iohNativeTLS;
oClient.Active := True;

서버에서는 SSLOptions에 있는 같은 스위치입니다.

oServer.SSLOptions.IOHandler := iohNativeTLS;
oServer.SSLOptions.CertFile := 'server.pem';
oServer.SSLOptions.KeyFile := 'server.key';
oServer.SSL := True;

ALPN, S N I, 클라이언트 인증서 모두 지원되며, Indy handler는 물론 I O C P와 E P O L L 서버에서도 마찬가지입니다. 그 밖에 여러분의 코드에서 바뀌는 것은 없습니다.

기기가 이미 신뢰하는 것을 신뢰하기

TLS 클라이언트는 그 신뢰 앵커만큼만 안전하며, 시간이 지나면서 낡아가는 cacert.pem을 배포하는 것 자체가 하나의 유지보수 문제입니다. 이 엔진은 운영체제가 이미 신뢰하는 루트를 사용할 수 있습니다.

oClient.TLSOptions.NativeTLS_Options.UseSystemRoots := True;

Windows에서는 ROOT 시스템 저장소에서, Linux와 Android에서는 흔히 쓰이는 위치들 중 가장 먼저 발견된 인증서 번들에서 가져옵니다. 이 옵션은 기본적으로 꺼져 있으며, 그 덕분에 신뢰 앵커는 정확히 RootCertFile이 지정한 그대로 유지됩니다.

내일 때문에, 오늘 포스트 퀀텀

오늘 여러분의 TLS 세션을 깨지 못하는 공격자라도 그것을 기록해 두었다가 나중에 보관할 수 있습니다. 흥미로운 질문은 지금 양자 컴퓨터가 존재하느냐가 아니라, 여러분의 트래픽이 얼마나 오래 민감한 정보로 남는가입니다. 그래서 TLS는 하이브리드 키 교환으로 옮겨가고 있습니다. 이 방식에서는 두 절반 중 어느 하나만 버텨도 공유 비밀은 안전합니다.

이 엔진은 RFC 10024의 하이브리드 그룹을 협상하며, 기본 그룹 목록은 이미 하이브리드 그룹으로 시작합니다.

oClient.TLSOptions.NativeTLS_Options.Groups :=
  'X25519MLKEM768:SecP256r1MLKEM768:X25519';

세 가지 하이브리드는 X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024입니다. 두 목록 모두 콜론으로 구분된 OpenSSL 스타일 이름을 사용하며, 값을 비워 두면 엔진의 기본값이 유지됩니다.

그 아래에 있는 암호학

같은 릴리스에서 sgcCrypto 팩에 포스트 퀀텀 프리미티브 자체가 Object Pascal로, 외부 라이브러리 없이 추가되었습니다.

이들은 단순한 주장이 아니라 라이브러리와 함께 제공되는 테스트 세트인 NIST의 알려진 답안 벡터에 대해 검증됩니다.

요청하지 않아도 되는 강화

같은 작업에서 고전적인 쪽도 타이밍 공격에 대비해 강화되었습니다. RSA 개인 키 연산은 블라인딩과 결과 검증이 포함된 상수 시간 지수 연산을 사용하고, 타원 곡선 스칼라 곱셈과 Ed25519 서명은 상수 시간으로 실행되며, AES와 GHASH는 더 이상 비밀 바이트로 테이블을 인덱싱하지 않습니다. 개인 키는 가져올 때 검사되므로, 인증서와 맞지 않는 키는 아무도 검증할 수 없는 서명을 만들어내는 대신 거부되며, ASN.1 인코딩이 최소 DER이 아닌 서명도 이제는 받아들여지지 않고 거부됩니다.

언제 무엇을 사용할까

OpenSSL과 SChannel은 어디로도 사라지지 않으며, 많은 애플리케이션에서 여전히 올바른 선택입니다. 오래된 무언가와 TLS 1.2 상호운용성이 필요하다면 OpenSSL을, 고객의 정책상 Windows가 암호화를 소유해야 한다면 SChannel을 사용하십시오. 네이티브 엔진은 배포 자체가 문제가 되는 경우를 위한 것입니다. 단일 실행 파일, 옆에 DLL이 전혀 없음, Windows와 Linux에서 동일한 동작, 그리고 플랫폼이 따라잡기를 기다리지 않아도 되는 포스트 퀀텀 키 교환입니다.

업그레이드

이 엔진은 sgcCrypto 팩의 일부이며 컴포넌트별로 선택되므로, IOHandler를 설정하기 전까지는 아무것도 바뀌지 않습니다. 암호화 유닛이 없는 빌드는 핸드셰이크 단계에서 알 수 없게 실패하는 대신 명확한 메시지를 표시합니다.

다음 읽을거리

영상으로 보기

이에 관한 짧은 영상eSeGeCe 채널에 있습니다.

질문, 피드백, 마이그레이션 도움이 필요하신가요? 문의하기 — 코드를 작성한 사람들에게서 직접 답변을 받으실 수 있습니다.