security 183

lab 09 - Heap: uaf & tcache poisoning in latest libc

https://minseosavestheworld.tistory.com/180 [pwnable cs6265] lab 09 - Heap: double free bug in old libc(= 1); return atoi(buf); } typedef struct { char minseosavestheworld.tistory.com 문제 코드 및 분석은 여기 참고하면 된다 Double Free Detection 우회 최신 libc에서는 double free 우회가 조금 까다로워졌다. tcache 기준으로 설명해보겠다 typedef struct tcache_entry { struct tcache_entry *next; /* This field exists to detect double frees. */ uint..

security/가디언 2023.08.26

확장된 유클리드 호제법 구현 in python

이렇다고 한다.. 최대한 직관적으로 구현하고자 했다 (물론 더 간단한 방법도 있겠지만) 계수 (a,b,c,d) 간 관계식을 이용해서 코드를 짜면 될 것 같다 def extended_euclidean(X,Y): if X0: q = x//y r = x%y if r==0: break # GCD 구해짐 x,y,a,b,c,d = y,r,c,d,a-q*c,b-q*d return c,d,y x,y = map(int, input().split()) a,b,GCD = extended_euclidean(x, y) print(f'{a} * {x} + {b} * {y} = {GCD}') 물론 파이썬 라이브러리를 사용해서 개 ez하게 구할 수도 있다 from gmpy2 import gcdext gcd, s, t = gcdext..

security/암호학 2023.08.20

RSA 암호화 알고리즘 정리 및 예제 (feat SSTF 2023)

RSA 암호화 알고리즘이란 - modular exponentiation operation 기반으로 한 암호화 알고리즘 - n과 e를 공개키로, d를 개인키로 사용하여 아래와 같이 exponentiation을 통해 암호화 및 복호화 한다 - key generaton 방식은 아래와 같다 // 먼저 적절한 소수 p와 q를 선택하여 n을 구한다 // e를 적절히 선택하고, 개인키 d를 역산한다 // 만약 attacker가 p, q, d 중 하나를 찾는다면 모든 ciphertext에 대해 decrypt가 가능할 것이다 취약점 분석 예제 1 from sympy import randprime, nextprime from secret import pt p = randprime(pow(2, 511), pow(2, 512..

security/암호학 2023.08.20

RC4 암호화 알고리즘 정리 및 예제 (feat SSTF2023)

RC4 알고리즘이란? - 암호화와 복호화에 동일한 shared key를 사용하는 symmetric encryption - 스트림 암호 중 하나로 전송 계층 보안(TLS, SSL) 등 여러 프로토콜에 사용되었던 암호 방식 - 256바이트 이내의 key와 256바이트 초기배열 S를 이용해 PlainText와 동일한 길이의 Key Stream을 생성하고, 각 바이트 XOR을 통해 key stream을 생성한다 - key stream을 안다면 xor을 통해 암호화 및 복호화가 가능하다 RC4 알고리즘 동작 방식 Step1. 초기 상태 벡터 S와 임의 벡터 T를 생성한다 - S와 T는 256바이트 벡터 - S[i]=i (i=0~255) 인덱스 값을 채우고, T에는 key를 반복적으로 채운다 Step2. KSA 알..

security/암호학 2023.08.20

AES 암호화 알고리즘 정리 및 예제 (feat SSFT 2023)

AES 암호화 알고리즘 - Advanced Encryption Standard, 블록 암호 - Block Size: 16 Bytes - Key size: 16 Bytes(AES128) / 24 Bytes(AES192) / 32 Bytes(AESE256) - plaintext 길이가 16*k보다 작을 때 padding을 붙인다 * 주로 PKCS#7 표준을 사용함 (padding 6개 필요하면 b'\x06'으로 채우고, 2개 필요하면 b'\x02'로 채우는) * plaintext 길이가 16의 배수이면 padding b'\x10'*16 을 뒤에 붙인다 - plaintext의 길이가 block size보다 클 때 어떻게? => mode of operation * ECB(Electronic CodeBook) m..

security/암호학 2023.08.20