Chapter 10

보안: WEP에서 WPA3까지

전파는 벽을 넘어 누구에게나 닿는다. 그래서 와이파이 보안은 처음부터 “주변 모두가 엿듣는다”고 가정하고 설계한다. 카페 벽에 붙은 비밀번호를 아는 손님끼리는 서로의 통신을 볼 수 있을까? 공유기 설정의 “WPA2/WPA3 혼합”은 무엇을 뜻할까? 이 장에서는 비밀번호가 실제 암호 키가 되는 과정을 직접 계산해 보고, 세대마다 무엇이 나아졌는지, 지금 어떻게 설정해야 하는지를 정리한다.

짧은 역사

방식암호인증·키지금
WEP (1997)RC4모두가 같은 고정 키 + 24비트 IV설계 결함으로 이미 깨졌다. 쓰지 않는다
WPA (2003)TKIPPSK / 802.1XWEP 하드웨어를 살리려던 임시 방편. 폐기
WPA2 (2004)CCMP (AES-128)PSK / 802.1X + 4-way 핸드셰이크널리 쓰인다. Personal은 비밀번호 강도에 기대는 한계가 있다
WPA3 (2018)CCMP-128, GCMP-256(192비트 모드)SAE / 802.1X, PMF 필수6 GHz(Wi-Fi 6E·7)에서는 필수
Enhanced OpenCCMPOWE: 비밀번호 없이 키 합의공개 와이파이의 엿듣기 방지

WEP의 교훈은 두 가지였다. 모두가 같은 키를 오래 쓰면 안 되고, 암호화와 별개로 변조를 확인하는 장치가 필요하다는 것. WPA2는 연결마다 새 키를 만들고(4-way 핸드셰이크), 프레임마다 무결성 검사값(MIC)과 되풀이 방지 번호(PN)를 붙인다.

열쇠 사슬: 비밀번호 → PMK → PTK

WPA2-Personal에서 비밀번호는 그대로 쓰이지 않는다. 세 단계를 거친다.

  1. PMK(Pairwise Master Key, 32바이트) = PBKDF2-HMAC-SHA1(비밀번호, SSID, 4096회). SSID를 소금(salt)으로 섞어 같은 비밀번호라도 네트워크마다 다른 PMK가 나오고, 4096번 되풀이해 계산을 일부러 무겁게 했다. 같은 비밀번호를 아는 기기는 모두 같은 PMK를 갖는다.
  2. PTK(Pairwise Transient Key) = PRF(PMK, “Pairwise key expansion”, 두 MAC 주소 + 두 난수). 연결할 때마다 AP와 단말이 새 난수(ANonce, SNonce)를 내므로 PTK는 연결마다, 단말마다 다르다. PTK는 셋으로 나뉜다: 메시지 무결성을 확인하는 KCK, 그룹 키를 감싸 보내는 KEK, 실제 데이터를 암호화하는 TK.
  3. GTK(Group Temporal Key): 방송·멀티캐스트 프레임용 키. AP가 정해 KEK로 감싸 각 단말에 나눠 준다.
CALCULATOR

비밀번호에서 PTK까지 직접 계산하기

연결 (난수가 바뀐다)
PMK 계산(이 기기)—
HMAC-SHA1 호출—
PTK 길이(CCMP)48 B
기본값(SSID “IEEE”, 비밀번호 “password”)의 PMK는 hostapd 시험 벡터 f42c6fc5…a12e와 같다. 해볼 것: ① 비밀번호 한 글자만 바꿔도 PMK 전체가 바뀐다. ② SSID만 바꿔도 PMK가 바뀐다. ③ “다시 연결”을 누르면 PMK는 그대로인데 PTK(특히 데이터 키 TK)가 완전히 바뀐다. 계산은 모두 이 브라우저 안에서만 하며 어디에도 보내지 않는다. MAC 주소와 난수는 예시 값이다.

