본문 바로가기

CS

[CS] 보안 - 암호화, 복호화, 인증서, 해싱

1. 암호화/복호화

1) 암호: 정보를 이해할 수 없도록 암호화하거나 다시 해독하기 위한 일련의 단계를 정의한 알고리즘

암호문: 암호 알고리즘을 이용하여 평문에 수행한 암호화한 결과

   ↔평문: 암호화되지 않은 정보

 

2) 암호화 종류

(1) 단방향 암호화: 암호화 후 복호화 할 수 없음(DB에 비밀번호 저장할 때 사용)

(2) 양방향 암호화: 암호화와 복호화 모두 가능(대부분의 정보는 양방향 암호화로 암호화 됨)

 

3) 대칭키와 비대칭키

(1) 대칭키(공통키): 암호화와 복호화에 같은 암호키를 이용

정보를 주고 받는 측이 같은 암호를 사용→ 보안적으로 문제가 됨(키 배송 문제)

* 키 배송 문제 : 사전에 키를 공유하지 않으면 암호화/복호화 불가능

                       : 중간에 탈취 당하면 데이터의 정보 보안이 되지 않음

 

(2) 비대칭키(공개키): 암호화와 복호화에 서로 다른 키를 사용

* 공개키와 비밀키 쌍을 생성하고 공개키는 공유, 비밀키는 생성자만 소유

* 데이터를 비밀키로 암호화하여 인증에 사용

→ 키 배송 문제 해결!
   - 공개키와 비밀키 쌍을 만들어 공개키를 공유

   - 공개키를 받은 상대가 공통키를 생성 후 공통키를 공개키로 암호화해 전달

* 중간자 공격의 위험(암호키 교환에 개입하여 암호화에 사용되는 키를 빼낼 수 있음)

  인증서를 이용한 SSL/TLS라는 인터넷 통신 암호화 방식을 통해 해결

* 배포하는 곳에서 비밀키까지 유출시킬 위험

  → 제 3의 인증기관 CA에 인증서를 요구

 

2. SSL 인증서

1) SSL 인증: SSL인증서가 있는 웹사이트만 실행할 수 있음

                     → HTTPS를 이용한 인터넷 접속은 SSL(TLS)를 이용한 것!

2) SSL 인증서

: 네트워크를 통해 패킷을 주고 받을 때, 누군가가 패킷을 훔쳐볼(Sniffing) 수 있기 때문에 이를 미연에 방지하기 위해 사용

→ 신뢰할 수 있는 것인지 확인하기 위한 용도로 사용.

: SSL 인증서는 '공개 키'라는 것을 포함 → 공개키를 이용해서 클라이언트와 웹 서버가 안전하게 암호화 됨

                                                                   (웹 서버에 기밀로 유지되는 개인키로 복호화)

 

3) 디지털 인증서 원리와 과정

신뢰할 수 있는 제 3의 인증기관인  CA가 필요

(1) BCA에게 자신이 B임을 증명, 자신의 공개키가 B의 공개키가 맞음을 인증하는 인증서 발급

(2) A에게 B의 공개키가 포함된 이 인증서 전달

(3) A는 신뢰할 수 있는 CA에게 진짜 CA가 발급한 인증서인지 확인

(4) 맞다면, 그 인증서에 포함된 B의 공개키로 데이터를 암호화해서 B에게 전달

(5) 암호화된 데이터를 비밀키로 복호화해서 사용

 

4) 인증서 체인(Certificate Chain)

* CA3계층 구조 혹은 2계층 구조를 가짐

→ 클라이언트가 서버의 인증서를 가져오는 과정에서 해당 인증서가 올바른 Intermediate CA, Root CA를 가리키고 있다는 것을 증명

End-entity Intermediate CA에게서 검증을 받고, Intermediate CA들은 Root CA에게 검증을 받으며, Root CA는 스스로를 검증

 

* 복호화된 해시 값 인증서에 들어있는 내용물을 다시 해시값으로 만든 데이터

누군가에 의해 변조되었음을 의미!

 

▶인증서 체인으로 알 수 있는 것

* 하위 인증서를 신뢰할 수 있는지

* 하위 인증서의 내용물이 변조되었는지

 

5) SSL Handshake

: 통신하는 브라우저와 웹 서버가 서로 암호화 통신을 시작할 수 있도록 신분을 확인

(1) Client Hello : 암호화 알고리즘 나열 및 전달

(2) Server Hello : 암호화 알고리즘 선택

(3) Server Certificate : 인증서 전달

(4) Client Key Exchange : 데이터를 암호화 할 대칭키 전달

(5) Client/Server Hello done : 정보전달 완료

(6) Finished : SSL Handshake 종료

 

3. 해싱

1) 해싱

: 데이터를 고정된 길이의 문자열(=해시)로 변환하는 일방향 함수(역으로 되돌릴 수 없음)

* 주로 데이터 무결성(=파일이 수정되었는지) 확인이 필요한 데이터를 저장하는 용도로 사용

 

2) 해싱이 필요한 이유

-. 비밀번호 저장

-. 데이터 무결성 검사

-. 디지털 서명

 

3) 해싱 VS. 암호화

* 해싱은 원본 데이터를 되돌릴 필요가 없고 데이터 무결성이 더 중요할 때 사용

* 암호화는 민감한 데이터를 보호하고 필요할 때 다시 복구해야될 때 사용