공부/시스템,네트워크 보안

9월 19일 시스템/네트워크 보안 3

마준123 2022. 9. 19. 13:44

 * 암호화

  = 암호화의 역사 시저가 군단장에게 게르만족이 무서워서 암호화 된 전령을 보내는것으로 시작

 

 * Caesar 가 사용한 최초의 암호화 방식 ( 치환 : 다른 글자로 바꾸는 것 )

 = 평문 : attack - paris - next - friday

    암호문 : cvvcem - rctku - pgzv - htkfca

 

 = 암호화키 : shift + 2, 복호화키 : shift -2 ---------> 서로 대칭을 이룸 ( 대칭키 )

 

 * 용어정리

 = 평문 : 누구나 읽을 수 있는 글

 = 암호문 : 아무도 읽을 수 없는 글 (복호화 해야 읽을 수 있다.)

 = 암호화 : 평문을 암호문으로 만드는 것 

 = 복호화 : 암호문을 평문으로 만드는 것

 = 암호화키 : 평문을 암호문으로 만드는 규칙

 = 복호화키 : 암호문을 평문으로 만드는 규칙

 

 

 * 대칭키 방식 : 치환(S)과 순열 (P) ---> 현재 SPN방식을 사용 (S치환P순열N네트워크 --->치환과 순열의 반복 )

 = 암호화키와 복호화키가 서로 대칭을 이룸 ---> 대칭키 ( Symmetric Key )

 = 암호화키를 알면 복호화키를 알 수 있음 -----> 단일키 ( Single Key )

 = 대칭키는 다른 사람이 알면 안됨 -------->  비밀키 ( Secret Key )

 = 한번의 세션에서 사용 ----------------------->세션키 ( Session Key )

 

 * Matrix 방식 

 = 암호화 : 가로로 쓰고 세로로 읽어 들인다

 = 복호화 : 세로로 쓰고 가로로 읽어 들인가

 

 * ROT13 방식의 단점은??

 = 영어만 암호화됨

 = 숫자, 특수문자는 암호화 안됨 ---> 이문제를 해결하기 위해서 ROT47이라는 방식 등장

 

 * ROT47

 = 대/소/숫/특수문자 94개를 반으로 나누어서 섞어서 사용하는 방식

 

 * DES

 

실습 ) DES 암호화  :  https://www.flashbit.site/ko/des/

U2FsdGVkX18u27F/j0wMOTJQ/0zboEBBV68LeIC6a9TIaIDJ6yF5/A==  ( 암호문 )

대칭키 ( 비밀키 ) : 12345678

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 *  대칭키의 문제점

 = 키를 전달하는 문제점 ( 안전하게 전달하기가 힘들다. )

 = 키의 개수의 문제점 ( 너무 많아진다 )

( 내가 그린거 아님 )

 

 = 2 -> 1개의 키가 필요

 = 3 -> 3개의 키가 필요

 = 4 -> 6개의 키가 필요

 = 5 -> 10개의 키가 필요

 = N -> N(N-1)/2개의 키가 필요

 

Ex) 항공사 마일리지 교환 프로그램

->마일리지(개인정보)를 암호화
->항공사들이 약 20
->20*19/2 = 190????

 

* Diffie-Hellman

= 이산대수의 어려움을 이용해서 공개키 방식을 인류 최초로 만듦 (1976년)

= 누구나 개인키와 공개키 쌍을 가짐

 

 

실습 ) VM 우분투 접속~

$ sudo apt update

$ sudo apt intall ssh

$ cd /etc/ssh

$ ls -l

 

-rw-r--r-- 1 root root 535195  3월 30 22:03 moduli
-rw-r--r-- 1 root root   1603  5월 29  2020 ssh_config
drwxr-xr-x 2 root root   4096  5월 29  2020 ssh_config.d
-rw------- 1 root root    492  9월 19 11:45 ssh_host_ecdsa_key         //개인키 (Private Key ) : 확장자 없음
-rw-r--r-- 1 root root    169  9월 19 11:45 ssh_host_ecdsa_key.pub  // 공개키 (Public Key ) : 확장자가 pub임
-rw------- 1 root root    399  9월 19 11:45 ssh_host_ed25519_key
-rw-r--r-- 1 root root     89  9월 19 11:45 ssh_host_ed25519_key.pub
-rw------- 1 root root   2590  9월 19 11:45 ssh_host_rsa_key
-rw-r--r-- 1 root root    561  9월 19 11:45 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root    342  9월 19 11:45 ssh_import_id
-rw-r--r-- 1 root root   3289  3월 30 22:03 sshd_config
drwxr-xr-x 2 root root   4096  3월 30 22:03 sshd_config.d

 

SSH 설치화면

 = SSH 설치화면

   공개키의 HASH값 생성

   SSH 접속시 물어봄

 

 

 * 개인키, 공개키의 특징

 = 개인키는 나 혼자만 보는 것 (600), 공개키는 상대방에게 제공하기 위한 것 (644)

 = 공개키를 상대방에게 제공 ( 평문으로 가도 상관 없음, 이메일로 보내도 됨, 딴 사람이 가져도 상관 없음 )

 = 자신의 개인키와 상대방의 공개키를 연산해서 생성된 키는 양쪽이 일치하게됨  ---> 대칭키로 사용하면 됨 ( 대칭키를 교환할 필요 없음 )

 =  대칭키 교환의 문제를 해결 ( 공개키만 제공했는데 대칭키가 생성 되었음 )

 = ID와 PW를 모두 대칭키로 암호화 해서 상대방에게 제공하면 됨, 상대방도 같은 대칭키가 있기 때문에 복호화 가능함

 

 * RSA 등장

 = 소인수 분해의 어려움에 근거 91 = A * B = 7 * 13 ( 1은 제외 ) 

 = 양방향 암호화 가능 :  개인키로 암호화하면 공개키로 복호화, 공개키로 암호화 하면 개인키로 복호화

 = 특허가 2001년쯤 만료되어서 무료로 사용 가능 ---> 상당히 많이 사용 ( De Facto )

 

