요약

  • RFC 2406는 ESP 보호 영역을 필드별로 구분했다. 전송 모드에서는 원본 IP 헤더가 ESP 바깥에 남았고, 터널 모드에서는 내부 데이터그램이 암호화되었지만 새로운 외부 헤더는 여전히 노출되었으며, SPI와 시퀀스 번호는 두 모드에서 모두 평문으로 남았다.
  • 기밀성, 인증, 안티리플레이는 하나의 서비스가 아니었다. 인증은 선택 사항이었고, 암호화는 NULL일 수 있었으며, 수신자는 의무적인 시퀀스 번호 검사를 무시할 수도 있었다. 따라서 페이로드가 보호되었다는 사실은 숨겨진 트래픽 관계, 실행된 리플레이 검사, 또는 이후의 애플리케이션 결과를 증명하지 않는다.

ESP 패킷을 바깥에서 바라보면, 상위 계층 헤더와 데이터는 읽을 수 없을지 몰라도 라우터는 여전히 IP 목적지를 필요로 한다. 수신자는 보안 결합(Security Association)을 찾기 위해 여전히 SPI를 필요로 한다. 시퀀스 값은 여전히 4옥텟을 차지한다. 관찰자는 여전히 패킷을 세고, 크기를 측정하고, 시간축상에 배치할 수 있다. 내용은 암호학적 경계를 넘었지만, 사건 전체가 사라진 것은 아니다.

이 구분은 1998년 11월에 발표된 IP 캡슐화 보안 페이로드의 두 번째 주요 사양인 RFC 2406에 그대로 반영되어 있다. 제목은 'ESP는 암호화된 IP'라는 지름길을 유도했지만, 문서는 기밀성, 데이터 출처 인증, 비연결형 무결성, 안티리플레이, 그리고 제한된 트래픽 흐름 기밀성이 섞인 서비스 조합을 설명했다. 이 조합은 선택된 보안 결합과 구현이 네트워크에서 어디에 위치하는지에 따라 달라졌다.

역사적 변화가 중요하다. 1995년의 RFC 1827은 SPI를 변환 기법에 독립적인 유일한 의무 필드로 만들었다. 별도의 변환 문서들이 이 껍데기에 알고리즘과 추가 필드를 채워 넣었다. RFC 2406은 이러한 변환 기법들의 조합적 팽창 때문에 더 완전한 기본 형식이 필요하다고 판단했다. 시퀀스 번호, 패딩, 다음 헤더, 선택적 인증 데이터, 그리고 그 처리 규칙이 공통 ESP 사양으로 이동했다.

그 결과는 '보안'이라고 표시된 단일 스위치가 아니었다. 기밀성은 ESP 인증 없이 선택될 수 있었고, 인증은 NULL 암호화 알고리즘과 함께 선택될 수 있었다. 둘 중 적어도 하나는 존재해야 했지만, 두 가지가 제공하는 증거는 서로 달랐다. 안티리플레이는 인증이 선택된 경우에만 사용할 수 있었고, 그 사용 여부는 수신자의 몫이었다.

최상위 패킷 구조는 이러한 경계를 그대로 드러냈다. 먼저 프로토콜 50을 식별하는 외부 IPv4 또는 IPv6 헤더가 왔다. 그 다음 ESP 헤더가 32비트 SPI와 32비트 시퀀스 번호를 담았다. 그 뒤에 페이로드 데이터, 패딩, 패드 길이, 다음 헤더가 이어졌다. 선택적 인증 데이터가 마지막에 위치했다.

일반적인 알고리즘 분리 방식의 경우, 암호화는 페이로드 데이터, 패딩, 패드 길이, 다음 헤더를 커버했다. 외부 IP 헤더, SPI, 시퀀스 번호, 인증 데이터는 커버하지 않았다. 페이로드 데이터 시작 부분에 명시적 초기화 벡터가 나타나는 경우, RFC는 엔지니어들이 흔히 이를 암호문의 일부로 부르지만 그 자체는 보통 암호화되지 않는다고 경고했다.

인증은 서로 다른 범위를 그렸다. 선택된 경우 무결성 검사 값(ICV)은 SPI, 시퀀스 번호, 페이로드 데이터, 패딩, 패드 길이, 다음 헤더를 커버했지만, ICV를 담는 인증 데이터 자체는 제외했다. 암호화가 먼저 실행되므로, 인증 계산은 보호된 페이로드와 트레일러의 암호화된 형태를 보게 된다. 외부 IP 헤더는 여전히 ESP의 ICV 바깥에 놓여 있었다.

전송 모드는 이 배제를 특히 명확하게 만들었다. ESP는 원본 IP 헤더 뒤를 따르며 다음 계층의 자료를 보호했다. 원본 헤더의 출발지와 목적지는 네트워크에 그대로 노출되었다. IPv6의 경우 ESP 앞에 놓인 확장 헤더 역시 보호 밖에 남았고, ESP 뒤에 배치된 목적지 옵션은 보호 영역 안에 들어갈 수 있었다. 헤더 순서 자체가 보안 서술의 일부였다.

