공부?/국비 지원 일기장

28일차 - 암호화 통신

무무요 2024. 8. 7. 17:33


=======

암호화 통신

암호화 개요
  - 기본 용어
     - 평문(Plain text) : 데이터를 갖고 있는 원문(누가봐도 알 수 있는 내용)
     - 암호문(Cipher text) : 내용을 제3자가 판독할 수 없는 글자/숫자/부호 등으로 변형시킨것
     - 암호화(Encryption) : 평문을 암호문으로 변경하는것
     - 복호화(Decryption) : 암호문을 평문으로 변경하는것

보안 3요소
Confidentiality ( 기밀성=비밀성 ) => 암호화                                                                            
Integrity ( 무결성 ) => 데이터 베이스에서 가장 중요한것 , 변조 -> Hash 
Availability ( 가용성 ) => 1년 365일 서비스를 해준다.

DES

알고리즘 & 키
  - 기본 요소
     - 알고리즘과 키가 필요(암호화 하기 위해서 필요한 2가지 요소)
  - 알고리즘(Algorithm) : 평문을 암호화, 암호문을 복호화할 때 사용하는 일련의 순차적인 계산 절차
  - 키(Key) : 암호화의 임의성을 추가하기 위한 임의의 값
     - 대칭키(=비밀키, 1회용 대칭키=세션키)
- 암호화 및 복호화에 동일한 키를 사용하는 암호화 기법
- 1회용 대칭키 --> 세션키 라고도 함
     - 대칭키 방식의 문제점
- 확장성 : 암호화 통신에 참여하는 멤버가 증가할수록 필요한 키가 많아짐 -> 키관리가 어려워 짐
     - key 동기화
- 대칭 암호화 이전에 반드시 대칭키를 공유하는 과정(key 동기화) 필요
- 오프라인이 가장 좋으나 , 현실에선 불가능
- ex. 웹서버 --> 원격지에 있는 불특정 다수들과 암호화 통신을 해야함
     - 주의사항) 키 공유의 의미는 나와 암호화 통신하려고 하는 사람만 알고 있는 개념이다.

결론
- 킷값이 다르면 같은 알고리즘을 적용해도 전혀 다른 암호문이 나옴
따라서 일반적인 암호화 통신은 알고리즘 공개, 키값만 비공개
여기서 비공개란 의미는 나만 아는 의미가 아닌 , 나와 상대방만 아는 상태를 의미
실제 원격지에 떨어져있다면 알고리즘까지 전달하는 것은 무리
그러나 좋은 암호문은 알고리즘 비공개 , 키값 비공개가 더 강력하긴 함 
알고리즘과 키값을 가지고 암호문을 복잡하게 만들수있다.  

평문 ----> 암호화할때
알고리즘(비공개) 키(비공개) 
보안이 중요한 기관은 알고리즘도 비공개다.
일반적인 암호화통신에서는 알고리즘은 석학들이 만들어둔 공개된 알고리즘을 가져다 쓴다. 대신 키값을 비공개로 해서 통신을 한다.

  - key 동기화 문제점 해결
     1. Off Line --> 현실성 떨어짐
     2. 비대칭키 방식
     3. Diffie-Hellman(DH)

     - 비대칭키 : 암호화하는 키와 복호화하는키를 다른 키를 사용한다.
     - 키쌍 : 사설키로 
- 공개키 : 불특정 다수가 더많이씀 ex 명함
- 사설키 : 자기만 가지고 있는 키, 대칭키 처럼 공유하는게 아닌 그 누구한테도 공유되면 안되는 키
- 사설키로 암호화한건 공개키로 해제, 공개키로 암호화한건 사설키로 해제 
  (단 A 공개키로 암호화된건 B사설키로 복호화가 되지 않는다. A의 공개키로 암호화 된건 A의 사설키로만 풀린다.)
     - 비대칭 암호
- 비대칭키 암호화 = 공개키 암호화
- 암호화 및 복호화 시 수학적 관계에 의해 계산된 한 쌍의 키를 사용하는 기법
- 한 쌍의 키란? Public Key(공개키), Private Key(사설키=개인키)
     - 공개키
- 요청하는 모든 사용자에게 공개되어도 되는 키
     - 사설키
- 아무에게도 공개되어서는 안되는 키, 나만 갖고 있어야 되는 키 이다.
ex. A 사용자가 있다면 A는 A의 공개키와 A의 사설키 한 쌍을 생성
    즉 한 쌍의 공개키와 사설키는 동시에 생성 됨
     - 공개키로 암호화된 내용 --> 사설키로 복호화
     ex. A의 공개키로 암호화했다면 오직 A의 사설키로만 복호화 됨
     - 사설키로 암호화된 내용 --> 공개키로 복호화
     ex. A의 사설키로 암호화했다면 오직 A의 공개키로만 복호화 됨
     주의사항)A의 공개키로 암호화 --> B의 사설키로는 복호화 할 수 없다.
     - 비대칭키 방식은 대칭키 교환, 전자서명 등에 사용
