등등/네트워크 시스템 보안

네트워크 시스템 보안 - 3일차

공쓰기 2022. 5. 2. 17:36

오늘의 주요 내용 : 데이터를 어떻게 보호할 것인가?

- 암호화

- 대칭키

- 공개키

- 인증서

- SSL/TLS

 

 

평문을 전령을 통해서 보냈더니 갈리아 사람들에게 빼앗김 ------> 내용이 노출됨(Sniffing)

 

* 시저의 암호화 : 치환 암호화

 

* 대칭키(Symmetric Key) : 암호화키와 복호화키가 서로 대칭을 이룸

= 비밀키(Secret Key) : 사용자들이 비밀리에 보관해야 하기 때문

= 단일키(Single Key) : 암호화키를 알면 대칭되는 복호화키도 알 수 있기 때문 ---> 사실상 하나의 키

 

* 순열 : 순서를 바꿈

     attac  kpari  snext  frida  y

     12345  ---->  31524 : 암호화키

     tactaakiprestnx.....    -----> ???

     복호화키 : 31524 ----> 12345 (순서재배치)

 

* ROT13 : 알파벳을 반으로 나누어서 매칭을 시키는 방법

- 단점 : 숫자와 특수문자를 변환할 수 없음, 대소문자 구분 못함

 

* ROT47 : 대,소,숫,특수문자를 섞어서 매칭을 시키는 방법

 

* 그리스, 이집트 ------> 컴퓨터에서 사용하지 않음

  시저의 암호화 -----> 컴퓨터에서 사용되고 있음(지금까지)

 

* 자격증 사이트

https://www.q-net.or.kr/

 

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)이 확인함

 

* 광고를 빼고 보여주는 웹 브라우저

https://brave.com/

 

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의 등록기관), 등등