AES-128로 암호화된 HLS 스트림은 왜 바로 저장이 안 될까요?
많은 스트리밍 사이트는 HLS 세그먼트를 AES-128로 암호화합니다. 플레이리스트에는 EXT-X-KEY 태그가 붙어 키의 위치(URI)와 초기화 벡터(IV), 암호화 방식이 지정됩니다. 문제는 세그먼트가 암호문 바이트라서, 목록대로 내려받아 이어 붙여도 재생할 수 없는 파일이 된다는 점입니다.
- 키 접근 제한: 키 URI 요청에는 로그인 세션 쿠키와 Referer 헤더가 필요합니다.
- IV 처리: 세그먼트별 초기화 벡터를 적용하지 않으면 첫 블록부터 깨집니다.
- 수동 추출의 번거로움: 개발자 도구에서 키와 IV를 직접 찾아 별도 툴에 입력하는 방식은 재현이 어렵습니다.
AES-128 HLS 암호화 명세
| 항목 | 값 / 설명 | Paca 처리 |
|---|---|---|
| 암호화 방식 | METHOD=AES-128 | 자동 인식 |
| 키 위치 | URI= (EXT-X-KEY) | 세션 키로 자동 요청 |
| 초기화 벡터 | IV= (미지정 시 미디어 시퀀스) | 세그먼트별 자동 적용 |
| 키 길이 | 16바이트 (128비트) | 메모리 내 복호화 |
| 세그먼트 형식 | .ts / .m4s | 병렬 수신 후 복호화 |
| 출력 컨테이너 | (복호화된 원본 트랙) | ffmpeg 무손실 MP4 |
Paca 내장 브라우저에서 영상 재생
Paca 주소창에 영상 페이지 주소를 입력하고 평소처럼 접속합니다. 로그인 권한이 필요한 강의·멤버십 영상이라면 브라우저 안에서 로그인해 세션을 유지하세요. 복호화 키 요청도 이 세션을 그대로 사용합니다.
EXT-X-KEY 암호화 키 자동 획득
재생이 시작되면 스니퍼가 m3u8 플레이리스트의 EXT-X-KEY 태그를 읽어 암호화 방식(AES-128), 키 URI, IV를 파악합니다. 이어서 탭의 쿠키와 Referer로 키를 내려받아 메모리에 보관합니다.
세그먼트 수신 및 실시간 복호화
암호화된 세그먼트를 최대 16스레드로 동시에 내려받는 즉시 AES-128로 복호화합니다. 모두 수신하면 내장 ffmpeg가 재인코딩 없이 단일 MP4 컨테이너로 결합해 저장합니다.
자주 묻는 질문 (FAQ)
아닙니다. AES-128은 세그먼트 바이트를 암호화·복호화하는 방식이라 원본 화질이 그대로 복원됩니다. Paca는 재인코딩 없이 무손실 리먹싱만 수행합니다.
키 URI가 일회성 토큰인 경우 만료 전에 요청해야 합니다. Paca는 재생 세션에서 감지한 즉시 키를 확보하므로 만료 문제를 최소화합니다. 만료 시 페이지를 새로고침하면 다시 감지됩니다.
아닙니다. Paca는 AES-128 세그먼트 암호화만 다루며, Widevine·PlayReady 같은 DRM 보호 콘텐츠는 지원하지 않습니다. DRM 우회는 제공하지 않습니다.
관련 가이드
지금 Paca로 암호화 스트림을 저장하세요
Windows 10, 11 및 Android 컴패니언 앱을 지원합니다.