현대 암호학 42

[현대 암호학] 06-5. RSA 에 대한 공격 / 6. 선택 암호문 공격

5. RSA 에 대한 공격 암호문으로 부터 평문 구하기 해독자(공격자)가 가진 정보 암호 해독자가 알고 있는 것 암호문 : 도청해서 구한다. E와 N : 공개 키로서 공개 되어 있음 암호 해독자가 모르는 것 평문 : 지금부터 해독하려고 하는 내용 D : 개인 키 중 적어도 D는 모름 키타 : 키 쌍을 만든 p, q, L을 모름 암호문으로 부터 평문 구하기 암호문 = (평문)^E mod N 위의 평문을 구하려면 이산 대수 문제를 풀어야 함 이산 대수 문제는 매우 곤란 현재까지 아직 이산 대수를 구하는 빠른 방법을 알지 못함 전사 공격 D의 후보가 되는 수를 순서대로 모두 시도해서 복호화 해본다. D의 비트 수가 크면 클수록 어려워진다. 비트 수가 충분히 크면 전사공격으로 수 D를 찾아내는 것은 현실적으로는..

현대 암호학 2021.06.28

[현대 암호학] 06-4. RSA

4. RSA RSA(Rivest-Shamir-Adleman) https://ko.wikipedia.org/wiki/RSA_암호 RSA는 공개 키 암호 알고리즘의 하나 개발자 3명의 이름(Ron Rivest, Adi Shamir, Leonard Adleman)* 로널드 라이베스트, 아디 샤므르, 레너드 애들먼 RSA 응용 공개 키 암호 디지털 서명(공개 키 서명) 키 교환(공개 키 전송/교환 방식) RSA에 의한 암호화 RSA에서 평문도 키도 암호문도 숫자로 변환한 뒤 실행 RSA의 암호화는 다음 식으로 표현 암호문 = (평문)^E mod N 평문을 E 제곱해서 N으로 나눈 나머지 (E, N) : 공개 키 E와 N이라는 한쌍의 수를 알면 누구라도 암호화를 행할 수 있다. E와 N이 RSA 암호화에 사용되는..

현대 암호학 2021.06.28

[현대 암호학] 06-3. 정수론

3. 정수론 약수/공약수/최대공약수/소수/서로소 약수(Divisors) - https://namu.wiki/w/약수(수학) 24의 양의 약수 = 1, 2, 3, 4, 6, 8, 12, 24 어떤 수를 나누었을 때 나머지가 0이 되는 수 즉, 나누어 떨어지는 수(단, 약수는 정수이다.) 모든 자연수는 1과 자기 자신을 약수로 갖는다. 1 보다 큰 자연수 중 1과 자기 자신밖에 약수가 존재하지 않는 자연수를 소수라 한다. 'a는 b의 약수이다'를 a|b라고 표현하기도 한다. 예를 들어 4|20은 참이지만 5|21은 거짓이다. 최대 공약수(GCD) - https://ko.wikipedia.org/wiki/최대공약수 8, 12의 공약수는 1, 2, 4 이다. * 8의 약수 = 1, 2, 4, 8 * 12의 약수..

현대 암호학 2021.06.28

[현대 암호학] 06. 공개 키 암호 - 1. 키 배송 문제 / 2. 공개 키 암호

1. 키 배송 문제 키 배송 문제(Key Distribution Problem) 대칭 암호를 사용하려면 송신자/수신자가 대칭키(공유키, 비밀키)를 사전에 공유해야 하는 문제 대칭 키를 보내지 않으면 밥은 복호화 할 수 없다. 안전하게 키를 보내는 방법은? 키를 보내 버리면 도청자 이브도 복호화할 수 있다. 키 배송 문제를 해결하기 위한 방법 키의 사전 공유에 의한 해결 => ex: SSH public key authentication 키 배포 센터에 의한 해결 => ex: kerberos Diffie-Hellman 키 교환 => ex: DH(DHE) => SSH 공개 키 암호에 의한 해결 => ex: SSL/TLS => HTTPS, SMTPs, POPs, .... 키 사전 공유 "안전한 방법으로 키를 사..

현대 암호학 2021.06.28

[현대 암호학] 05. 실습(5)

