Padding Oracle Attack은 암호문을 해독하기 위해 서버의 패딩 검증 응답을 악용하는 부채널 공격이다.
이 공격은 암호화 시스템의 구현상 허점을 이용한다. 서버가 복호화 과정에서 패딩의 유효성을 검증하고, 그 결과를 공격자가 관찰할 수 있을 때 발생한다. 공격자는 암호화 키를 전혀 알지 못하더라도, 서버의 응답 패턴만으로 암호문을 평문으로 복원할 수 있다.
최초 제안 (2002): Serge Vaudenay가 "Security Flaws Induced by CBC Padding - Applications to SSL, IPSEC, WTLS ..." 논문에서 처음으로 이 공격 기법을 제시했다. 그는 CBC 모드에서 패딩 검증 과정이 정보를 누출할 수 있음을 이론적으로 증명했다.
SSL/TLS 취약점:
웹 프레임워크 취약점:
실제 침해 사례: 2010년 ASP.NET 취약점 공개 당시, 수많은 웹사이트가 이 공격에 노출되었고, 일부는 실제로 침해당했다. 공격자들은 암호화된 쿠키를 조작하여 관리자 권한을 획득했다.
현재의 영향: 이 공격 기법의 발견 이후, 암호화 프로토콜 설계에 큰 영향을 미쳤다. 현대의 TLS 1.3에서는 CBC 모드 대신 AEAD(Authenticated Encryption with Associated Data) 방식을 사용하며, Encrypt-then-MAC 패턴이 권장된다. 그럼에도 불구하고, 레거시 시스템이나 부적절하게 구현된 암호화 시스템에서는 여전히 이 취약점이 발견되고 있다.
<aside>
블록 암호
데이터를 고정된 길이(예: 16바이트)의 블록으로 나누어 암호화하는 방식 (AES, DES 등).
</aside>
<aside>
운영 모드 (CBC Mode)
CBC는 블록 암호의 운영 모드 중 하나로, 각 블록의 암호화가 이전 블록에 의존하는 연쇄 구조를 가진다.
</aside>
정의: PKCS#7 패딩은 블록 암호화에서 데이터 길이를 블록 크기의 배수로 맞추기 위해 사용하는 표준 패딩 방식이다.
블록 암호는 고정된 크기의 블록 단위로만 데이터를 처리할 수 있다. 예를 들어 AES는 16바이트(128비트) 블록을 사용한다. 하지만 실제 평문의 길이는 항상 16의 배수가 아니므로 마지막 블록이 16바이트보다 짧을 수 있다. 이때 부족한 부분을 채우는 것이 바로 패딩이다.