Oracle Padding 실습을 따라해보자. 아래 경로 참조
아래 글에 의하면(그대로 똑같이 작성함)
1. Oracle Padding Attack 으로 Cipher text 의 Intermediary Value 값 (After block cipher decryption) 확인
2. Intermediary Value[N] XOR Cipher text[N -1] => Plain text[N]
[Oracle Padding 구조적 문제]
Oracle Padding Attack은 다음과 같은 CBC Mode 의 두가지 구조적인 문제 때문에 발생한다.
첫 번째 문제 : Plain text 의 마지막 블록에는 패딩이 존재한다.
- 블록 암호화의 특성상 블록 단위를 맞추어 주어야 한다.
- 블록 단위를 맞추기 위해 패딩을 삽입하며, 패딩과 데이터를 구분할 수 있게 패딩에는 패딩 길이를 표시한다.
- 만약 패딩 길이 값이 정확하지 않으면 에러가 발생한다.
[CBC Mode Decryption]
- Intermediary Value[N] (After block cipher decryption) XOR Cipher text[N-1] 값
(처음 단계에서는 Initial Vector 값) => plain text[N]
[Oracle Padding Attack]
어떻게 Intermediary Value 값을 구할 수 있을까?
1. Cipher text [N-1][15] 값 찾기
여기서 찾으려는 값은 기존의 ciphertext[N-1] 값 대신 패딩을 만족시키는 값으로 intermediary 값을 찾기 위한
임시 값이다. 우리는 ciphertext[N-1][15] 값을 임의로 넣어가며 공격하고, 서버에서 에러가 발생하지 않는 값을 찾아내면 된다. 에러가 발생하지 않았다는 것은 plain text의 마지막 블록의 패딩이 딱 들어 맞는다는 뜻이므로
맨 마지막 한 바이트(cipher text[N-1][15])만 256(0x00 ~ 0xFF) 무작위 공격을 수행하여 에러가 발생하지 않는
ciphertext[N-1][15] 값을 찾는다.
2. intermediary value[N][15] 값 찾기
찾은 ciphertext[N-1][15] 값을 plaintext[N][15] (0x01)과 XOR 하면 intermediary value[N][15] 값이 나온다.
3. ciphertext[N-1][14] 값 찾기 + intermediary value[N][14] 값 찾기
ciphertext[N-1][14] 값을 구하기 위해서는 패딩이 두개 들어가야 하므로, 먼저 위에서 구한 intermediary value[N][15] 값과 늘어난 패딩 길이의 값인 0x02 와 XOR 연산한 값을 ciphertext[N-1][15] 값에 넣어주고 ciphertext[N-1][15] 값에 넣어주고 ciphertext[N-1][14] 값에 무작위 공격을 수행해야 한다.
예를 들어 2번의 과정으로 intermediary value[N-1][15] 값에 0x35 (0x37 XOR 0x02) 값을 고정한 후 ciphertext[N-1][14] 값에 무작위 공격을 수행하여 에러가 발생하지 않는 ciphertext [N-1][14] 값을 찾는다.
이후 찾은 ciphertext[N-1][14] 값과 plaintext[N][14] (0x02) 값을 XOR 하면 intermediary value [N][14] 값이다.
4. 패딩 길이를 하나씩 늘려가며 3번 과정을 반복한다.
5. 4번 과정으로 얻은 intermediary value[N] 값과 원래의 cipher text[N-1] 값을 XOR 하여 Plain text[N] 값을 얻을 수 있다.
아... 이해가.... 계속 해봐야겠다...
https://sang-gamja.tistory.com/76
'암호학 & 알고리즘' 카테고리의 다른 글
HMAC란? (0) | 2021.07.27 |
---|---|
백준 분해합 C (0) | 2021.01.02 |
Poodle Attack 및 Oracle Padding 건 (0) | 2020.06.24 |