-------------------------------------------------------------------------------------------------------------------------------------------------

 

 * SSL / TLS

 = 웹 브라우저와 웹 서버간의 암호화를 하기 위한 프로토콜

 =  넷스케이스에서 SSL ( Secure Socket Layer ) 를 만듬 ---> 웹 암호화 시작

 = SSL1.0 SSL2.0 ---> 취약점 발견되어 SSL3.0을 만들었지만 취약점이 있음

 = 표준화하기로 결정하고 이름을 TLS (Transport Layer Security ) 로 변경, SSL3.0의 업그레이드 버전으로 TLS1.0을 만듬

 = 지금은 SSL은 사용하지 않지만 관용적으로 SSL이라고 한다, 실제로는 TLS를 사용하고 있다.

 = 최근 TLS는 1.3 버전을 사용하고 있음 ( TLS1.3과 TLS1.2만 권장, TLS1.1 이하는 비권장 )

 

 * 구글 보안팀

 = 세계적인 해커들을 고용해서 각종 테스트, 크래킹 등을 해본다고 함

 = https://shattered.io/  SHA-1 의 충돌쌍을 공개함

 

들어가서 2가지 Pdf 파일을 받으면

위 사진처럼 다른 파일 두개를 받을 수 있는데

 

놀랍게도  FastHash로 열어보면

SHA - 1 의 충돌 ( 해시값이 같음을 의미 )

해시값이 똑같이 나오는걸 볼 수 있다.

이런걸 보고 해시값의 충돌이라고 한다. ( 이 경우는 다른 해시값은 다르고 SHA-1 의 해시값만 같음 )

 

 = MD5와 SHA-1은 덩이상 안전하지 않다 ----> ISMP-P, ISO27001에서 사용하면 안된다고 함 ( 인증 안됨 )

 

-------------------------------------------------------------------------------------------------------------------------------------

 

 * 전자서명 ( 검증 ) : 무결성, 인증, 부인봉쇄

 

 * 전자서명에 대하여 설명하시오.

 = 생성 :  원문의 해시값에 송신자의 개인키로 서명을 하고 원문과 함께 보냄

 = 검증 : 서명된 해시값을 송신자의 공개키로 복호화 하고 원문의 해시값과 비교해서 일치하는지 확인

 = 일치하면 무결성 검증, 인증, 부인봉쇄 확인됨

 = 무결성 ( 내용 변조되지 않았음 ) , 인증 (송신자에 대한 검증 ), 부인봉쇄 ( 아니라고 하지 못함 )

 

 = 그니까 한마디로 ( 본문내용 ) + ( 본문내용을 자신의 개인키로 암호화한 해시값 )을 동시에 보내고 받은사람은 그 해시값을 다시 송신자의 공개키로 복호화 해서 본문내용과 일치하는지 확인해서 무결성을 검증한다는 뜻!

    ex ) 은행 이체 마지막 단계 " XX은행 YYY계좌로 얼마를 입금 하시겠습니까?" 공인 인증서가 보여짐 ---> 비밀번호를 입력 ( 개인키 사용 : 서명 )

    ex ) 스마트폰 이체 : " ㅇㅇ 은행 ㅁㅁㅁ 계좌로 얼마를 이체" 하겠습니까? 지문 인식을 하면 ----> 본인임이 확인 ---> 빼박

 

 * 공개키에 대한 검증이 필요함 

 = 진짜 거래 상대의 공개키 인가? <-- 인증기관이 발급 <-- 인증기관이 맞는지? <-- 루트 인증기관 <-- OS에 들어있음 ( 인터넷 옵션 )

 

----------------------------------------------------------------------------------------------------------------------------------------------

 

* http는 평문으로 전송 : TCP80를 사용

  https는 암호문으로 전송 : TCP443을 사용  ----> TLS가 동작하면서 인증서를 받아옴 (인증서 안에는 방문한 웹사이트의 공개키가 들어있음)

   (세션키를 생성한 다음, 서버의 공개키로 암호화해서 보내줌 ----> 서버는 자신의 개인키로 복호화하면 세션키 나옴 : 양쪽이 세션키 갖게 됨)

 

* 인증서(Certificate)

= 형식 : X.509v3

= 인증서의 주요 내용 : 서명알고리즘, 유효기간, 발급자, 주체, 주체의 공개키, 서명된 해시값 등

= 공개키가 올바른지 확인 (주체의 것이 맞는지 검증)

= 방법은 전자서명과 비슷함,

= 생성 : 원문(공개키)의 해시값을 구해서 송신자(CA)의 개인키로 서명

= 검증 : 송신자(CA)의 공개키로 서명된 해시값을 복호화한 후, 원문(공개키)의 해시값을 구해서 비교해봄

 

* PKI (공개키 기반 구조)

1) NPKI (National Public Key Infrastructure)

= PAA(정책기관) : 미래부

= Root CA : KISA

= CA(인증기관) : 금융결제원, 정보인증, 전자인증, Koscom, 무역정보협회

= RA(등록기관) : 은행, 증권회사, 대행업체 등등

 

2) GPKI, MPKI, EPKI 등등

 

---------------------------------------------------------------------------------------------------------------

 

 * 우분투에서 root 권한 사용하기

$ sudo [ 명령어 ]

  (비밀번호는 자신의 게정 비밀번호 사용 )

 

 * 우분투에 설치된 SSH 공개키의 위치

 $cd /etc/ssh