728x90

전체 글 118

[CryptoHack] Keyed Permutations

keyed permutation(치환)? AES maps an input block into a unique output block, with a key determining which permutation to perform. block? fixed number of bytes or bits. ex) AES-128: 128 bit block & key (16 byte) 퀴즈) 일대일 대응(one-to-one correspondense)의 수학적 용어는? 답: bijection 💡같은 키를 가지고 역 연산을 하면 우리는 decrypt를 할 수 있게 된다. 다만, 이때 일대일 대응이 되어야지만 plaint text -> cipher text 변환과 cipher text -> plain text 변환이 가능..

[CryptoHack] Modular Inverting

modular inverse 에 대한 설명은 다음 포스트 참고... 2024.01.16 - [study/수학&암호] - [CryptoHack] Extended GCD [CryptoHack] Extended GCD 베주 항등식 (Bezout's Identity) 두 정수의 최대공약수를 원래 두 수의 배수의 합으로 나타낼 수 있다. 이때 x 와 y 는 베주 계수(Bezout coefficient)라고 한다!! 정리하자면 GCD(a, b) = d라고 할 때, - ax + by = d lucykorea414.tistory.com 퀴즈) 3 mod 13의 inverse를 구하라~ 역수가 일단 존재하기 위해서는 3과 13이 서로소여야 한다!! (즉, gcd가 1 이어야 함) -> 3과 13은 서로소 O 그러면 오일..

[CryptoHack] Extended GCD

베주 항등식 (Bezout's Identity) 두 정수의 최대공약수를 원래 두 수의 배수의 합으로 나타낼 수 있다. 이때 x 와 y 는 베주 계수(Bezout coefficient)라고 한다!! 정리하자면 GCD(a, b) = d라고 할 때, - ax + by = d를 만족하는 정수 x, y가 존재한다 - d는 정수 x, y에 대해서 ax + by로 표현할 수 있는 가장 작은 정수이다. - ax + by로 표현될 수 있는 모든 정수는 d의 배수이다. 확장 유클리드 호제법(Extended Euclidean algorithm) 위와 같은 베주 항등식과 비슷하게 확장 유클리드 호제법은 ax + by = d 라고 할때, d = GCD(a, b)에 대하여 (x, y)의 값을 찾는 효율적인 알고리즘이다!! 나중에..

[CryptoHack] Greatest Common Divisor

GCD(Greatest Common Divisor): 최대공약수 -> 두 숫자 (a,b)의 가장 큰 약수 ex) a = 8, b = 12 인 경우 a의 약수 = {1, 2, 4, 8} b의 약수 = {1, 2, 3, 4, 6, 12} 따라서 gcd(a, b) = 4 if 만약, a 와 b 가 소수(prime number)인 경우 then gcd(a, b) 는 무조건 1 이다. => gcd(x, y) = 1 인 경우, x와 y는 서로소(coprime number) 이다. Euclidean algorithm (유클리드 호제법, 유클리드 알고리즘) 두개의 자연수의 최대공약수를 구하는 알고리즘 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수..

XOR 연산 정리

공부하면서... 내가 헷갈렸던 부분 정리! 1. 왜 xor 연산을 하려면 바이트형식으로 바꿔서 해야하는걸까? -> 주된 이유는 xor 연산이 비트 단위 연산이기 때문에!! 파이썬에서는 정수형끼리는 xor 연산 가능!! (자동적으로 2진수로 바꿔서 실행됨) ex) print(2^4) # 결과: 6 그러면 16진수는 어떨까? ex) hex_A = 0x1A hex_B = 0x3F byte_A = int.to_bytes(hex_A, length=1, byteorder='big') byte_B = int.to_bytes(hex_B, length=1, byteorder='big') result = bytes(x ^ y for x, y in zip(byte_A, byte_B)) result_hex = int.from..

study/수학&암호 2024.01.03

[CryptoHack] You either know, XOR you don't

Quiz) 풀이) 1. 문제에서 주어진 값을 바이트로 변환했다. 2. key 값을 모르는 상태인데, XOR의 특징 중 하나인 A^B = C 이면 C^A = B 인 것을 이용하여 플래그의 처음 부분인 crypto{ 를 cipher와 xor 하여 거꾸로 key를 찾는 방법을 사용했다. 3. 이때 결과로 myXORke+y~~ 라는 문자열이 나왔는데 myXORkey 라는 텍스트로 실험을 해봤다. 4. 똑같이 cipher와 myXORkey 를 xor 했더니 답이 바로 나왔다! 결과

[CryptoHack] XOR Properties

XOR의 4가지 특징 Commutative(교환법칙): A ⊕ B = B ⊕ A Associative(결합법칙): A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C Identity: A ⊕ 0 = A Self-Inverse: A ⊕ A = 0 교환법칙(Commutative): XOR 연산은 순서에 관계없이 같은 결과를 얻음 결합법칙(Associative): XOR 연산은 연속된 여러 항목을 괄호의 위치에 관계없이 결합할 수 있음 XOR 연산의 항등원은 0 자기 자신과 XOR 되면 0 퀴즈) 풀이) 헥스값을 먼저 바이트로 변환하고 계산해야함!! 처음에 이렇게 풀었더니 다음과 같은 오류가 발생함.. 보니까 바이트배열끼리의 XOR 연산은 지원되지 않는것 같음! 따라서 하나하나 다 정수형으로 변환해줘야하는 것 같다..

728x90