요약

  • 클라이언트와 서버가 ALPN을 통해radius/1.1을 선택한 경우에만, 공유 비밀과 MD5 기반 패킷 인증 및 속성 난독화가 해당 TLS 또는 DTLS 연결에서 사라집니다. RADIUS/UDP와 RADIUS/TCP는 이번 변경 범위에 전혀 포함되지 않습니다.
  • 마이그레이션 판단은 RFC, 소프트웨어 버전 또는 '지원' 목록만으로는 부족하며, 능력이 제공되고 협상되고 강제되었으며 궁극적으로 구식 경로가 닫혔음을 홉마다 증명해야 합니다.

오래된 결정을 본문에 남겨 둔 RFC

기술 표준이 자신의 망설임을 스스로 남기는 경우는 드뭅니다. 그러나 RFC 9765는 서두에서, RADEXT가 RADIUS에 TLS와 DTLS 전송을 추가할 당시에도 패킷 안의 공유 비밀과 MD5 처리를 그대로 남겨 두었다고 설명합니다. TLS는 구식 프로토콜을 감싸는 외곽 계층으로 취급되었고, 인코딩·디코딩·검증 규칙을 크게 바꾸지 않아도 되었습니다. DeKok은 이어서 드물게 볼 수 있는 회고를 제시합니다. 이 결정은 나중에 보면 아마 잘못된 것이었고, 당시 선택에 그 본인도 참여했다는 것입니다.

이는 과거의 사람들을 반면교사로 만드는 이야기가 아닙니다. 호환성은 실제 문제를 해결했었습니다. 운영자는 모든 RADIUS 구현을 한 번에 교체하지 않고도 보호된 전송을 먼저 확보할 수 있었습니다. 대가는 나중에 나타났습니다. TLS가 이미 기밀성과 무결성을 제공하는데도 내부에서는 MD5에 의존하는 패킷 수준 메커니즘이 계속 돌아갔습니다. 컴플라이언스 환경이 이미 취약하다고 알려진 다이제스트 알고리즘을 거부하면서, 이 중복 설계는 검증·조달·유지보수를 가로막기 시작했습니다.

DeKok의 경력은 이번 수정이 단순히 서류에 그치지 않게 만듭니다. 그의 IETF 개인 페이지에는 1997년에 RADIUS를 접했고 1999년에 FreeRADIUS를 시작했으며, 인증 및 프로토콜 워킹 그룹에 오랫동안 참여했다고 기록되어 있습니다. FreeRADIUS 프로젝트는 실제 운영되는 정책 서버, 클라이언트 라이브러리, 통합 구성 요소를 관리합니다. 그러나 오랜 코드 작성 경험이 곧 프로토콜 주권을 의미하지는 않습니다. RFC 9765는 공개 심의를 거친 IETF 합의 문서이지만, 여전히 실험적(Experimental) 범주입니다. 이 문서는 구현과 평가를 요청할 뿐, 전 세계 네트워크가 마이그레이션을 마쳤다고 선언하지 않습니다.

신뢰가 패킷에서 연결로 이동

RFC 2865가 기술한 원래 모델은 클라이언트와 서버가 함께 알고 있는 비밀에 기반을 둡니다. 공유 비밀은 교환 인증에 참여하고, User-Password 같은 내용은 MD5 기반 방법으로 숨겨집니다. RFC 6614와 RFC 7360은 이후 각각 RADIUS over TLS와 RADIUS over DTLS를 규정했지만, 역사적 RADIUS/TLS는 여전히 패킷 내부의 비밀과 MD5 연산을 유지했습니다.

RADIUS/1.1은 버전 선택을 TLS 핸드셰이크 안으로 넣습니다. RFC 7301의 ALPN 메커니즘에 따라 클라이언트는 자신이 사용할 수 있는 애플리케이션 프로토콜 이름을 제시하고, 서버는 양쪽이 함께 지원하는 집합에서 하나를 선택합니다. 결과가radius/1.1일 때만 새 구성이 유효하며, TLS 1.3 이상이 요구됩니다.

선택된 이후, 이 홉은 더 이상 RADIUS 공유 비밀을 사용하지 않습니다. Request Authenticator와 Response Authenticator의 공간은 요청과 응답을 연관시키는 불투명 토큰을 담도록 재할당되고, Identifier는 기존 기능을 수행하지 않으며, Message-Authenticator는 전송되지 않습니다. User-Password, Tunnel-Password처럼 과거 MD5로 난독화되던 속성들은 TLS가 제공하는 기밀 채널 안에서 일반 인코딩으로 담깁니다.

여기서 일어나는 것은 책임의 이전이지, 보안의 소멸이 아닙니다. TLS는 피어를 정확히 검증해야 하고, 배포 정책은 그 피어가 RADIUS 요청을 보낼 권한이 있는지 판단해야 하며, 인증서·키·암호 스위트·라이브러리 업데이트도 관리되어야 합니다. 중복된 패킷 수준 암호학이 제거된 뒤에는, 전송 계층의 실패가 접속 시스템의 실패로 더 직접적으로 나타납니다.

비슷해 보여도 상태가 같다는 뜻은 아닙니다

