본문 바로가기

CTF

(6)
Newbie Cryptography Cheatsheet (작업 중) $$ \newcommand{\Mod}[1]{\ (\mathrm{mod}\ #1)} $$ Intro CTF 도중에 꺼내서 보고 싶은 내용들이 적혀있는 치트시트가 있었으면 좋겠다고 생각했는데, 크립토를 접었음에도 쓰면서 공부하면 괜찮을 것 같아서 매우 바쁜 와중에도 짬짬히 적고 있다. 내 생각엔 그냥 rkm0959 블로그를 열심히 베끼고 있는 것 같다 ㅋㅋ(본인이시라면 뒤로 가기를 눌러 주세요). 이 내용을 실제 공부용이나 CTF용으로 사용하는 것을 강력히 추천하지 않는다. RSA Introduction 크기가 비슷한 큰 소수 $p, q$가 있을 때, $N=pq$라 하자. 이때 공개된 $e$에 대해 $ed \equiv 1 \Mod{\phi(N)}$인 $d$가 존재하도록 하면 오일러 정리에 의거하여 $C \e..
UTCTF - Writeups I participated in UTCTF as a team Hyp3rFlow and achieved 18th place. Usually, I felt like I was always get along with hard-working team members, but this time - I think I solved enough, so I'm going to post a write-up of problems that I solved. Please understand that grammar can be awkward because it's my first time writing in English. 이번 UTCTF에 팀 Hyp3rFlow로 참가해서 18등을 했습니다. 일반적으로는 팀원들이 잘 해 주어서 좀..
[Crypto] 해시 함수와 취약점 (Basic) Intro 이 글에서는 비교적 간단한 해시 함수에 대해서 다루고, Crypto 분야 CTF를 기준으로 할 때 이러한 해시 함수에서 나타날 수 있는 초보적인 취약점에 대해 서술한다. 구체적으로, 이 글에서는 MD5와 SHA 계열 해시에 대해서 다룬다. What is Hash? 해시 함수는 임의의 입력을 받아, 이를 고정된 크기의 출력으로 매핑하는 함수이다. 해시 함수는 일반적으로 같은 입력에 대해서 항상 같은 출력을 내기 때문에 두 데이터가 같은지를 빠르게 비교하거나 데이터를 저장하여 검색하기 위해 색인할 때 유용하게 활용할 수 있다. 그러나 해시 함수의 값이 같다고 해서 실제 데이터가 같다고 간주할 수는 없다. 이는 비둘기집의 원리 때문으로, 입력의 크기는 무한하지만 출력의 크기는 유한하기 때문에 동일한..
[*CTF Writeup] Crypto - MyEnc 문제 설명 from Crypto.Util.number import getPrime,bytes_to_long import time,urandom from flag import flag iv=bytes_to_long(urandom(256)) assert len(flag)==15 keystream=bin(int(flag.encode('hex'),16))[2:].rjust(8*len(flag),'0') p=getPrime(1024) q=getPrime(1024) n=p*q print "n:",n cnt=0 while True: try: print 'give me a number:' m=int(raw_input()) except: break ct=iv for i in r..
[*CTF Writeup] Crypto - GuessKey2 문제 설명 from random import randint import os from flag import flag N=64 key=randint(0,2**N) # print key key=bin(key)[2:].rjust(N,'0') count=0 while True: p=0 q=0 new_key='' zeros=[0] for j in range(len(key)): if key[j]=='0': zeros.append(j) p=zeros[randint(0,len(zeros))-1] q=zeros[randint(0,len(zeros))-1] try: mask=int(raw_input("mask:")) except: exit(0) mask=bin(mask)[2:] ..
[Crypto] 디피 헬만 (Diffie-Hellman) 알고리즘과 취약점 Intro 디피 헬만(Diffie-Hellman) 키 교환은 이산 로그(Discrete Log) 문제의 어려움에 기반한 키 교환 방식이다. 이 글에서는 디피 헬만 키 교환의 동작 원리와, 그리고 동작 과정에서 잘못 구현될 수 있는 부분들의 후보를 간략하게 나열함으로서 디피 헬만 알고리즘의 취약점을 공격하려는 초보 크립토그래퍼에게 도움을 주려고 한다. 작동 과정과 원리 디피 헬만 키 교환은 공개된 통신 위에서, 두 사람이 다른 사람은 알지 못하고 둘만이 아는 공유된 정보(Shared Secret)을 갖도록 하는 방법이다. 이 알고리즘을 이해하기 위해서는 간단한 대수적 지식이 필요하다. 기본적으로 덧셈과 곱셈이 정의되었을 때 모듈러 $n$에 대한 수의 집합 $0, 1, 2, \dots , n-1$은 환(Ri..