일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 데이터베이스
- global soop
- 숭실대
- swift문법
- 제앱소
- 네이버 치지직
- 운영체제
- 애플 아카데미 후기
- 애플 디벨로퍼 아카데미
- SWIFT
- useReducer
- react
- ObservedObject
- ObservableObject
- StateObject
- 애플 디벨로퍼 아카데미 후기
- 네이버 부스트캠프
- 소프트웨어분석및설계
- apple developer academy 후기
- 애플 디벨로퍼 아카데미 21주차 회고
- Swift 디자인패턴
- OS
- 치지직
- Apple Developer Academy @ POSTECH
- iOS 개발 오류
- sqoop
- 데이터베이스 공부
- Swift 문법
- 앱 비교 프로젝트
- Swift 기능
- Today
- Total
사과하는 제라스
15. 네트워크 보안 본문
목차
- 네트워크 보안 관련 배경 지식
=> OSI 7계층
OSI 7계층 모델은 단순 레퍼런스 모델일 뿐! 실제 사용은 TCP/IP 프로토콜을 사용한다.
data(message)에 TCP헤더(붙으면 segment), IP헤더(붙으면 packet), 이더넷 헤더와 이더넷 트레일러(붙으면 frame)들이 차례로 붙음.
=> 여기서 TLS(Transport Layer Security)라는 것이 패킷의 TCP Data에 대한 1. 인증 2. 암호화를 해준다.
TCP/IP 모델과 OSI 모델 차이
1) TCP/IP: 클라이언트 서버 모델 <=> OSI:개념적인 모델
2) TCP/IP: Standard protocol <=> OSI: reference model(구조에 대한 이해를 위한 모델일 뿐!)
3) TCP/IP: 4계층 <=> OSI: 7계층
Encryption(암호화)
1. Link encryption
:모든 링크 간에 암호화가 독립적으로 수행됨.
이때 각 링크 간에는 키 전달, 키 교환을 위해 공개키를 쓰고 패킷을 암호화하기 위해 대칭키를 쓰는데 이때 이 대칭키가 공유가 되어 있어야함.
ex) 무선 AP(Access Point)에 모바일 노드들에서 패스워드로 접근하는 것.
2. End to End encryption
: 시작점(source)부터 도착점(Destination)까지 암호화가 됨.
ex) kakaotalk에서의 비밀 채팅.(카카오 서버를 통해 채팅하는데 이때 암호화를 통해 보지 못하게 할 수 있음.)
- End-to-End로 암호화 시 IP 헤더는 암호화 X (∵패킷 라우팅을 해야 하므로)
=> 트래픽 흐름은 확인 가능하기 때문에 통신 여부에 대한 확인은 가능.
∴ Link encryption을 통해 IP헤더를 보호함.
이렇게 통신컨텐츠 보호(by End-to-End 암호화), IP헤더 보호(by 링크 암호화)를 하는 기술이 VPN임.(이게 더 발전한게 Deep Web기술)
이렇게 암호화된 메시지 인증을 위해서는 네트워크 패킷에 인증 알고리즘(MAC 알고리즘)이 적용되어야 함.
보안의 중심은 키이며 이를 교환해야 함.
-> 직접 USB로 주고 받기? 이거 너무 힘들고 불편
∴ 위 그림처럼 서로 랜덤한 값을 주고 받고 이 두 값을 동일한 공개된 해쉬함수(키 유도 함수)에 넣어서 동일한 세션 키를 얻은 후
이를 이용하여 암호를 인증함.
=> 이러한 기술이 <Diffie-Hellman 키 교환 프로토콜>을 사용함.
: DLP(Discrete Logarithm Problem)을 이용하여 modular 개념으로 키교환 방식을 사용함.
Alice: 랜덤한 값 x를 가지고서 R1 = g^x mod p를 만듦
Bob: 랜덤함 값 y를 가지고서 R2 = g^y mod q를 만듦
g,p는 공개된 값, R1,R2는 두 노드간의 공유한 값.
(R1)^x = (g^y)^x = g^xy / (R2)^y = (g^x)^y = g^xy => 서로 같은 값 가질 수 있음.
but, 공격자는 R1, R2를 공격해도 x,y 구할 수 없음(DLP때문)
이와 더불어, 단순히 <Diffie-Hellman 키 교환 프로토콜> 로만 키 교환을 하면 중간에 공격자가 Alice인 척(혹은 Bob인 척) 가능.
∴ Alice와 Bob은 각자 PKI 인증서에 기반한 서명을 한 후 전송을 하게 됨. (이는 TLS의 키 교환 때도 마찬가지임.)
- SSL/TLS 프로토콜
: 클라이언트와 서버의 통신에 메시지 인증, 기밀성을 제공하는 기술.
=> 암호화 되지 않은 패킷(ex)http)를 SSL/TLS패킷으로 인코딩되면 암호화가 됨 => https
TCP와 Application 계층 사이에 존재함.
- TLS는 SSL의 버젼 업된 프로토콜로 현재 주로 사용됨.
- HTTPS
: 브라우저 인증서와 서버 인증서를 통해서 키 교환을 해서 암호화를 함.(TLS 암호화 통신)
=> 의미없는 랜덤 값들로 소통함.
- SSL/TLS 프로토콜 구조
1. Handshake Protocol : 어떤 알고리즘을 사용할 것인지 정함.
2. ChangeCipherSpec Protocol : 쓰기로 한 알고리즘과 그 알고리즘에 대한 키 값이 제대로 세팅되었는지 확인.
3. Record Protocol : 암호화와 인증이 적용된 통신을 함.
4. Alert Protocol : 에러가 발생하는지 확인하고 발생 시 나타내줌.
1. Handshake Protocol 구조
- Phase 1
:TLS 버젼, 키 교환 알고리즘, 인증 알고리즘, 암호화 알고리즘, 압축 알고리즘, 랜덤한 값을 서버와 클라이언트 간에 교환을 함.
=> 주로 클라이언트에게 맞춰주는 편임. 서버에서 요구하는 최소 보안 요구사항만 만족하면 그 알고리즘으로 해줌.
- Phase 2
: 키 교환에 필요한 인증서들을 주고 받음.
- 이때 사용하는 방법은 4종류임. 이 중 우리는 가장 많이 사용하는 Ephermeral DH(Diffie-Hellman 키 교환 프로토콜)을 사용함.
g, p는 공유. g에 랜덤한 값 s를 제곱하고 p로 mod 한 후 g^s mod p에 서명해서 전송
- Phase 3
: 클라이언트의 인증서, 공개키, 서명값을 보내줌.
이때, Phase 2, Phase 3는 같은 종류의 옵션으로 키교환을 해야 함.
PM = Pre-master secret => 이걸로 암호화키, 인증키를 뽑아냄.
- Phase 3
: 서로 어떤 알고리즘을 사용할지에 대한 changecipherspec값을 전송하고, 지금까지 주고받은 데이터에 대한 명세서 같은 해쉬값들을 전송함.
1. 서버와 클라이언트가 DH 키 교환을 인증서(certificate) 기반으로 수행함.
2. 이를 통해 PM(Pre-master Secret)을 만듦.
3. 이를 기반으로 해쉬 함수를 통해 필요한 데이터를 찾아냄.
=> 이를 통해 클라이언트와 서버의 인증키, 암호화 키, 초기화 값을 세팅할 수 있음.
2. ChangeCipherSpec Protocol 구조
pending(보류)상태에 있는 값들을 트리거인 ChangeCipherSpec을 통해 active로 모두 옮겨지면 그때부터 암호화 통신을 할 수 있음.
3. Record Protocol
: 암호화 통신을 함. 데이터를 압축하고 이를 MAC 키를 통해 Hash함수에서 MAC(Message Authentication Code)값을 뒤에 붙여줌. 이후 이를 Encryption(암호화)하고 그 값을 전송함.
= 암호화 + 인증이 적용된 패킷이 생성됨.
4. Alert Protocol
: 시스템이 비정상적 동작을 했을 때 에러 처리를 위해 아래와 같은 에러 및 경고 메세지들이 정의되어 있음.
'대학 전공 공부 > 네트워크 프로그래밍' 카테고리의 다른 글
17. OpenSSL(TLS 서버 구축) (0) | 2022.06.09 |
---|---|
16. Basic OpenSSL (0) | 2022.06.08 |
14강. 보안 기본 개념 (0) | 2022.05.21 |
13강. HTTP and Web Client (0) | 2022.05.13 |
12강. DNS (0) | 2022.05.13 |