평문 암호문 키값 모두 컴퓨터내에서 2진수이다.

A의 대칭키가 안전하게 목표 B로 갔으면 
B의 대칭키를 다시 생성하는게 아닌 안정성이 보장된 A의 대칭키로 통신을 한다.(대칭키 통신, 비대칭 통신은 느리기 때문)



     - 맹점 3가지
1. 중간에 해커가 통째로 변조할 수 있다. = Blind Light
2. 그래서 상대방의 공개키를 신뢰할수없다.
3. 기밀성은 보장이 되지만 무결성은 보장되지 않는다.

  - 하이브리드(Hybrid) 암호화
     - 대칭키 암호화 
- 장점 : 처리속도가 빠름(비대칭키 방식에 비해서, 암호문을 빨리 만들어낼 수 있음)
  - 단점 : Key 동기화, 확장성
  - 알고리즘 : RC4, DES, 3DES, AES 등
     - 비대칭키 암호화
- 장점 : Key 동기화 안정성, 인증/부인방지 제공
- 단점 : 계산의 복잡성(이산대수, 타원곡선 등)으로 인해 처리속도가 느림
- 알고리즘 : RSA, DSA, ECC 등
     - 하이브리드 암호화
- 대칭/비대칭 암호화 방식의 장점을 혼합해서 사용하는 암호화 기법
  - 대칭 암호화 : 빠린 처리 속도(암호문을 빨리 생성)
  - 비대칭 암호화 : 키 동기화의 안정성
- 비대칭키 방식을 이용해 대칭키 교환
  - 대칭키 방식으로 원문을 암호화한 후 통신 진행
    ==> 대칭키가 안전하게 전달 됨

  - 하이브리드 암호화의 문제점
1. 메세지 무결성 검증
     - 제3자(ex 해커)가 무슨 내용인지 모른 상태에서 임의의 암호문을 만들어 보낼 수 있음
     ex. 사귀자인데, 헤어져라는 내용을 수신자 B공개키로 암호화해서 보낼 수 있음
     결론 수신자 B는 나에게 도착한 최종 복호화한 내용이 변경이 되었는지 아닌지 확인할 검증 방법이 없음
2. 송신자 신원 검증
     - 복호화 후 해당 내용이 진짜 A가 보낸 내용이 맞는지 검증할 수 이는 방법이 없음
     - 진짜 A가 보낸게 맞는지에 대한 의문이 생김
3번은 송신자 A의 입장에서 의문이 생김
3. 공개키에 대한 신뢰성 검증
     - 대칭키를 암호화할 때 사용할 공개키가 진짜 B의 공개키가 맞는지에 대해 검증할 방법이 없음
  - 결론
     1번은 Hash
     2번은 전자서명
     3번은 인증서
     로 해결 가능

Hash(128bit)
- Hash값은 파일의 내용에 따라 갈린다.
- 원문 Data는 대칭키로 암호화 , 대칭키는 비대칭의 공개키로 보호
- Data에 대한 Hash값을 송신자의 사설키로 보호해서 보낸다.
- 단 방향 암호화
- Hash는 무결성 검증을 위한 용도 , 복호화 할 필요가 없다.

Hash 특징
- 단방향 암호화 알고리즘
- 다양한 input size와 상관없이 고정된 output size를 가짐
  ex. MD5는 input size와 상관없이 무조건 128bit
- One way(단방향) : 복호화 필요 X, 거꾸로 돌아갈 필요 없는 것 Ex. 믹서기
- Collision Free : 원문이 동일하면 그에 따른 각각의 Hash값은 동일
                      반대로 각각의 hash값이 일치하면 원문이 동일하다는 특징 Ex. 지문
- 주로 메세지 인증에 사용 --> 송수신되는 정보에 대한 위/변조 확인 가능
- 참조 사이트 : winmd5.com

- 알고리즘 종류
  - MD5, SHA . . .

 

전자서명(Message Digest)
  - 원문에 대한 Hash값 생성 후 Hash 값을 송신자 사설키로 암호화한 값
    사귀자 → 사귀자‘를 송신자(A) 사설키로 암호화한 값이 전자서명 값이 됨
    수신측은 A의 공개키를 이용해 전자서명 값을 검증
    → A의 공개키로 복호화될 경우 A의 사설키가 사용되었음이 증명 됨
       (사귀자‘ 신뢰 O)
    → A의 공개키로 복호화된 Hash값은 신뢰할 수 있게 되며, 
       사귀자라는 메시지에 대해 Hash값을 생성하면 사귀자‘(아직까진 신뢰 X)가 나옴
       결론 : 전자서명 값에서 복호화한 신뢰할 수 있는 사귀자‘와
              신뢰할 수 없는 사귀자‘를 비교한 후 일치하게 되면
              사귀자라는 원문이 변조되지 않았다는 것이 증명 됨
  - 사용자 인증 / 부인방지


=======