목록CTF/Crypto (6)
안 쓰던 블로그
AES 암호화 1. 라운드키와 xor한다. (AddRoundKey) 2. 바이트를 치환한다. (SubBytes) 치환표 SBox를 이용한다 3. 행별로 바이트를 옮긴다. (ShiftRows) 첫 행은 움직이지 않고 둘째행은 왼쪽으로 1번, 셋째행은 왼쪽으로 2번, 넷째행은 3번 바이트 단위로 이동하는 왼쪽 순환 쉬프트 과정을 거친다 4. 열 별로 바이트를 섞는다. (4) 이전 라운드에서 나온 값의 각 열에 대해 임의의 행렬과 연산한다 5. 라운키와 xor한다. (AddRoundKey) 암호문과 평문을 XOR한다 6. (라운드 수 - 1) 만큼 2~5를 반복한다. 7. 마지막 라운드는 MixColumns를 제외하고 수행한다. 키 확장 1. 키를 4바이트씩 나누어 4개의 워드로 만든다. 2. 이전 번의 워드..
from Crypto.Util.number import * import gmpy2 p = getPrime(1024) q = gmpy2.next_prime(p) e = 65537 N = p * q phi = (p - 1) * (q - 1) d = gmpy2.powmod(e, -1, phi) flag = open("flag").read() msg = ["Hello Happy RSA!", "Life like Pwn", flag] def enc(m): tmp = bytes_to_long(m) ct = gmpy2.powmod(tmp, e, N) ct = long_to_bytes(ct) return ct.encode("hex") print(enc(msg[0])) print(enc(msg[1])) print(enc(..
현재까지 된 코드 아래는 설명 AES는 DES를 대체할 목적으로 개최된 암호 표준 공모에서 채택된 암호 표준이다 확장성을 고려하여 설계되어서 키 길이는 128/192/256 bit를 가지고 키 길이에 상관없이 블록 길이는 128 bit이며 라운드 수는 10/12/14를 가진다. 대략 적인 순서는 1. 라운드키와 xor한다. (AddRoundKey) 2. 바이트를 치환한다. (SubBytes) 3. 행별로 바이트를 옮긴다. (ShiftRows) 4. 열 별로 바이트를 섞는다. (4) 5. 라운키와 xor한다. (AddRoundKey) 6. (라운드 수 - 1) 만큼 2~5를 반복한다. 7. 마지막 라운드는 MixColumns를 제외하고 수행한다. 복호화는 각 단계의 역연산을 거꾸로 수행하면 된다. 1. A..
easy_e My mistake is small e.. N = 178338151666742155611443802295616021799237317991327884195555949543674420294550894187433998092171454373004087899154200846458180327977033044015306127217478940602317535721993551738765909231062378332277392270180478034398272580759256456019768091312590898088939828636462475100752212800081223943726289370271507793015189969638486694589234376578640872887960914243347910842..
sage sage는 python에서 수학 계산을 위한 프로그래밍 도구이다 sage 문서: doc.sagemath.org/html/en/tutorial/ sage의 클라우드 서비스: cocalc.com/ 설치 sagemath.org/download-linux.html 이곳에서 바이너리 파일을 다운로드 받아서 압축 해제를 한다 tar --lzma -xvf 파일명 그리고 필요한 패키지들을 설치해야 한다 sudo apt-get upgrade && sudo apt-get install build-essential m4 gfortran sudo apt-get install imagemagick texlive dvipng 설치 후 압축 해제했던 디렉터리에서 make 명령어를 치면 알아서 설치가 된다 실행 설치 폴더로..
RSA 공개키 개인키 구하는 법 1. p, q선택 파이썬에서 p, q값을 생성하는 방법은 다음과 같다 from Crypto.Util.number import getPrime p = getPrime(1024) #1024 bit q = getPrime(1024) pycryptodome가 설치되어 있지 않다면 $ pip install pycryptodome 로 설치해 준다 2. n 계산 p와 q를 곱하면 n이 된다 n = p * q 3. phi 계산 (p-1)과 (q-1)을 곱하면 phi가 된다 phi = (p - 1) * (q - 1) 4. e 선택 주로 65537이다 다른 값이라도 phi와 서로소인 수 5. d 계산 mod phi에 대한 e의 곱셈의 역원을 구한다 gmpy2의 invert나 divm으로 계..