PMK: hostapd src/crypto/sha1-pbkdf2.c pbkdf2_sha1(passphrase, ssid, 4096, 32), 시험 벡터 src/crypto/crypto_module_tests.c의 passphrase_tests · PTK: src/common/wpa_common.c의 wpa_pmk_to_ptk()(주석: 802.11i-2004 8.5.1.2) · PRF: src/crypto/sha1-prf.c의 sha1_prf()(라벨 + 0x00 + 데이터 + 1바이트 카운터), 시험 벡터 prf0~prf2

4-way 핸드셰이크

연결 직후 AP와 단말은 EAPOL-Key 프레임 네 개를 주고받는다. 목적은 셋이다. 서로 같은 PMK를 가졌음을 PMK를 보내지 않고 증명하기, 이번 연결의 PTK를 만들기, GTK를 안전하게 건네기.

INTERACTIVE

메시지 넷 따라가기

AP가 아는 것—
단말이 아는 것—
상태—
PMK와 PTK는 공중에 한 번도 나가지 않는다. 오가는 것은 난수와, PTK의 KCK로 계산한 MIC뿐이다. 비밀번호가 틀리면 단말이 만든 PTK가 달라 메시지 2의 MIC가 맞지 않고, AP는 거기서 멈춘다(사용자 화면에는 “인증 문제” 또는 “비밀번호 오류”로 보인다).

여기에 WPA2-Personal의 구조적 한계가 있다. 같은 비밀번호를 아는 사람은 모두 같은 PMK를 가지므로, 원리상 남의 핸드셰이크를 지켜본 사람이 그 연결의 PTK를 다시 계산할 수 있다. 그리고 비밀번호가 짧거나 흔하면 PMK를 지키는 4096번의 계산만으로는 충분하지 않다. 그래서 WPA2-Personal에서는 길고 예측하기 어려운 비밀번호(무작위 단어 여러 개 등)가 사실상 유일한 방어선이고, 근본적인 해결은 WPA3-SAE다.

열쇠를 보여 주지 않고 같은 열쇠임을 증명하기

두 사람이 각자 같은 열쇠를 가졌는지 확인하고 싶다. 열쇠를 꺼내 보여 주면 엿보는 사람도 본다. 대신 한 사람이 “이 상자를 잠가 보라”며 새 상자(난수)를 주고, 상대가 잠가서 돌려주면(MIC) 같은 열쇠임을 알 수 있다. 상자는 매번 새것이라 지난번 상자를 베껴 와도 소용없다.

프레임 암호화: CCMP

PTK의 TK로 데이터 프레임 몸통을 AES로 암호화한다(CCMP). 7장의 해부 도구에서 Protected 비트를 켰을 때 본 구조다.

2017년 공개된 KRACK은 이 PN과 키 설치 순서의 허점(같은 키를 다시 설치하면 PN이 처음으로 돌아가는 문제)을 노렸고, 표준 해석 보완과 소프트웨어 업데이트로 고쳐졌다. 오래된 기기를 업데이트해야 하는 이유 중 하나다.

CCMP 머리말·MIC 길이: Linux include/linux/ieee80211.h의 IEEE80211_CCMP_HDR_LEN = 8, IEEE80211_CCMP_MIC_LEN = 8, 256비트 변형 IEEE80211_CCMP_256_MIC_LEN = 16

WPA3: SAE, PMF, 그리고 OWE

SAE(Simultaneous Authentication of Equals)는 9장에서 본 인증 프레임 네 개(Commit 둘, Confirm 둘)로 비밀번호를 증명하면서 동시에 새 비밀 값을 합의하는 방식이다(Dragonfly 키 교환, 타원곡선 위 계산). 달라지는 점은 셋이다.

PMF(Protected Management Frames, 802.11w)는 연결 해제(Deauth·Disassoc)와 일부 액션 프레임에 무결성 보호를 씌운다. PMF가 없으면 이런 관리 프레임은 누가 보냈는지 확인할 수 없어서, 가짜 “연결 끊기” 프레임 하나로 단말을 떨어뜨릴 수 있었다. PMF가 켜진 연결에서는 보호되지 않은 연결 해제 프레임을 무시한다. 7장 비컨의 RSN 요소에 “관리 프레임 보호 필수”로 보인 비트가 이것이다.

