SK shieldus Rookies 9기/시스템 ,네트워크 보안

시스템/네트워크 보안 기술 수업 3일차 (22/09/19)

ksh_5 2022. 9. 19. 21:01

1) 암호화

 

  • 대칭키 방식

 

- 치환(S)과 순열(P) → 현재 SPN방식 사용 ( N : 네트워크) 

- 암호화 키와 복호화 키 서로 대칭 → 칭키(Symmetric Key)

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

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

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

 

 

  • Matrix 방식

 

- 암호화 : 가로로 쓰고 세로로 읽어 들임

- 복호화 : 세로로 쓰고 가로로 읽어 들임

 

 

  • ROT13 방식의 단점

 

- 영어만 암호화 (숫자, 특수문자 암호화 X)

  → ROT47 방식 등장

 

 

  • ROT47

 

- 대/소/숫/특수문자 94개를 반으로 나눠 섞어 사용

더보기

def rot47(s):

    x = []

    for i in range(len(s)):

        j = ord(s[i])

        if j >= 33 and j <= 126:

            x.append(chr(33 + ((j + 14) % 94)))

        else:

            x.append(s[i])

    return ''.join(x)

 

 

  • 암호화하는 이유

 

- 기밀성(Confidentiality) : 내용이 노출되지 않도록 하는 것

- 무결성(Integrity) : 내용이 변조되지 않도록 하는 것

- 인증(Authentication) : 올바른 사용자임을 증명하는 것

- 부인봉쇄 : 아니라고 하지 못하는 것

 

 

  • 대칭키(Symmetric  Key) = Secret Key = Session Key

 

- 암호화 키와 복호화 키가 서로 대칭 → 사실상 하나의 키

- Dr.Feistel 방식 : Lucifer, DES, 3DES 등

 

 

  • DES

 

- 블록 암호화 방식 : 데이터를 64bit(블록)씩 잘라 암호화를 하는데, 키의 길이도 64bit

- 키는 64bit인데, 실제 암호화 키는 56bit, 나머지 8bit를 패리티 비트로 채움

 

 

  • SSL / TLS

 

- 웹브라우저와 웹서버 간 암호화를 하기 위한 프로토콜
- Netscape에서 SSL(Secure Socket Layer)를 만듦 → 웹 암호화 시작
- SSL 1.0, SSL 2.0 → 취약점 발견되어 SSL3.0을 만들었지만 취약점 있음
- 표준화하기로 결정하고 이름을 TLS(Transport Layer Security)로 변경

- SSL3.0의 업그레이드 버전으로 TLS1.0을 만듦
- 지금 SSL은 사용X 관용적으로 SSL이라고 함 (실제론 TLS를 사용하고 있음)
- 현재 TLS는 1.3 버전 사용

 

 

 

2) Hash Function

 

  • 해시함수 특징

 

- 고정길이 출력 : 원문 길이와 관계없이 해쉬 값은 항상 일정한 길이로 출력

   ex) MD5(128bit), SHA-1(160bit), SHA-256(256bit)

- 일방향 함수 : 해쉬 함수와 해쉬값을 알아도 원분 복구는 불가능

- 충돌 방지

 

※ 구글 보안팀 (프로젝트 제로)
- 세계적인 해커들을 고용해 각종 테스트, 크래킹 등 함
- 목적 : 제로데이 취약점 알아내는 것 (알려지지 않은 취약점을 알아내는 것)
- https://shattered.io/](https://shattered.io/ SHA-1의 충돌 쌍 공개

- MD5와 SHA-1은 더 이상 안전하지 않다. → ISMP-P, ISO27001에서 사용하면 안 됨 (인증 안됨)

 

 

  • 전자서명

 

- 생성 : 원문의 해시값에 송신자의 개인키로 서명 후 원문과 함께 보냄
- 검증 : 서명된 해시값을 송신자의 공개키로 복호화한 후, 원문의 해시값과 비교해 일치하는지 확인
- 일치하면 무결성 검증 (내용 변조되지 않았음), 인증 (송신자에 대한 검증), 부인봉쇄 확인 (아니라고 하지 못함)
   ex) 은행 이체 마지막 단계   "XX은행 YYY계좌로 얼마를 이체"하겠습니까? 공인인증서가 보여짐 → 비밀번호 입력(개인키 사용:서명)

 

  • 공개키에 대한 검증이 필요

 

- 진짜 거래 상대의 공개키인가? ← 인증기관이 발급 ←인증기관이 맞는지? ← 루트 인증기관 ← 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 등