터널 모드는 경계를 바깥으로 밀어냈지만 지우지는 않았다. ESP는 내부 출발지와 목적지를 포함한 원본 IP 데이터그램 전체를 캡슐화했다. 그 다음 새로운 외부 IP 헤더가 터널 종단점을 지시했다. 관찰자는 이제 최종 통신 상대를 볼 수 없을 수 있지만, 게이트웨이, 패킷 간격, 길이는 여전히 볼 수 있었다. 터널은 한 관계를 숨기면서 다른 관계를 노출했다.

따라서 RFC 2406은 트래픽 흐름 기밀성을 '제한적'이라고 불렀다. 이를 위해서는 터널 모드가 필요했고, 여러 가입자 흐름을 집계할 수 있는 보안 게이트웨이에서 가장 잘 작동했다. 추가 패딩은 일부 페이로드 길이를 가릴 수 있었지만 대역폭 비용이 따랐다. 터널 모드도 패딩도 그 자체로는 시간, 볼륨, 외부 종단점 쌍을 숨기지 못했다. 트래픽 분석은 페이로드 읽기와 별개의 문제였다.

시퀀스 번호는 또 하나의 흔한 과장의 원천이었다. 발신자는 모든 패킷에 이 값을 포함하고 증가시켜야 했다. 그러나 수신자는 보안 결합별로 안티리플레이를 켜거나 끌 수 있었다. 검사가 비활성화된 경우에도 그 필드는 계속 전송되었다. 필드의 존재는 카운터 값이 전송되었다는 것만 증명할 뿐, 슬라이딩 윈도우가 중복을 거부했다는 것을 증명하지 않았다.

안티리플레이가 활성화되면 인증도 함께 활성화되어야 했다. 그렇지 않으면 공격자가 카운터를 변조할 수 있었다. 수신자는 예비 윈도우 검사를 수행할 수 있었지만, ICV 검증이 성공하기 전까지는 윈도우를 진행할 수 없었다. 따라서 의미 있는 수신 확인은 결합된 결과였다. 올바른 보안 결합, 인증된 카운터, 수신자 측 판정. 패킷 캡처만으로는 그 사슬의 일부만 보여줄 수 있었다.

처리 순서도 경계를 더했다. 출력에서, 먼저 다른 IPsec 단계가 ESP를 요구하는 보안 결합을 선택했다. RFC 2406은 그 정책 결정을 RFC 2401에 위임했다. 이후 ESP가 캡슐화, 패딩, 암호화를 수행했고, 인증이 선택된 경우 ICV를 계산했으며, ESP 처리 후에 단편화가 이루어졌다. 입력에서는 재조립이 먼저였다. ESP에 직접 도달한 단편은 감사 가능한 이벤트로 폐기해야 했다.

수신자는 목적지 주소, ESP, SPI를 사용해 단방향 보안 결합을 찾았다. 그 보안 결합은 시퀀스 번호와 인증 데이터 검사 여부, 사용할 알고리즘과 키를 지시했다. 유효한 보안 결합이 없으면 폐기했다. ICV가 일치하면 데이터그램은 ESP 단계에서 유효하다고 판정되었다. 이어서 복호화가 다음 프로토콜 또는 내부 데이터그램을 재구성했다.

그조차 애플리케이션의 수용을 보장하지 않았다. RFC 2406은 잘못된 보안 결합의 비정상 출력이나 손상된 암호화가, 인증이 없는 경우 IPsec 검출을 우회하여 이후 프로토콜 처리에 맡겨질 수 있다고 언급했다. 인증과 복호화가 병렬로 실행되는 경우, 복호화된 자료가 해제되기 전에 검증이 완료되어야 했다. ESP는 전환 과정을 보호할 수 있었지만, 수신 시스템이 그 결과로 무엇을 할지 결정하지는 않았다.

감사 역시 조건부였다. 감사를 지원하는 시스템은 ESP의 참여를 허용해야 했으며, RFC는 누락된 보안 결합, 단편 오류, 시퀀스 오버플로, ICV 실패 같은 이벤트를 열거했다. 그러나 모든 시스템이 감사를 구현할 의무는 없었고, 세분화 수준도 대체로 현지 결정에 따랐다. 사양 속 '감사 가능'이라는 표현은 운영자가 유용한 로그를 보관하고 있다는 증거가 아니었다.

2005년 RFC 4303이 RFC 2406을 대체했다. 확장 시퀀스 번호, 결합 모드 알고리즘, 명시적 트래픽 흐름 기밀성 패딩을 추가하면서도, 보이는 SPI와 시퀀스 필드, 그리고 전송 모드·터널 모드·기밀성·무결성·수신자가 통제하는 리플레이 검사 사이의 구분은 유지했다. 따라서 RFC 2406은 현재의 알고리즘 지침이나 현재 배치의 증거가 아니라 역사적 설계 단계로 읽어야 한다.

Lu Heng이 상징적 라벨과 실제 작동 효과를 분리하라고 강조한 점은 오래된 패킷 다이어그램이 여전히 중요한 이유를 설명해 준다. '암호화됨'은 범주 이름이다. 실제 운영적 주장에는 선택된 모드, 서비스 조합, 보안 결합, 알고리즘, 수신자 검사, 외부 흐름 노출, 하류 처리 결과가 필요하다. 사양은 그 선을 그렸고, 이후의 축약 표현이 흔히 그 선을 지워버렸다.

출처