분류 전체보기 117

[현대 암호학] 07-1. 하이브리드 암호 시스템

1. 하이브리드 암호 시스템 하이브리드 암호 시스템 = 대칭 암호 + 비대칭 암호 대칭키 암호방식과 공개키 암호방식 비교 항목 대칭키 암호화 방식 공개키 암호화 방식 키의 상호관계 암호화키 = 복호화키 암호화키 ≠ 복호화키 암호화 키 비밀(secret key) 공개(public key) 복호화 키 비밀(secret key) 비밀(private key) 암호 알고리즘 비밀/공개 공개 대표적인 예 AES RSA 비밀 키 전송 필요 불필요 키 개수 n(n-1)/2 2n 안전한 인증 곤란 용이 암호화 속도 고속 저속 경제성 높다 낮다 전자서명 복잡 간단 대칭 암호 기밀성을 유지한 통신이 가능 키 배송 문제 해결이 필요 공개 키 암호 키 배송 문제를 해결할 수 있음 하이브리드 암호 시스템 공개 키 암호의 2가지 ..

현대 암호학 2021.06.29

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

[실습] ECDSA 사용한 전자서명 구현하기 DSA(Digital Signature Authentication) 광범위한 공개 키 서명 알고리즘이다. 보안은 이산 로그 문제(DLP)를 기반으로 한다. DSA key 생성(private key, public key) 생성 DSAKeyGen.py from Crypto.PublicKey import DSA from Crypto.Signature import DSS from Crypto.Hash import SHA256 # 새로운 DSA key 생성 prikey = DSA.generate(2048) print(prikey) pubkey = prikey.publickey().export_key() print(pubkey) b'-----BEGIN PUBLIC KEY..

현대 암호학 2021.06.28

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

[실습] RSA 공개키/개인키 생성하기 RSA 공개키 암호 구현하기 공개키/개인키가 생성되는 과정을 구현해 보자. PyCryptodome에서 제공되는 대표적인 공개키 암호 알고리즘 : DSA, ElGamal, RSA, ECDSA DSA, ECDSA : 공개키 서명 Elgamal, RSA : 공개키 암호 + 공개키 서명 PyCryptodome 키 객체 생성 방법 - 4가지 비대칭 키는 python 객체로 표시된다. 각 객체는 개인키 또는 공개키가 될수 있다. (1st) generate() : Crypto.PublicKey.RSA.generate() 키가 무작위로 생성된다.(ex: RSA.generate(2048)) (2nd) import_key() : Crypto.PublicKey.RSA.import_ke..

현대 암호학 2021.06.28

[현대 암호학] 06-7. 기타 공개키 암호 / 8. 공개 키 암호에 관한 Q&A

7. 기타 공개키 암호 ElGamal 방식 ElGamal 방식은 Taher ElGamal에 의한 공개 키 알고리즘 RSA는 소인수분해의 어려움을 이용 ElGamal 방식은 이산대수를 구하는 것이 어렵다는 것을 이용 ElGamal 방식 암호화에서는 암호문의 길이가 평문의 2배가 되어 버린다는 결점 GPG(GnuPG)에서 사용 Rabin 방식 Rabin 방식은 M.O. Rabin에 의한 공개 키 알고리즘 Rabin 방식은 mod N으로 평방근을 구하는 것이 어렵다는 사실을 이용 Rabin 방식 공개 키 암호의 해독은 소인수분해 정도로 어렵다는 것이 증명 타원곡선 암호 타원 곡선 암호(ECC, Elliptic Curve Cryptosystems)는 최근 주목받고 있는 공개 키 암호 RSA에 비해 키의 비트 수..

현대 암호학 2021.06.28

[현대 암호학] 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