[실습] 소켓 프로그래밍 예제 Network Programming == Socket Programming TCP 소켓 통신 과정 서버에서는 socket(), bind(), listen(), accept()순으로 함수들을 호출하여 리스닝 소켓을 생성한다. 리스닝 소켓을 클라이언트의 접속을 대기하는 역활을 한다. 클라이언트가 연결되면 accept()에서 새로운 소켓을 리턴하여 클라이언트와 통신시 사용하도록 한다. 클라이언트는 connect() 함수를 호출하여 서버에 연결을 시도한다. 이때부터 3-way 핸드세이크를 시작한다. 핸드 세이크는 네트워크를 통해 양쪽이 연결되는 것을 보장하므로 중요하다. 클라이언트가 서버에 도달할 수 있으며 그 반대도 마찬가지이다. 연결이 완료된 후, 서버와 클라이언트는 send(..

현대 암호학 2021.06.24

[현대 암호학] 05. 실습(4)

[실습] nc CMD 사용한 DES 암복호화 서버/클라이언트 만들기 사용시스템 칼리리눅스(KaliLinux) 작업 시나리오 칼리리눅스에서 두개의 터미널을 띄워서 하는 하나는 서버(serverDES.py), 다른 하나는 클라이언트(clientDES.py)로 사용한다. 개발은 양쪽 터미널에서 작업한다. (사전 테스트) nc CMD 사용법 [TERM1] # nc -l -p 7979 [TERM2] # nc 127.0.0.1 7979 ls date [TERM1] # nc -l -p 7979 > file.out [TERM2] # nc 127.0.0.1 7979 file.out [TERM2] # nc -q 1 127.0.0.1 7979 < /etc..

현대 암호학 2021.06.24

[현대 암호학] 05. 실습(3)

[실습] 3DES(TDES) 사용하여 파일에 암복호화 저장하기 plaintext -> E(msg) -> ciphertext 3DES|AES-CBC(iv) 3DES|AES-CTR(nonce) 3DES|AES-EAX(nonce, tag) File1 -> plaintext -> E(msg) -> ciphertext -> File2 3DES|AES-CBC(iv) 3DES|AES-CTR(nonce) 3DES|AES-EAX(nonce, tag) 사용 시스템 kali 3DES 사용하여 파일에 암호화 하여 저장하고 복호화 하기 1) 준비사항(plain.txt 파일 준비) 2) 프로그램 작성 3DES-CBC iv = get_random_bytes(8) key = get_random_bytes(24) pad, unpad ..

현대 암호학 2021.06.24

[현대 암호학] 05. 실습(2)

[실습] AES-CBC 사용하여 메시지를 암복호화 하는 프로그램 개발 사용시스템 kali AES 알고리즘을 사용하여 메시지를 암호화/복호화 하는 프로그램을 개발 프로그램 개발시 다음과 같은 사항을 참고 한다. AES 입력 : 16 bytes(128 bits) 평문 입력 출력 : 16 bytes(128 bits) 암호문 출력 블록 단위 : 16 bytes(128 bites) 키 길이 : 16 bytes(128(16), 192(24), 256(32)) Block Cipher Mode : CBC IV : 16 bytes(128 bits)의 iv 필요 Padding : 패딩(padding)에 대한 처리(암호화: pad, 복호화: unpad) PyCryptodome 패키지에서 byte string 사용해야 한다...

현대 암호학 2021.06.23

[현대 암호학] 05. 실습(1)

[실습] 3DES(TDES)-CBC 사용하여 메시지를 암복호화 하는 프로그램 개발 사용시스템 kali 3DES(TDES, DES-3, DES3)사용하는 메세지를 암호화 또는 복호화 하는 프로그램 제작 프로그램 제작시 다음과 같은 사항에 대해서 참고하여야 한다. 3DES(Triple DES) 입력 : 8 bytes (64 bits) 평문 입력 출력 : 8 bytes (64 bits) 암호문 출력 블록 단위 : 8 bytes (64 bits) 키 길이 : 24bytes (K1(8) + K2(8) + K3(8))[참고] 3DES-EDE2, 3DES-EDE3 Block Cipher Mode : CBC IV : 8 bytes(64 bits)의 iv 필요 Padding : 패딩(padding)에 대한 처리(암호화:..

현대 암호학 2021.06.23

[현대 암호학] 05-5. CTR 모드

5. CTR 모드 CTR(CounTeR) 모드 CTR 모드는 1씩 증가해 가는 카운터를 암호화해서 키 스트림을 만들어 내는 스트림 암호 블록을 암호화할 때마다 1씩 증가해가는 카운터를 암호화해서 키 스트림을 만든다. 카운터(CounTeR) 만드는 법 카운터 초기값 암호화 때마다 다른 값(Nonce, 비표)을 기초로 해서 작성 nonce + block number "평문 블록1"의 카운터(초기값) 66 1F 98 CD 37 A3 8B 4B 00 00 00 00 00 00 00 01 "평문 블록2"의 카운터 66 1F 98 CD 37 A3 8B 4B 00 00 00 00 00 00 00 02 "평문 블록3"의 카운터 66 1F 98 CD 37 A3 8B 4B 00 00 00 00 00 00 00 03 "평문..

현대 암호학 2021.06.23