RFC 9765는 의도적으로 많은 구식 형태를 유지합니다. 패킷 헤더 크기는 그대로이고, Code와 Length는 원래 의미를 지속하며, MD5 난독화를 사용하지 않던 속성들은 동일한 인코딩과 의미를 갖고, 포트도 RADIUS/TLS와 RADIUS/DTLS의 기존 할당을 그대로 사용합니다. 따라서 이 문서는 1.1을 완전히 새로운 프로토콜이 아니라 '전송 구성'으로 부릅니다.

그러나 1.0과 1.1은 같은 연결에서 혼용될 수 없습니다. 재할당된 필드, 달라진 검증 방식, Message-Authenticator의 처리 때문에 잘못된 버전의 대부분의 요청 또는 전부의 응답은 폐기됩니다. 보안 관점에서는 이 실패가 잘못된 데이터를 조용히 수락하는 것보다 낫습니다. 운영 관점에서는 여전히 사용자 인증 실패, 프록시 체인 단절, 설명하기 어려운 로그로 나타날 수 있습니다.

범위는 한 단계 더 좁혀집니다. CHAP, MS-CHAP 같은 자료는 불투명 속성으로 계속 전달될 수 있습니다. RADIUS/1.1이 제거하는 것은 이 홉이 RADIUS 패킷을 보호하고 난독화하기 위해 사용하는 MD5 메커니즘입니다. 이것이 실려 있는 모든 인증 방법을 자동으로 다시 쓰지 않으며, 백엔드에 더 이상 어떠한 구식 알고리즘도 없음을 증명하지도 못합니다.

진실은 '이 홉'을 단위로 합니다

RADIUS는 흔히 프록시와 로밍 체인을 통과합니다. 클라이언트–서버 연결마다 별개의 홉입니다. 접속 컨트롤러에서 로컬 프록시까지는 1.1을 협상할 수 있지만, 로컬 프록시에서 홈 서버까지는 여전히 역사적 RADIUS/TLS, UDP, 또는 다른 허용된 전송을 사용할 수 있습니다. 첫 홉의 녹색 지표가 하류를 대변하지는 못합니다.

ALPN의 가치는 바로 연결 수준의 증거를 만드는 데 있습니다.radius/1.1신호가 없으면 소프트웨어가 스스로 1.1에 들어갔다고 가정해서는 안 됩니다. RFC는 두 버전을 모두 지원하는 구현이 우선radius/1.0과radius/1.1을 함께 허용해 신구 피어 모두가 접속할 수 있게 하도록 권고합니다. 운영자는 양쪽 능력을 확인하고 성공적인 협상을 관찰한 뒤, 정책을 1.1만 수락하도록 바꾸면서 연결을 모니터링합니다. 장애가 발생하면 일시적으로 이중 모드로 되돌리고, 원인을 밝힌 후 다시 진행할 수 있습니다.

이 되돌릴 수 있는 경로는 '한 번에 전부 교체'를 피하지만, 장기적 정체의 가능성도 만들어 냅니다. 공급자가 '이미 지원한다'는 말은 코드에 기능이 존재함을 의미할 수도 있습니다. 조달 목록의 체크는 버전 요건 충족만 증명할 수 있습니다. 가끔 1.1이 선택되는 것도 정책이 1.0을 거부한다는 뜻이 아닙니다. 신뢰할 만한 마이그레이션 기록은 최소한 다섯 가지 상태를 구분해야 합니다.

상태검증 가능한 증거
지원됨양쪽 소프트웨어와 TLS 버전이 구현 능력을 갖추고 있음.
제공됨클라이언트 핸드셰이크가 실제로 해당 ALPN 이름을 전송함.
선택됨운영 연결이radius/1.1을 기록함.
강제됨1.0만 사용 가능한 피어가 정책에 의해 거부됨.
구식 경로 닫힘이번 범위 내에서 더 이상 역사적 구성과 미보호 전송을 허용하지 않음.

이 중 하나라도 빠지면, '마이그레이션 완료'는 계획 언어에 지나지 않습니다.

DeKok의 가치는 '혼자 구원한 것'이 아닙니다

InkBridge는 DeKok을 FreeRADIUS의 창시자이자 책임자로 소개하며, 이는 그가 표준과 실행 구현을 모두 넘나들 수 있는 이유를 설명하지만, 그를 RADIUS의 유일한 발명자로 쓰는 것은 아닙니다. 원래 RFC에는 자체 저자가 있었고, RADEXT와 IETF가 심의를 담당했으며, TLS 라이브러리 개발자가 협상 로직을 완성했고, 장비 공급자는 기능의 노출 방식을 결정했으며, 프록시 체인의 각 운영자가 구버전을 언제 닫을지 결정합니다. 어떤 한쪽도 단독으로 종단 간 마이그레이션의 성공을 선언할 수 없습니다.

더 배울 만한 것은 수정의 방식입니다. 오래된 절충을 공개적으로 인정하고, 여전히 전환 비용을 낮추는 패킷 구조는 유지하며, 보안 책임을 이미 그 책임을 맡고 있는 계층에 맡기고, 명확한 협상 결과로 관측 가능한 경계를 세우는 것입니다. 실험적(Experimental) 상태는 이것이 아직 널리 구현되고 검증되기를 기다리는 제안임을 독자에게 상기시킵니다. 저자의 명성이 실행 코드를 대신할 수 없고, 실행 코드가 운영 연결의 실제 상태를 대신할 수도 없습니다.

출처