[CryptoHack] DIFFIE-HELLMAN (Diffie-Hellman Starter 1, 2)
2023. 5. 31. 21:59
워게임/CryptoHack
Diffie-Hellman Starter 1 문제 및 설명 정수 모듈로 n으로 이루어진 집합은 덧셈과 곱셈의 연산을 포함하여 링(Ring)이 됩니다. 이는 집합 내의 두 요소를 더하거나 곱하는 경우에도 집합 내의 다른 요소가 반환된다는 것을 의미합니다. 모듈러스가 소수일 때: n = p인 경우, 우리는 집합 내의 모든 요소에 대한 역원을 보장받으며, 이로 인해 링은 필드(Field)로 승격됩니다. 이 필드를 유한체 Fp라고 합니다. Diffie-Hellman 프로토콜은 일반적으로 큰 소수인 유한체 Fp의 요소들로 작동합니다. 소수 p = 991과 요소 g = 209가 주어진 경우, g * d mod 991 = 1을 만족하는 역원 d를 찾아보겠습니다. 풀이 더보기 g * d mod 991 = 1에 대한 역..
[CryptoHack] Mathmatics (Adrien's Signs)
2023. 5. 30. 23:30
워게임/CryptoHack
Adrien's Signs 문제 Adrien은 심볼과 마이너스 기호를 이용하여 메시지를 암호화하는 방법을 고려하고 있습니다. 플래그를 복구하는 방법을 찾을 수 있을까요? 풀이 더보기 from random import randint a = 288260533169915 p = 1007621497415251 FLAG = b'crypto{????????????????????}' def encrypt_flag(flag): ciphertext = [] plaintext = ''.join([bin(i)[2:].zfill(8) for i in flag]) for b in plaintext: e = randint(1, p) n = pow(a, e, p) if b == '1': ciphertext.append(n) els..
[CryptoHack] MATHEMATICS (Modular Square Root)
2023. 5. 29. 23:18
워게임/CryptoHack
Modular Square Root 문제 및 설명 르장드르의 기호를 소개하면서, 소수에 대해 모듈로를 사용하여 제곱근이 있는지를 빠르게 판별하는 방법을 알아보았습니다. 더 나아가서, 이러한 제곱근을 효율적으로 계산하기 위한 알고리즘도 있습니다. 실제로 가장 좋은 알고리즘은 Tonelli-Shanks라고 불리며, 이는 19세기에 이탈리아인에 의해 처음으로 기술되었으며, 1970년대에 Daniel Shanks에 의해 독립적으로 재발견되었습니다. 2가 아닌 모든 소수는 p ≡ 1 mod 4 또는 p ≡ 3 mod 4 형태입니다. 왜냐하면 모든 홀수는 이러한 합동식을 따르기 때문입니다. 이전의 도전에서 암시한 대로, p ≡ 3 mod 4 경우에는 페르마의 소정리로부터 직접적으로 계산 가능한 매우 간단한 공식을 ..
[CryptoHack] MATHEMATICS (Quadratic Residues, Legendre Symbol)
2023. 5. 28. 20:10
워게임/CryptoHack
Quadratic Residues 문제 및 설명 우리는 모듈로 산술에서 곱셈과 나눗셈을 살펴봤지만, 정수의 모듈로를 사용하여 제곱근을 취하는 것은 무엇을 의미할까요? 다음 논의를 위해 모듈로 p = 29에서 작업해 봅시다. 우리는 정수 a = 11을 가지고 a² = 5 (mod 29)를 계산할 수 있습니다. a = 11이므로, a² = 5이며, 우리는 5의 제곱근을 11이라고 말합니다. 이것은 좋아보이지만, 이제 18의 제곱근에 대해 생각해 봅시다. 위에서는 a² = 18인 정수 a를 찾아야 함을 알고 있습니다. 첫 번째 생각은 a = 1부터 a = p-1까지 반복하는 것일 것입니다. 이 논의에서 p는 크지 않으므로 빠르게 확인할 수 있습니다. 시도해보고, 이를 코딩하여 어떤 결과가 나오는지 확인해 보세..
[Cryptohack] General (CERTainly not, SSH Keys)
2023. 5. 27. 17:09
워게임/CryptoHack
CERTainly not 문제 및 설명 앞선 문제에서 언급한 대로, PEM은 DER로 인코딩된 ASN.1 위에 멋진 포장지입니다. 경우에 따라서는 DER 파일을 직접 만날 수 있습니다. 예를 들어, 많은 Windows 유틸리티는 기본적으로 DER 파일로 작업하는 것을 선호합니다. 그러나 다른 도구들은 PEM 형식을 기대하며 DER 파일을 가져오는 데 어려움을 겪을 수 있으므로 한 형식을 다른 형식으로 변환하는 방법을 알고 있는 것이 좋습니다. SSL 인증서는 현대 웹의 중요한 부분으로, 암호화 키를 조직에 대한 세부 정보와 결합시킵니다. TLS 카테고리에서 이에 대해 자세히 다룰 것입니다. 여기에 제시된 것은 DER로 인코딩된 x509 RSA 인증서입니다. 인증서의 모듈러스(modulus)를 찾아서, 답..
[Cryptohack] General (Modular Arithmetic 1, 2, Modular Inverting)
2023. 5. 26. 18:13
워게임/CryptoHack
Modular Arithmetic 1 문제 및 설명 몸을 숙이고 암호학자의 노트를 본다고 상상해 보세요. 다음과 같은 메모가 표시됩니다: 4 + 9 = 1 5 - 7 = 10 2 + 3 = 5 처음에는 그들이 미쳤다고 생각할지도 모릅니다. 아마도 이것이 오늘날 당신이 생각할 수 있는 많은 데이터 유출이 있는 이유일 것입니다. 하지만 이것은 모듈식 산술 모듈 12에 지나지 않습니다(비록 이상한 표기법이 있긴 하지만). 여러분은 그것을 모듈식 산술이라고 부르지 않았을 수도 있지만, 여러분은 시간을 알려주는 것을 배운 이후로 이런 종류의 계산을 해왔습니다. (이 방정식들을 다시 보고 시간을 더하는 것에 대해 생각해보세요.). 형식적으로 "시간 계산"은 합동성 이론에 의해 설명됩니다. 우리는 만약 a = b m..
[Cryptohack] RSA (Ron was Wrong, Whit is Right)
2023. 5. 25. 18:58
워게임/CryptoHack
Ron was Wrong, Whit is Right 문제 및 설명 여기 RSA 공개 키 묶음이 있습니다. 인터넷에 접속한 사람들로부터 그들이 보낸 메시지와 함께 수집되었습니다. excerpt.py 에서 볼 수 있듯이, 모든 사람이 PKCS#1 OAEP를 사용하여 자신의 메시지를 암호화했습니다. 암호 해독이 가능해서는 안 되지만, 일부 키에 문제가 있는 것은 아닐까요? 풀이 더보기 from Crypto.Cipher import PKCS1_OAEP from Crypto.PublicKey import RSA msg = "???" with open('21.pem') as f: key = RSA.importKey(f.read()) cipher = PKCS1_OAEP.new(key) ciphertext = ciph..
[Cryptohack] General (Transparency)
2023. 5. 24. 21:34
워게임/CryptoHack
Transparency 문제 및 설명 HTTPS를 통해 웹 사이트에 연결할 때, 서버가 보내는 첫 번째 TLS 메시지는 서버 TLS 인증서를 포함하는 ServerHello입니다. 브라우저는 TLS 인증서가 유효한지 확인하고 유효하지 않을 경우 TLS 핸드셰이크를 종료합니다. 검증에는 다음 사항이 포함됩니다: - 인증서의 이름이 도메인과 일치합니다 - 인증서가 만료되지 않았습니다 - 인증서는 최종적으로 브라우저 또는 운영 체제에서 신뢰하는 CA(인증 기관)의 루트 키에 의해 서명됩니다("신뢰 체인"을 통해) CA에는 인증서에 서명할 수 있는 권한이 있으므로 인터넷의 보안은 올바른 사용자에게 TLS 인증서를 발급하는 데 따라 달라집니다. 즉, 실제 도메인 소유자에게만 인증서를 발급해야 합니다. 그러나 Win..
[Cryptohack] General (Privacy-Enhanced Mail?)
2023. 5. 23. 23:10
워게임/CryptoHack
Privacy-Enhanced Mail? 문제및 설명 인코딩 부분에서 살펴본 것처럼 암호화는 큰 정수, 원시 바이트, 16진수 문자열 등 매우 다양한 형식으로 데이터를 처리합니다. 암호화 데이터의 송수신을 지원하기 위해 몇 가지 구조화된 형식이 표준화되었습니다. 이러한 공통 데이터 형식을 인식하고 조작할 수 있습니다. PEM은 키, 인증서 및 기타 암호화 자료를 보내는 데 널리 사용되는 형식입니다. 모양은 다음과 같습니다 base64 인코딩된 데이터를 한 줄의 머리글과 바닥글로 감싸 데이터 구문 분석 방법을 나타냅니다. 헤더와 본문에 정확한 하이픈 수가 있어야 합니다. 그렇지 않으면 암호화 도구가 파일을 인식할 수 없습니다. base64 인코딩된 데이터는 DER 인코딩된 ASN.1 값입니다. 혼란스럽습니..