오늘 암호화된 터널을 녹음하고, 내년에 서버의 장기 개인 키를 훔친 뒤 그 녹음을 복호화해 보라. 전방 비밀성이란 훔친 키만으로는 충분하지 않다는 성질이다. 이것은 녹음된 세션과 특정 비밀에 대한 진술이지, 터널이 안전했다는 일반적인 약속이 아니다. 범위를 정확히 잡는 것이 이 용어를 유용하게 만든다.

질문은 녹음에 관한 것이지 실시간 세션에 관한 것이 아니다

장기 키는 끝점을 식별하고 핸드셰이크에 서명한다. 세션 키는 실제 트래픽을 암호화하며, 전방 비밀성 설계에서는 양쪽이 생성하고 나중에 폐기하는 새로운 키 교환 자료에서 유도된다. 장기 키만 가진 공격자는 그 폐기된 값을 재구성할 수 없다. 실시간 세션 상태를 가진 공격자는 여전히 가능하며, 그래서 이 보장은 현재가 아니라 과거에 관한 것이다.

이 주장은 조건부이며, 일시적 비밀이 실제로 파기되었고 프로토콜이 당신이 생각하는 그 프로토콜일 때만 성립한다. 혼합 배포는 한 터널에서는 만족시키고 다른 터널에서는 실패할 수 있다.

하나의 비밀이 나머지를 재구성해서는 안 된다

마케팅 페이지가 아니라 협상된 모드를 확인하라. 핸드셰이크 출력은 키 교환과 프로토콜 버전을 알려 준다.

openssl s_client -connect vpn.example.com:443 -tls1_3 -brief
swanctl --list-sas

s_client 요약은 TLS 버전과 키 교환 그룹을 보여 주며, 일시적 그룹은 전방 비밀성 키 합의의 눈에 보이는 표시다. swanctl 목록은 IKE 및 CHILD 연관을 키 갱신 타이머와 함께 보여 주므로 배포가 일정에 따라 키를 갱신하는지 알 수 있다. 정적 RSA 키 교환이나 오래된 호환 모드는 암호 이름과 무관하게 이 성질을 잃는다. 공급업체가 광고한 모드가 아니라 관찰한 모드를 기록하라.

키 갱신이 자동으로 전방 비밀성은 아니다

터널이 키를 얼마나 자주 갱신하는지는 각 키가 어떻게 유도되는지와 별개의 문제다. 장기 비밀에서 키를 다시 생성하는 설계는 나중의 침해가 그 모두를 재구성하기 때문에 매분 갱신해도 시험에 여전히 실패한다. 반대로 갱신이 드문 프로토콜도 각 교환이 독립적이라면 전방 비밀성을 유지할 수 있다. 유도를 읽고 간격을 읽지 말며, 짧은 재연결 타이머를 암호학적 보장과 혼동하지 마라.

같은 혼동은 암호 이름에서도 나타나는데, 현대의 암호는 그 키가 어떻게 도착했는지에 대해 아무것도 말하지 않는다.

보장 이후에도 보이는 것

전방 비밀성은 녹음된 세션의 평문을 미래의 키 침해로부터 보호하며, 침해된 끝점에서 실시간 트래픽을 읽는 공격자에 대해서는 아무것도 하지 않는다. 녹음에서 목적지 주소, 시간, 양을 제거하지 않으며, 운영자가 연결 로그를 얼마나 오래 보관하는지도 제한하지 않는다. 침해된 클라이언트를 신뢰할 수 있는 것으로 바꾸지도 않는다, 왜냐하면 공격자는 이미 내용이 평문으로 존재하는 자리에 앉아 있기 때문이다.

공급자가 전방 비밀성을 주장하면 어떤 장기 비밀이 훔쳐진 것으로 가정되는지, 어떤 세션 비밀이 접근 불가능한 채로 남는지 물어라. 이 두 질문에 명확한 답이 있다면 그 주장은 의미가 있다.

관련 글