네트워크 시스템 보안 - 3일차
오늘의 주요 내용 : 데이터를 어떻게 보호할 것인가?
- 암호화
- 대칭키
- 공개키
- 인증서
- SSL/TLS
평문을 전령을 통해서 보냈더니 갈리아 사람들에게 빼앗김 ------> 내용이 노출됨(Sniffing)
* 시저의 암호화 : 치환 암호화
* 대칭키(Symmetric Key) : 암호화키와 복호화키가 서로 대칭을 이룸
= 비밀키(Secret Key) : 사용자들이 비밀리에 보관해야 하기 때문
= 단일키(Single Key) : 암호화키를 알면 대칭되는 복호화키도 알 수 있기 때문 ---> 사실상 하나의 키
* 순열 : 순서를 바꿈
attac kpari snext frida y
12345 ----> 31524 : 암호화키
tactaakiprestnx..... -----> ???
복호화키 : 31524 ----> 12345 (순서재배치)
* ROT13 : 알파벳을 반으로 나누어서 매칭을 시키는 방법
- 단점 : 숫자와 특수문자를 변환할 수 없음, 대소문자 구분 못함
* ROT47 : 대,소,숫,특수문자를 섞어서 매칭을 시키는 방법
* 그리스, 이집트 ------> 컴퓨터에서 사용하지 않음
시저의 암호화 -----> 컴퓨터에서 사용되고 있음(지금까지)
* 자격증 사이트
Q-Net 자격의 모든 것
www.q-net.or.kr
* SOS : 짧은거세번(S) 긴거세번(O) 짧은거세번(S)
* 이니그마 : 독일군의 암호화기계 (기계를 사용한 암호화 장치)
봄버 : 영국의 수학천재 '앨런 튜링'이 이니그마를 복호화하는 장치를 개발 (Turing Completeness : 다용도로 사용 가능)
* 이미테이션 핵심 장면
https://www.youtube.com/watch?v=o4dCzqy1JrY
* 케빈 미트닉 : 컴퓨터 및 전화 접근 금지 명령을 받은 최초의 인간 (보이스 피싱 원조)
저서: 네트워크 속의 유령(자서전)
* 대칭키를 하루에 몇번이나 사용할까요? 주로 AES를 사용
1) 10번
2) 20번
3) 30번 이상 ------> Wi-Fi, 각종 로그인, 주소표시줄에 자물통모양이 보이면(https), 어딘가에 접속하면 대부분 등등
* ECB (electronic code book)
i am : C2DBD0B9DACF9061
i am hungry : C2DBD0B9DACF90611F19BE94B4F2420C
-----> 암호화 부분을 블럭 단위로 따로따로 계산해서 붙이는 방식
-----> 부분부분 복호화가 가능해짐
* CBC (Cipher Block Chaining)
- 앞의 암호문을 뒤의 평문하고 XOR연산을 한 다음, 암호화를 하는 방식
- 연쇄효과가 생겨서 앞의 암호문을 깨지 못하면 뒤의 암호문을 깰 수 없음
* 대칭키
- IBM의 Lucifer System을 Downgrade를 해서 DES(최초의 대칭키)로 NIST(국립표준원)에서 지정 (1977년)
- DES는 데이터를 64bit로 잘라서 64bit짜리 키로 암호화를 하는 방식
- 64bit키중에서 56bit만 암호화키이고 8bit가 패리티비트(오류검사)로 되어 있음
- 2000년쯤에 DES Cracking사건 이후로 표준에서 제외됨, 임시로 3DES를 사용
- 2001년에 새로운 암호화 표준 공모 16개 업체가 지원(우리나라 업체도 있었음:Future System) ---> 1라운드 대부분 탈락
- 2라운드에 올라간 암호화 알고리즘 : RC6, Twofish, Rijndael 등 -----> AES로 선정된 것은 Rijndael (지금까지 표준)
- 대칭키=비밀키=단일키=세션키
* Diffie-Hellman 방식
- 최초의 공개키
- 개인키를 이용해서 공개키를 생성하고, 상대방에게 공개키를 제공
- 상대방의 공개키와 자신의 개인키를 연산해서 세션키를 만들어 냄
- 상대방과 나만 가지는 키이므로 다른 사람은 가질 수 없음 (비밀성 보장)
- 세션키를 교환할 필요가 없어서 키 전달의 문제를 해결하였음
* MITM (중간자 공격)
- 해커(Eve)는 자신의 공개키를 속여서 양쪽에 줌
- Alice는 Bob의 공개키인 줄 알고 세션키를 생성하고, Bob은 Alice의 공개인줄 알고 세션키를 생성하게 됨
- Alice가 암호화해서 보내도 해커가 복호화 가능, 내용을 변조해서 Bob에게 전달할 수도 있음
- '12시에 만나요 브라보콘 줄께요' --(중간자조작)--> Bob이 받을 때는 '2시에 만나요 브라보콘 줄께요'
* Boss와 Killer의 상황
1) 기밀성
Boss가 Killer에게 'Johnny를 죽여라'라는 메시지를 비밀리에 보내려고 합니다.
Boss는 무슨키로 암호화를 해야할까요? Killer의 공개키
-----> Killer는 메시지를 비밀리에 받았지만 죽이러 가지 않았습니다. 왜?? Boss가 시켰다는 증거가 없음
2) 인증
Boss가 자신의 개인키를 사용해서 'Johnny를 죽여라'를 암호화한다음 Killer에게 보냈습니다.
Killer는 Boss의 공개키로 복호화했음 ----> Boss의 공개키로 복호화된다는 것은 Boss가 개인키를 사용했기 때문
Boss의 공개키는 누구나 사용할 수 있기 때문에 Johnny도 내용을 복호화할 수 있었음 ----> 작전 누설됨
3) 기밀성+인증
Boss가 메시지를 자신의 개인키로 암호화한 뒤, Killer의 공개키로 암호화해서 Killer에게 보냄
Killer는 자신의 개인키로 복호화하고, Boss의 공개키로 복호화하면 메시지를 볼 수 있음
Killer가 죽이러가지 못한 이유는? 메시지가 변조되지 않았다는 증거가 없어서 (그리고, 시간이 너무 오래 걸려서...)
cf. 공개키 방식은 연산의 복잡성 때문에 시간이 많이 걸림 ----> 데이터는 대칭키로 암호화해야 함.
공개키는 대칭키를 전달하는 용도로만 사용해야 함 ----> TLS(https를 사용할 때, 서버의 공개키를 받아옴, 대칭키를 공개키로 암호화)
* 공동인증서 (구, 공인인증서)
- 사용자의 인증받은 개인키(Private Key) ------> 서명용
* 웹서버(서버의 개인키와 서버의 공개키)에서 클라이언트(키없음)와 암호화 통신(TLS)을 하려고 함
- 대칭키를 주고 받으려면? (키 교환 부분만)
---> 서버의 공개키를 클라이언트에게 제공
클라이언트는 세션키를 생성하여 서버의 공개키로 암호화 ----> 전송
서버는 자신의 개인키로 복호화하여 세션키를 꺼냄 --------> 클라이언트와 서버는 세션키를 공유하게 됨
데이터를 세션키로 암호화해서 서로 주고 받을 수 있게됨
* Function을 중국사람이 함수라고 함
- 발음이 비슷한 函數로 번역 (가차: 음만 따서 붙인 이름)
* 해시 함수
- 의미 없는 값, 길이가 일정, 원문이 같으면 해쉬값도 같음(무결성)
실습) Kali Linux에서 해시함수 사용하기
$ cd /usr/share/windows-binaries
$ md5sum klogger.exe
ebf2b608edef05c427b54bda80090aa9 ------> 16진수(2의4승=4bit)가 32자리이므로 128bit
$ sha1sum klogger.exe
196bf6f43f85f97cc2851c840da8e451256995cb ----> 4bit씩 40자리이므로 160bit
$ sha256sum klogger.exe
cf2340b2c9fb36f84e008567854a20fbeb6cadc3da2ab7d5b26bacd4315c54eb -----> 4bit씩 64자리이므로 256bit
$ cd ~
$ sudo vi test.txt
i // 편집모드로 바뀜 (--insert--)
Good day to die
ESC // 편집모드 종료됨, 명령모드로 바뀜
:wq // 저장 후 종료
$ md5sum test.txt
65604dc39424e64f720bde56837d6661
변조를 해보면,
$ sudo vi test.txt
i
(맨뒤에 ~을 붙입니다)
ESC
:wq
$ md5sum test.txt
00f0c61e30eabdfa3e42d750b0b8fd08
$ sudo vi contract.txt
i
I will give you $1000000
ESC
:wq
$ md5sum contract.txt
0280ca30ee2dca0e6eaa3248c217a217
만약, 0을 지워버리면???
dc901c8a9b116a155b6257b701347af3 // 전혀 다른 해쉬값이 나옴 ----> 변조하였음(무결성이 훼손)
cf. 블록체인의 원리는 해쉬값을 모든 채굴기에게 공유 -----> 임의로 바꿀수 없음
Quiz) 해쉬값을 알려주면 원문을 맞추는 컴퓨터가 있음. 그 컴퓨터의 이름은 무엇일까요? 채굴기
엄청난 연산을 그래픽 카드로 수행 ----> 가장 먼저 원문을 찾으면 블록을 생성할 권리를 줌
Quiz) 2의 128승의 크기는? 사하라 사막의 모래알 개수
* MD5와 SHA1을 사용해서 개인정보를 저장하면 ISO27001, ISMS-P 인증에서 결함으로 판단함
----> 아직까지는 SHA-256은 안전(Bitcoin 및 공동인증서에서도 사용중)
* 인증서(Certificate)
- 공개키의 주인이 일치함을 검증한 공개키
- 인증기관(CA)이 확인함
* 광고를 빼고 보여주는 웹 브라우저
Secure, Fast & Private Web Browser with Adblocker | Brave Browser
The Brave browser is a fast, private and secure web browser for PC, Mac and mobile. Download now to enjoy a faster ad-free browsing experience that saves data and battery life by blocking tracking software.
brave.com
----> Android, iOS(아이폰), PC용 제공
- 유튜브 광고 스킵
- Chrome Source 코드로 만듦, Chrome 앱들이 모두 호환 됨
- 자체 암호화폐 사용을 추천 (체크 해제하면됨)
* PKI (Public Key Infrastructure)
1. 최상위 인증기관 (Root CA, PCA)
- 인증기관을 검증하고 인증기관을 인증하는 역할
2. 인증기관(CA : Certificate Authority)
- 인증서를 발급하는 기관 (개인키 사용해서 서명하는데 1년에 약 50만원 정도)
3. 등록기관(RA : Registration Authority)
- 공개키의 신청자가 올바른지를 검증하는 역할을 대행해줌
4. 주체 : 인증서 발급을 신청한 기업 또는 단체
참고) 한국전자인증(crosscert.com)
- NPKI (국내 인증)의 인증기관 역할
- 글로벌 인증의 등록기관 역할 (Digicert, Thawte, GeoTrust 들의 등록기관 역할)
* 루트 인증기관의 인증서 확인하기
- 인터넷 옵션 > '내용'탭 클릭 > 인증서 클릭 > 신뢰할 수 있는 인증서 (수십개 있음)
http (TCP80) ----> 암호화 안됨
https (TCP443) -----> TLS동작 : 서버(IIS,Apache)의 TLS인증서(공개키)를 클라이언트(웹브라우저)에게 제공
$ cd /etc/ssh
$ ls –l
-rw------- 1 root root 2590 Apr 28 21:37 ssh_host_rsa_key //private key(개인키)
-rw –r—r—1 root root 563 Apr 28 21:37 ssh_host_rsa_key.pub //public key(공개키)
*RA
-NPKI의 공인인증기관(CA) : 금융결제원, Koscom, 한국정보인증, ,,
-등록기관(RA) : 은행(금융결제원의 등록기관), 증권회사(Koscom의 등록기관), 등등