암호화(Encryption)란?
암호기술은 중요한 정보를 읽기 어려운 값으로 변환하여 제 3자가 볼 수 없도록 하는 기술이다.
정보 보안의 핵심 원칙에는 기밀성, 무결성, 인증이 있다.
- 기밀성(Confidentiality) : 허가받은 자만 정보에 접근할 수 있다.
- 무결성(Integrity) : 허가받은 자만 변경해야한다.
즉, 무결성은 제 3자에 의한 정보의 변경이 있는지 없는지를 확인하는 기능. - 인증(Authentication) : 사용자나 객체의 디지털 정체성을 식별한다.
암호화란 위의 세가지 원칙중 "기밀성"을 중심으로 하는 기술이다. (그렇다고 다른 원칙들과 무관한 것은 아님)
단방향(One-Way Encryption) vs 양방향(Two-Way Encryption)
평문을 암호문으로 (=암호화), 암호문을 평문으로(=복호화) 바꾸기 위해서 다양한 알고리즘이 사용된다.
암호화는 크게 "단방향 암호화 / 양방향 암호화" 분류된다.
단방향은 암호화시킨 후 복호화는 불가하다.
반면, 양방향은 암호화와 복호화 모두 가능하다.
- 단방향 암호화는 왜 필요한가? 복호화하지 않는 암호화는 왜 필요한가?
단방향 암호화를 사용하는 주된 이유는 메시지 or 파일의 "무결성"을 보장하기 위해서이다.
단뱡향 암호를 위해서는 복호화가 불가능한 해시 알고리즘을 사용한다. 해시 알고리즘을 사용하면 메시지나 파일이 단 1bit 만 변경되어도 해시값이 변경되기 때문에 원본에 대한 무결성을 보장할 수 있다.
그렇다면 정말 복호화에서 자유로울까?
- 레인보우 테이블: 해시함수(MD-5, SHA-256등)를 사용하여 만들어낼 수 있는 값들을 대량으로 저장한 데이터 표
암호화된 데이터라도 레인보우 테이블과 비교하여 평문을 알아낼 가능성이 있다.
때문에 salt 라는 개념이 추가되었다. salt는 소금이라는 뜻으로 양념을 친다는 느낌으로 생각해보자. 평문 + 특정 문자열(salt) 조합을 암호화하는 방식을 말한다. 이 방식을 사용하면 레인보우 테이블과 값을 비교하더라도, 원래의 값이 무엇이었는지는 알 수 없게 된다.
대칭키 vs 비대칭키
양방향 알고리즘을 분류하면 대칭키 방식과 비대칭키 방식으로 나눌 수 있다.
말 그대로 대칭키는 암호화/복호화에 사용되는 키가 동일한 것이고, 비대칭키는 서로 다른 것이다.
대칭키(Symmetric-key cryptosystem)
비대칭키 방식에 비해 암복호화가 빠르다는 장점이 있다. 때문에 대용량 데이터를 암호화하는데 주로 사용된다.
그러나 암복호화를 위해 데이터 전송 시 키를 함께 전달해야하는데, 키를 교환하는 과정에서 제 3자에 의한 탈취 위험이 있다.
또한 관리자가 증가할 수록 키의 양도 방대해져 키 관리가 어렵다는 단점이 있다.
키 배송 문제는 아래의 방법으로 해결할 수 있다.
- 키의 사전 공유에 의한 해결
- 키배포 센터에 의한 해결(온라인 키 분배)
- Diffie-Hellman 키 교환에 의한 해결
- 공개키 암호에 의한 해결
비대칭키(Asymmetric-key cryptosystem)
위에서 언급했듯 대칭키의 키 배송 문제를 해결하기 위해 공개키(비대칭키)의 개념이 탄생하였다.
공개키는 모든 사람이 접근 가능하고, 개인키는 각 사용자만 갖고 사용하는 키이다.
예를들어 사용자A가 개인키를 갖고 있을때,
증명된 사용자B가 공개키를 사용해서 암호화하여 데이터를 A에게 보낸다고 하자.
전송된 데이터에 대하여 개인키가 있어 복호화 가능한 A는 원문을 알 수 있다.
하지만 데이터를 탈취한 제 3자는 복호화가 불가능하기 때문에 전송된 데이터의 원문을 알 수 없다.
비대칭키 방식은 공개키가 공개되어 있기 때문에 별도의 키 분배가 필요하지 않다는 장점이 있다.
또한 개인키를 가지고 있는 사람만 복호화가 가능하기 때문에 정보 보안의 요소인 "인증" 기능도 제공한다.
하지만 대칭키에 비해 암복호화의 속도가 느리다는 단점이 있다.
하이브리드 방식(Hybrid cryptosystem)
대칭키와 비대칭키의 장단점을 모두 적용한 방식이다.
HTTPS(SSL/TLS)가 하이브리드 방식을 사용하는 대표적인 예이다.
간단한 동작 방식은 다음과 같다.
- 세션키 생성 : 송신자가 임의로 세션키를 대칭키로 생성한다.
- 데이터 암호화 : 데이터를 세션키(=대칭키)로 암호화한다.
- 세션키 암호화 : 세션키를 수신자의 공개키로 암호화한다.
- 전송 : 암호화된 데이터와 암호화된 세션 키를 수신자에게 전송한다.
- 세션키 복호화 : 수신자는 자신의 개인키를 사용하여 암호화된 세션키를 복호화한다.
- 데이터 복호화 : 복호화된 세션키를 사용하여 데이터를 복호화한다.
이렇게 하면 메시지가 암호문으로 변환되기 때문에 기밀성을 지킬 수 있을 뿐만 아니라 대칭키로 용량이 큰 데이터도 빠르게 암호화 할 수 있다. 또한 전송에는 비대칭키(공개키)를 사용하므로 대칭키의 단점인 전송 시 기밀성에 대한 문제도 해결할 수 있게 된다.
알고리즘 종류
단방향 | 해시 | SHA-1, SHA-256, MD5 .... |
양방향 | 대칭키 | AES, DES, 3DES, SEED ... |
비대칭키 | RSA, DSA ... |
어떤 암호화 방식을 쓰는게 좋을까
'Computer Science > Network' 카테고리의 다른 글
HTTP vs HTTPS, SSL/TLS (0) | 2024.09.30 |
---|---|
HTTP/1.0, HTTP/1.1, HTTP/2.0, HTTP/3.0(QUIC) (2) | 2024.09.30 |