콘텐츠로 이동

WPA3-Personal과 SAE

규격 · 개정판

802.11-2024 Clause 12 (SAE: Simultaneous Authentication of Equals, Dragonfly 키 교환, H2E, anti-clogging) · RFC 7664 (Dragonfly) · Wi-Fi Alliance WPA3 Specification (SAE 필수 구성, H2E, SAE-PK, Transition Disable)

한눈에 보기

WPA2-PSK의 근본 약점은 암호에서 키를 그대로 계산한다는 것입니다. 핸드셰이크 한 번만 엿들으면, 공격자는 집에서 느긋하게 암호 후보를 하나씩 넣어 맞는지 확인할 수 있습니다.

SAE는 암호를 **"비밀 타원곡선 점"**으로 바꾼 뒤 Diffie-Hellman과 비슷한 교환을 합니다. 공중에 오가는 값으로는 암호를 맞춰 볼 수 없어서,

  • 오프라인 사전 공격 불가: 암호 하나를 시험하려면 AP와 실제로 한 번 교환해야 함(온라인 시도) → AP가 횟수를 제한할 수 있음
  • 순방향 비밀성: 나중에 암호가 유출돼도 과거에 캡처한 트래픽은 복호 불가
  • 대등한 양쪽: AP와 단말이 같은 절차를 동시에 수행(그래서 "Equals")

SAE는 802.11 인증 단계(Authentication 프레임)에서 일어나고, 그 결과 PMK가 생기면 이후는 WPA2와 같은 4-Way Handshake입니다.

SAE 교환

sequenceDiagram
    participant S as STA
    participant A as AP
    Note over S,A: 같은 암호 → 같은 비밀 점 PWE (H2E 또는 hunting-and-pecking)
    S->>A: Auth (SAE Commit): 그룹, scalar, element
    A->>S: Auth (SAE Commit): 그룹, scalar, element
    Note over S,A: 양쪽이 공유 비밀 K 계산 → KCK, PMK 유도
    S->>A: Auth (SAE Confirm): confirm = HMAC(KCK, …)
    A->>S: Auth (SAE Confirm)
    Note over S,A: PMK 확정 → 결합 → 4-Way Handshake
단계 내용
PWE 유도 암호(+ SSID 또는 주소)로 곡선 위의 비밀 점 PWE를 만듦
Commit 무작위 rand, mask로 scalar = (rand + mask) mod r, element = −mask·PWE를 보냄
공유 비밀 K = rand·(scalar_peer·PWE + element_peer) — 양쪽이 같은 점을 얻음
Confirm K에서 유도한 KCK로 교환 내용 전체에 HMAC → 서로 같은 암호였는지 확인
결과 PMK와 PMKID (PMK 캐싱으로 재연결 시 SAE 생략 가능)

그룹과 PWE 유도 방식

항목 값
필수 그룹 19 (NIST P-256 타원곡선)
선택 그룹 20 (P-384), 21 (P-521) 등
PWE: hunting-and-pecking 암호와 MAC 주소로 해시를 반복해 곡선 위 점이 나올 때까지 시도 — 반복 횟수가 암호마다 달라 타이밍 부채널 위험
PWE: H2E (Hash-to-Element) 암호와 SSID로 한 번에 점을 계산 (상수 시간). WPA3에서 권장, 6 GHz에서는 필수
Anti-clogging AP가 Commit 폭주를 받으면 토큰을 요구해(상태 코드 76) 계산량 DoS를 완화

SAE-PK

카페처럼 암호를 모두가 아는 망에서는 SAE도 "가짜 AP"를 막지 못합니다. 같은 암호로 누구나 AP를 띄울 수 있기 때문입니다. Wi-Fi Alliance의 SAE-PK는 암호 문자열 자체에 AP 공개 키의 지문을 넣어(예: a2bc-de3f-ghi4처럼 긴 형식), 단말이 AP의 서명을 확인하게 합니다. 암호를 아는 사람도 진짜 AP의 개인 키 없이는 AP를 흉내 낼 수 없습니다.

전문가 노트 — Dragonblood 이후의 구현 요구

부채널. hunting-and-pecking은 "곡선 위 점이 나올 때까지 반복"하므로 암호에 따라 반복 횟수가 다르고, 이것이 타이밍·캐시 접근 패턴으로 새어 나가 오프라인 분할 공격이 가능했습니다(2019 Dragonblood). 대응은 ① 고정 횟수(최소 40회) 반복과 상수 시간 연산, ② H2E로 전환입니다. H2E는 SSID를 솔트로 써서 PT(Password Token)를 미리 계산하고, 매 교환에서 MAC 주소로 PWE를 빠르게 얻습니다.

H2E 신호. AP는 비콘의 RSN Extension 요소(RSNXE)에 SAE H2E 비트를 넣고, Supported Rates에 "SAE H2E only" BSS 멤버십 선택자를 넣어 H2E만 받는다는 것을 알립니다. Commit 메시지의 Status Code 126(SAE_HASH_TO_ELEMENT)이 H2E를 뜻합니다.

SAE-EXT-KEY (AKM 24). 그룹 크기에 맞는 해시(P-384면 SHA-384)를 쓰고 MLO와 GCMP-256 조합에 맞춘 AKM입니다. Wi-Fi 7 MLO 연결에서 중요해졌습니다.

온라인 공격 제한. SAE는 온라인 시도만 허용하므로, AP는 같은 MAC에서 연속 실패 시 지연을 두는 식의 제한을 구현해야 의미가 있습니다. 단말이 MAC 주소를 무작위로 바꾸면 이 제한이 약해지는 점이 현실적 한계입니다.