'암호학 & 알고리즘'에 해당되는 글 4건

HMAC란?

암호학 & 알고리즘 2021. 7. 27. 14:34

https://sugerent.tistory.com/705

 

HMAC란?

Ref. wan-blog.tistory.com/24 HMAC란? 해싱 기법을 적용하여 메시지의 위변조를 방지하는 기법을 HMAC (Hash-based Message Authentication) 이라고 한다. 좀더 상세히 설명하면 Sender와 Recipient는 서로 API를..

sugerent.tistory.com

 

 

'암호학 & 알고리즘' 카테고리의 다른 글

백준 분해합 C  (0) 2021.01.02
Poodle Attack 및 Oracle Padding 건  (0) 2020.06.24
Oracle Padding Attack  (0) 2019.11.27
블로그 이미지

wtdsoul

,

 

 

travelerfootprint.tistory.com/71

 

백준 알고리즘 2231번: 분해합 C언어

문제 출처: https://www.acmicpc.net/problem/2231 2231번: 분해합 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N

travelerfootprint.tistory.com

 

 

'암호학 & 알고리즘' 카테고리의 다른 글

HMAC란?  (0) 2021.07.27
Poodle Attack 및 Oracle Padding 건  (0) 2020.06.24
Oracle Padding Attack  (0) 2019.11.27
블로그 이미지

wtdsoul

,

https://shayete.tistory.com/entry/Poodle-padding-oracle-on-downgraded-legacy-encryption

 

Poodle [padding oracle on downgraded legacy encryption]

이걸 전주에서 발표한 지 2달쯤 지난 것 같은데 그 후로 너무 바빠서 지금 포스팅을 하게 되네요.  10월에 잠깐 이슈가 되었던 푸들어택은 POODLE(Padding Oracle On Downgraded Legacy Encryption)의 약자로  ..

shayete.tistory.com

OpenSSL 관련 Poodle 공격 관련해서 공부를 다시 하는 중 입니다.

 

https://vulmon.tistory.com/4

 

CBC(Cipher Block Chaining) Padding oracle Attack

1. 개요 - Oracle? DB가 아닌 "응답에 대한 판독"의 의미 - Padding? (PKCS5 - 8 bytes/block , PKCS7 - 16bytes/block)  평문 데이터를 블록 암호화 하기 위해 고정된 크기의 블록으로 처리를 함에 있어 평문..

vulmon.tistory.com

 

 Downgrade dance 과정은 일단, 클라이언트가 서버에게 client hello에 최신 프로토콜인 TLS 1.2를 보내는 데 중간에 해커가 그 정보를 가로채서 패킷을 드랍시키고 서버에게 현재 연결을 종료시키는 패킷을 보냅니다. 클라이언트 쪽에서는 TLS 1.2가 서버에서 지원이 안되나보다 하고 한단계 낮은 TLS 1.1을 날립니다. 이것도 해커가 가로채서 패킷을 드랍시킵니다. 이렇게 한 단계씩 내리다보면 SSLv3까지 내려오게 되는데 그제서야 해커는 서버에게 이 패킷을 날려서 SSLv3을 사용하도록 유도합니다.

 

 

 

 

