๐ดโ ๏ธ CTF ๐ดโ ๏ธ/๐งฎ ์ํธํ ๐งฎ (17) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Dream Hack - Crypto] Double DES Double Encryption์ํธํค ์ ์์กฐ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค๋ฉด? ์ํธํค ํฌ๊ธฐ๋ฅผ ๋์ด๋ฉด ๋๋ค!์ํธ ์๊ณ ๋ฆฌ์ฆ Cipher1 = Enc(Plan, key1)๊ฐํ๋ ์๊ณ ๋ฆฌ์ฆ : Cipher2 = Enc(Cipher1, key2)๋ธ๋ก ํฌ๊ธฐ๋ ๊ทธ๋๋ก, ์ํธํค ํฌ๊ธฐ๋ 2๋ฐฐ๋ก ๊ฐํํ์๋ค. ๊ณผ์ฐ ๋๋ฐฐ์ ์์ ์ฑ์ ๊ฐ์ง๊น?Cipher1 = Enc(Plan, key1) → ํค ํฌ๊ธฐ 2^n ์ผ ๋, Cipher2 = Enc(Cipher1, key2) → ํค ํฌ๊ธฐ 2^2n์ ๊ธฐ๋ํ์ง๋ง MITM attack ์ ์ด์ฉํ๋ฉด 2^(n+1)๋ก ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค.MITM (Meet In The Middle) ์ด๋?์ฃผ์ด์ง (ํ๋ฌธ(P), ์ํธ๋ฌธ(C)) ์์ ๋ํ์ฌ, ์ํธํค key1, key2๋ฅผ ์ฐพ๋ ๊ณต๊ฒฉํ๋ฌธ P ๋ฅผ ๊ฐ๋ฅํ ๋ชจ๋ key1์ผ๋ก ์ํธํ .. [Dream Hack - Crypto] Private Storage RC4 ์ํธํ ๊ณผ์ RC4๋ 256 byte ๋น๋ฐํค ๋์นญํค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋์ผํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์ํธํํ๊ณ ๋ณตํธํํ๋ค. ์ํธํ ๊ณผ์ ์ KSA(Key Scheduling Algorithm)์ PRGA(Pseudo-Random Generation Algorithm) ๋ ๊ฐ์ง ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. ํค ์คํธ๋ฆผ ์์ฑ https://www.youtube.com/watch?v=kfdvlaOD1ig&t=172s S๋ฐฐ์ด: 0๋ถํฐ 255๊น์ง ๊ฐ์ ๊ฐ์ง. K๋ฐฐ์ด: key ๊ฐ์ ๊ฐ์ง. KSA ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํค ์ค์ผ์ค๋ง ์ํ. PRGA ์๊ณ ์ฆ์ ํตํด ํค์คํธ๋ฆผ ๋์ถ. ์ํธํ ์ํธ๋ฌธ = ํ๋ฌธ xor ํค์คํธ๋ฆผ ๋ณตํธํ ํ๋ฌธ = ์ํธ๋ฌธ xor ํค์คํธ๋ฆผ ๋ฌธ์ ํ์ด RC4์์๋ ๋์ผํ key๋ฅผ ์ฌ์ฉํ ๋, ๋์ผํ ํค์คํธ๋ฆผ.. [Dream Hack - Crypto] Padding Oracle PKCS#7 ํจ๋ฉ ํจ๋ฉ ๊ธธ์ด ๊ณ์ฐ: ํจ๋ฉ์ ๋ง์ง๋ง ๋ธ๋ก์ ๊ธธ์ด๊ฐ ๋ธ๋ก ํฌ๊ธฐ์ ๋ค๋ฅผ ๋ ์ถ๊ฐ๋ฉ๋๋ค. ํจ๋ฉ์ ๊ฐ์ ์ถ๊ฐ๋์ด์ผ ํ๋ ๋ฐ์ดํธ ์๋ก ํํ๋ฉ๋๋ค. ํจ๋ฉ ๊ฐ์ ์ผ๊ด์ฑ: ํจ๋ฉ ๊ฐ์ ์ถ๊ฐ๋์ด์ผ ํ๋ ๋ฐ์ดํธ ์๋ก ์ผ๊ด์ฑ์ ์ ์งํ๋ฉฐ, ์๋ฅผ ๋ค์ด 1๋ฐ์ดํธ๊ฐ ์ถ๊ฐ๋์ด์ผ ํ๋ค๋ฉด 0x01, 2๋ฐ์ดํธ๊ฐ ์ถ๊ฐ๋์ด์ผ ํ๋ค๋ฉด 0x02๋ก ์ฑ์์ง๋๋ค. ์ด๋ ํจ๋ฉ์ ๋์ค์ ์ ๊ฑฐํ ๋ ์ด๋๊น์ง๊ฐ ํจ๋ฉ์ธ์ง ์ฝ๊ฒ ํ๋จํ ์ ์๋๋ก ํฉ๋๋ค. ๋ชจ๋ ๋ฐ์ดํธ๊ฐ ํจ๋ฉ์ธ ๊ฒฝ์ฐ: ๋ง์ฝ ๋ฐ์ดํฐ์ ๊ธธ์ด๊ฐ ๋ธ๋ก ํฌ๊ธฐ์ ์ ํํ ๋ฐฐ์์ผ ๋, ๋ธ๋ก ํฌ๊ธฐ๋งํผ์ ํจ๋ฉ์ด ์ถ๊ฐ๋ฉ๋๋ค. ์ด๋ ์ถ๊ฐ๋๋ ๋ชจ๋ ๋ฐ์ดํธ ๊ฐ์ ํจ๋ฉ ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ํจ๋ฉ ์ ๊ฑฐ ์ ์ ํจ์ฑ ํ์ธ: ํจ๋ฉ ์ ๊ฑฐ ์์๋ ์ถ๊ฐ๋ ํจ๋ฉ ๊ฐ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ .. [Dream Hack - Crypto] Pyploit pdb.set_trace() ํจ์ pdb.set_trace()๋ Python์ ๋๋ฒ๊น ๋ชจ๋์ธ pdb๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํ์ ์ค๋จํ๊ณ ๋ํํ ๋๋ฒ๊น ์ธ์ ์ ์์ํ๋ ์ฝ๋์ด๋ค. ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ด ํด๋น ๋ถ๋ถ์ ๋๋ฌํ์ ๋, ํ๋ก๊ทธ๋จ์ ์คํ์ด ์ผ์์ ์ผ๋ก ์ค๋จ๋๊ณ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ์คํํ๊ฑฐ๋ ๋ณ์์ ๊ฐ์ ํ์ธํ๋ ๋ฑ์ ๋๋ฒ๊น ์์ ์ ์ํํ ์ ์๋ค. UTF-8 UTF-8(Unicode Transformation Format - 8-bit)์ ์ ๋์ฝ๋ ๋ฌธ์ ์งํฉ์ ํํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ด๋ค. ์ํ๋ฒณ๊ณผ ์ซ์์ ๊ฒฝ์ฐ, UTF-8 ์ธ์ฝ๋ฉ ์ 1 byte๋ฅผ ์ฐจ์งํ๋ฏ๋ก 1์ฉ ์ฆ๊ฐํ๊ณ , ํ๊ธ์ ๊ฒฝ์ฐ 3 byte๋ฅผ ์ฐจ์งํ๋ฏ๋ก 3์ฉ ์ฆ๊ฐํ๋ค. ๋ฌธ์ ํด์ 1. Encrypt ์ ๋ ฅ.. [Dream Hack - Crypto] [LINE CTF 2021] babycrypto1 CBC ๋ชจ๋ AES์ CBC (Cipher Block Chaining) ๋ชจ๋๋ ๋ธ๋ก ์ํธํ ๋ชจ๋ ์ค ํ๋๋ก, ๊ฐ ๋ธ๋ก์ ์ํธํํ ๋ ์ด์ ๋ธ๋ก์ ์ํธ๋ฌธ๊ณผ XOR ์ฐ์ฐ์ ์ํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. IV(Initialization Vector) ์ ํ: ๋ฌด์์๋ก ์ ํ๋ IV๋ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ ์ํธํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ธ๋ก ๋จ์ ์ํธํ: ํ๋ฌธ์ ๋ธ๋ก ํฌ๊ธฐ๋ก ๋๋ ํ, ๊ฐ ๋ธ๋ก์ ์ด์ ๋ธ๋ก์ ์ํธ๋ฌธ๊ณผ XOR ์ฐ์ฐ์ ์ํํ ๋ค AES ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ํธํ๋๋ค. ์ฃผ์ด์ง ์ฝ๋ ํด์ 1. token + b'test' ๋ฅผ aes_key ๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํํ๊ณ ์ด๋ฅผ ์ถ๋ ฅํ๋ค. aes_key = get_random_bytes(AES.block_size) token = b64encode(get_random_bytes(A.. [Dream Hack - Crypto] X-Time Pad One-Time Pad One-Time Pad ๋ ์ผํ์ฑ ํจ๋๋ฅผ ์ด์ฉํ์ฌ ๋ณด์๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ํธ ์์คํ ์ด๋ค. ํ๋ฌธ๊ณผ ํค์ ๊ธธ์ด๊ฐ ์๋ก ๋์ผํด์ผ ํ๋ฉฐ, ํค๋ ๋จ ํ๋ฒ๋ง ์ฌ์ฉ๋์ด์ผ ํ๋ค. ์ํธํ ๊ณผ์ ์์ ํ๋ฌธ๊ณผ ํค ๊ฐ์ XOR ์ฐ์ฐ์ ์ฌ์ฉํ๋ค. ๋ฌธ์ ํด์ flag_enc = FLAG ^ key FLAG ๊ฐ์ ์ฝ์ด์์ key ์ xor ํ ํ flag_enc ๋ฅผ ์ถ๋ ฅํ๋ค. new_key = key ^ rand_bit key์ ๋ฌด์์ํ bit์ด์ ๋ํด์ ์๋ก์ด ํค๋ฅผ ์์ฑํ๋ค. ์ด๋, rand_bit์ ๊ธธ์ด๊ฐ 64byte์ด๋ฏ๋ก new_key์ ๊ธธ์ด๋ 64byte์ ๊ทผ์ ํ ๊ฒ์ด๋ผ ์ถ์ธกํ ์ ์๋ค. input_enc = {input} ^ new_key ์ฐ๋ฆฌ๊ฐ ์ ๋ ฅํ ๊ฐ์ ์๋ก์ด ํค๋ฅผ xor ํ์ฌ ์ํธํ๋ ๊ฐ์ ์ถ๋ ฅ.. [Dream Hack - Crypto] likeb64 Base64 ์ ๋ฆฌ Base64๋ 6๋นํธ์ฉ ๋ฌถ์ด์ ์ธ์ฝ๋ฉ ํ์ ๋ฐ๋ผ ํน์ ๋ฌธ์๋ก ๋งคํ๋ฉ๋๋ค. ๋ฐ๋ผ์ 3๋ฐ์ดํธ(24๋นํธ)์ ๋ฐ์ดํฐ๋ฅผ 4๊ฐ์ Base64 ๋ฌธ์๋ก ์ธ์ฝ๋ฉํฉ๋๋ค. ์์ค์ด ๋นํธ์ ๋์๋๋ Ascii ์ฝ๋ ๋ฌธ์์ด, ์๋ซ์ค์ด Base64 ํ์ ํด๋นํ๋ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ๋๋ค. Base64๋ 3๋ฐ์ดํธ์ฉ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก, ์๋ณธ ๋ฐ์ดํฐ์ ๋ฐ์ดํธ ๊ธธ์ด๊ฐ 3์ ๋ฐฐ์๊ฐ ์๋ ๊ฒฝ์ฐ ํจ๋ฉ์ ์ถ๊ฐํ๊ณ ‘=’ ์ผ๋ก ๋ํ๋ ๋๋ค. ํ์ด ๋ฐฉ๋ฒ flag_enc: IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQMYZHa=== hint : ABCDEFGHIJKLMNOPQRSTUVWXYZabc.. [DreamHack - Crypto] uncommon_e Common modulus attack Common Modulus Attack RSA ์ํธ์์ ๊ฐ์ N๊ณผ GCD(e1, e2)=1 ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ๋ฌธ m์ ์ํธํํด์ ๋ ์ํธ๋ฌธ c1, c2์ ๋ง๋ค์์ ๋, ์ด๋ฅผ ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ์ด๋ค. ๊ณต๊ฒฉ์๋ e1, e2๊ฐ ์๋ก์๋ผ๋ ์ ์ ํ์ฉํด r*e1 + s*e2=1์ด๊ณ , (r, s) ์์ ํ์ฅ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๊ตฌํ ์ ์๋ค. ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ GCD ๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. 106๊ณผ 16์ GCD๋ฅผ ์ฐพ๊ธฐ ์ํด์ ๋ชฉ๊ณผ ๋๋จธ์ง๋ฅผ ํ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค. ์ฐ๋ณ์ด 0์ด ๋ ๋ ๊ทธ์ ์์ ์ฐ๋ณ 2๊ฐ 106, 16์ GCD๊ฐ ๋๋ค. ํ์ด ๋ฐฉ๋ฒ FLAG_enc1 = FLAG^e1 mod N FLAG_enc2 = FLAG^e.. ์ด์ 1 2 3 ๋ค์