OWE(Opportunistic Wireless Encryption, 상품명 Enhanced Open)는 비밀번호 없는 공개 와이파이를 위한 것이다. 연결할 때 Diffie-Hellman으로 단말마다 다른 키를 합의해, 옆 손님이 내 통신을 엿볼 수 없게 한다. 다만 상대가 진짜 그 카페 AP인지는 확인하지 않는다(신원 확인 없음).

예측해 보기

카페 비밀번호를 아는 손님 둘이 같은 WPA2-Personal 망에 있다. WPA3-Personal(SAE)로 바꾸면 무엇이 달라질까?

두 손님이 가진 PMK가 같은지 생각해 보자.

WPA2-Personal은 PMK가 비밀번호에서 바로 나와 모두가 같다. SAE는 각 연결이 따로 비밀 값을 합의한다.

어떻게 설정할까

보안 설정은 “가장 강한 것”보다 “내 기기들이 모두 붙으면서 가장 강한 것”을 고르는 일이다. 오래된 IoT 기기가 WPA3를 모르면 전환 모드(WPA2/WPA3 혼합)를 쓰는데, 이때는 WPA3를 아는 기기만 SAE로 붙고 나머지는 WPA2로 붙는다. 같은 비밀번호를 두 방식이 함께 쓰므로 비밀번호는 여전히 길어야 한다.

ADVISOR

우리 망에 맞는 설정 고르기

어디의 망인가
가장 오래된 기기
일반적인 권장을 정리한 것이다. 회사 망은 보안 담당자의 정책이 우선이다. 6 GHz에서는 WPA3(SAE, OWE, Enterprise)와 PMF만 허용되고 WPA2·개방은 쓸 수 없다.

설정 항목: hostapd hostapd.conf의 wpa_key_mgmt(WPA-PSK, SAE, WPA-EAP, OWE), ieee80211w(0 끔 / 1 선택 / 2 필수), sae_require_mfp, transition_disable

핵심 정리

  1. WEP은 깨졌고 TKIP는 폐기됐다. 지금은 WPA2(CCMP)와 WPA3.
  2. WPA2-Personal: PMK = PBKDF2-HMAC-SHA1(비밀번호, SSID, 4096회, 32바이트). 비밀번호를 아는 모든 기기가 같은 PMK.
  3. 4-way 핸드셰이크는 PMK를 보내지 않고 난수와 MIC만으로 서로를 확인하며, 연결마다 새 PTK(KCK·KEK·TK)를 만들고 GTK를 건넨다.
  4. CCMP는 AES 암호화 + MIC(변조 검사) + PN(재전송 방지).
  5. WPA3-SAE는 엿들은 내용으로 비밀번호를 검증할 수 없게 하고, 연결마다 다른 PMK를 만든다. PMF는 가짜 연결 해제를 막고, OWE는 공개 망의 엿듣기를 막는다.
  6. 권장: 가능하면 WPA3, 오래된 기기가 있으면 전환 모드 + 긴 비밀번호, 회사는 802.1X, 공개 망은 OWE.

확인 퀴즈

WPA2-Personal에서 PMK를 만들 때 비밀번호와 함께 넣는 것은?

PBKDF2의 소금으로 SSID를 쓴다. 그래서 SSID만 바꿔도 PMK가 바뀐다.

4-way 핸드셰이크에서 공중으로 나가지 않는 것은?

양쪽이 각자 계산하고, MIC로 같은 값을 가졌음을 확인한다.

CCMP의 패킷 번호(PN)가 막는 것은?

받는 쪽은 이미 본 PN 이하의 프레임을 버린다.

PMF(802.11w)가 켜진 연결에서 보호되지 않은 Deauth 프레임을 받으면?

PMF는 연결 해제 같은 관리 프레임에 무결성 보호를 씌운다.