* 이 방법 외에도 다운그레이드 하는 방법은 몇 가지 더 되고, 제가 적은 건 다운그레이드 방법의 한 예입니다.

 

 

 

 SSLv3으로 내려가면 패딩오라클 어택을 시도할 수 있습니다. 위 그림은 CBC mode encryption을 나타냈는데 평문 한 블록을 임의의 초기벡터와 xor 연산을 해서 나온 임의의 값을 특정 키값과 블럭암호화를 합니다. 생성된 암호문 1을 다음 평문과 xor하여 또 다른 암호를 2를 만들고.. 이렇게 블록암호화 하면서 암호문을 생성하는 게 cbc encryption인데, 블럭암호화를 하면 패딩값이 무조건 1바이트 이상 나오게 됩니다.

 

 

 예를 들어 표현한 건데 블럭암호화를 하지 않았을 경우와 암호화를 했을 때를 나타내는 표입니다. 1번은 Shayete라는 7바이트 값이 블럭에 들어가 있습니다. 근데 블럭암호를 했을 때 블럭의 마지막 1바이트에 패딩값이 채워지게 됩니다. 마찬가지로 4바이트 값이 들어가 있다면 패딩값 4바이트가 채워지게 되고 블럭에 8바이트 꽉꽉 채워져있으면 그 다음 블럭에 8바이트의 패딩값이 들어갑니다. 8바이트 이상의 값이 있어도 그 다음 블럭에서 똑같이 패딩값이 생성되고요. 이 패딩으로 어떻게 값을 알아낼 수 있냐고요?

 

 

 

 cbc decryption마저 보고 설명드리겠습니다. 복호화는 암호화와 반대로 진행됩니다. 암호문을 특정 키값과 블럭암호화해서 생성된 임의의 값과 임의의 초기벡터를 xor연산해서 평문으로 복호화합니다. 처음의 암호문1로 다음 임의의 값과 xor연산해서 다음 평문을 복호화시키고요. 이 과정이 cbc decryption입니다. 지금까지 encryption, decryption을 설명드렸는데 이걸로 뭘 할 수 있을까요. 패딩값을 이용하는 것과 cbc mode의 구조의 결함을 가지고 공격을 하게 됩니다. 평문을 얻어내려면 초기벡터값과 임의의 값 intermediary값이 필요한데, 

 

 

 

 공격자는 중간에 빼온 값들을 xor 연산해서 intermediary 값을 얻게 되는데 이 과정에서 암호문이 옳다면 서버는 200ok 표시되고 패딩값은 맞는데 잘못된 값을 받았을 경우 200ok custom error를, 그리고 패딩값이 잘못된 값을 받았을 땐 500 에러가 뜹니다. 초기벡터값을 브루트포싱으로 진행하다보면 올바른 intermediary 값을 얻게 되는데 이걸 이용해서 평문을 복호화시킵니다. 위 그림을 보면 예를 들어 패딩값이 1개 있을 때 브루트포싱으로 쭉 돌리다가 초기벡터가 0x36일 때 서버에서 200ok를 보내 패딩값을 알아낸 것을 볼 수 있고 2번째는 패딩값이 4개일 때, 마지막은 패딩값이 8개일 때 올바른 intermediary값을 찾은 걸 볼 수 있습니다.

 

 

 

 패딩오라클의 전체적인 모습을 그림으로 표현해봤습니다. A의 값과 B를 xor하면 intermediary C가 나오게 되는데 이것이 Original 값의 D와 일치하다고 판단하여 평문인 E를 얻게 됩니다. 이런식으로 브루트포스를 진행해서 완벽한 평문을 얻어내는 게 패딩오라클 어택입니다. 

 

 

푸들어택에 대한 대처방안은,

 

 크롬에서는  --ssl-version-min=tls1 을 이용해서 버전이 내려가는 걸 막는 방법이 있습니다. IE에서는 인터넷 옵션에서 ssl3.0으로 내리는 것을 막을 수 있고요. 공용 와이파이를 쓰지 않는 것과 TLS_FALLBACK_SCSV 옵션을 사용하는 방법이 있습니다. 그리고 마소에서 푸들을 막기 위해 임시용 프로그램을 만들어 둔 것 같은데 그것도 방법 중의 하나입니다.

 

--ssl-version-min=tls1 이건 인터넷 검색해보면 여러 군데에서 설명을 해뒀으니 따로 적지 않겠습니다.

 

TLS_FALLBACK_SCSV는 

 

 

만약 프로토콜이 내려가는 것을 감지하면 inappropriate_fallback 경고 메세지를 보내서 다운그레이드를 방지할 수 있는 방법입니다.




'암호학 & 알고리즘' 카테고리의 다른 글

HMAC란?  (0) 2021.07.27
백준 분해합 C  (0) 2021.01.02
Oracle Padding Attack  (0) 2019.11.27
블로그 이미지

wtdsoul

,

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

 

Oracle Padding Attack[이론편]

Oracle Padding Attack oracle padding attack에서 오라클은 흔히 알려진 데이터베이스의 이름으로 쓰여진 것이 아니라 "응답에 대한 판독" 과 같은 뜻으로 쓰였다. 즉 padding이 올바르게 되었는지 여부에 따라..

sang-gamja.tistory.com

https://m.blog.naver.com/PostView.nhn?blogId=kby88power&logNo=221057968454&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

Oracle Padding Attack

오라클 패딩 공격 실습 사이트http://x.ozetta.net/example.phpPadding Oracle ExamplePKCS#7 Padd...

blog.naver.com

 

 

 

 

'암호학 & 알고리즘' 카테고리의 다른 글

HMAC란?  (0) 2021.07.27
백준 분해합 C  (0) 2021.01.02
Poodle Attack 및 Oracle Padding 건  (0) 2020.06.24
블로그 이미지

wtdsoul

,