인터넷에서 데이터를 주고받을 때는 정보가 노출되거나 변조될 위험이 있다.
그걸 방지하기 위해 암호화 기술이 필수적이며, 웹 보안에선 SSL/TLS 프로토콜이 주로 사용된다.
AWS에서도 이런 보안 기능을 지원해 안전한 통신 환경을 제공하는데,
이번 글에서는 AWS에 들어가기 전, 암호화와 SSL/TLS의 기본 개념을 정리했다.
암호화
수학적인 과정으로 어떤 정보를 읽을 수 없는 데이터로 변환하는 행위
용어
- 평문
암호화 하기 전의 데이터
- 암호문
평문을 암호 키와 알고리즘을 사용해 암호화 한 데이터
- 암호화
평문에 암호화 알고리즘, 키를 적용하여 소유한 주체가 아니면 알아볼 수 없는 암호문으로 만드는 과정
- 복호화
암호문에 키와 복호화 알고리즘을 적용하여 평문으로 되돌리는 과정
- 키
평문을 암호화하거나 암호문을 평문으로 돌리기 위한 비밀번호(값)
- 암호 알고리즘
암호화/복호화를 위한 알고리즘 (AES/DES)
💡AES/DES?
🔐 DES (Data Encryption Standard)
1. 옛날 방식의 암호화 기술 (1970년)
2. 64비트 블록 단위로 데이터를 암호화
3. Key가 지금 기준으로는 너무 짧아서 쉽게 뚫림
4. 과거에 많이 썼지만, 보안이 약해서 지금은 거의 안 씀
🔐 AES (Advanced Encryption Standard)
1. DES를 대체한 현대적인 암호화 방식
2. AES에 비해 길고 훨씬 안전함
3. 128비트 블록으로 데이터 처리
4. 속도도 빠르고, 스마트폰, 인터넷, 군사 통신 등에서 표준으로 널리 사용
저장된 데이터의 보호

유저가 어플리케이션에 파일을 업로드하면 디스크에 암호화 상태로 저장하고, 복호화시 키가 필요한 기술
💡디스크를 도난당햇을 때 암호화가 되있기 때문에 쉽게 데이터를 열어볼 수 없다.
1. 하나의 물리적인 기기에 보안을 적용하기 위해 사용
2. 키파일 혹은 암호를 사용하여 암호화/복호화
전송 중 데이터 보호

데이터의 전송 중 암호화를 적용하여 데이터가 탈취 되지 않도록 보호
💡주로 여러 시스템/기기 간에 보안을 적용하기 위해 사용
SSL/TLS,HTTPS 등
하나의 키를 암호화, 복호화 하는 알고리즘
- 연산이 빠름
- 키를 전달하는 방법에 대한 고민이 필요함

가정
Bob : 전송자
Alice : 수신자
Chuck : 도청자
Bob과 Alice가 정보를 주고받을 때, Chuck이 중간에 데이터를 빼내면 키만 가지고 있으면 데이터를 복호화 할 수 있는 문제가 있다.
한 쌍의 키를 활용한 암호화
- 하나의 키는 암호화만 가능하고, 다른 하나는 복호화만 가능

가정
Bob : 전송자
Alice : 수신자
Chuck : 도청자
Bob이 공개키를 통해 자신의 비밀키를 Alice에게 전달하고 Alice는 자신의 키를 통해 복호화를 진행한다.
이 과정에서 Chuck이 공개키를 가지고 있더라도 복호화를 할 수 있는 비밀키가 없기 때문에 복호화를 할 수 없다.
단점
매우 느리다. 그래서 키를 교환하거나 특별한 정보를 교환할 때말고는 대칭키를 사용한다.
키를 사용해서 데이터의 생성자가 데이터를 생성했음을 보장하는 방법
Private 키를 사용하여 Public 키로 검증 가능한 데이터의 서명을 생성

AWS 활용
Presigned URL

클라이언트와 서버간에 데이터의 무결성과 기밀성을 보장하는 프로토콜
상호간의 통신 암호화 후 전달되며 중간에서 탈취당해도 안전함
HTTPS등 다양한 프로토콜에 활용
- Cipher Suites 교환
* Cipher Suites : TLS에서 활용하는 보안 알고리즘

클라이언트와 서버가 만나면 정보를 교환함
클라이언트 -> 서버
SSL/TLS 버전
지원하는 Cipher Suites 목록
기타정보
서버 -> 클라이언트
SSL/TLS 버전
지원하는 Cipher Suites 목록
기타정보
인증서
*인증서 : 믿을 수 있는 인증 기관(CA)에서 배포하는 서버 신원에 대한 검증 확인
💡 클라이언트가 서버에 접속할 때 신뢰할 수 있는 서버인지 판단해야 한다. 어떤식으로 인증이 진행되고 있을까?
- 인증

인증 과정
공신력있는 기관 CA에서 클라이언트와 서버에 CA공개키를 제공
서버에서 공개 키와 비밀키를 만든다.
서버는 서버에 대한 정보와 서버의 공개키를 묶어서 CA에 인증서를 만들어 달라 요청
CA에서는 정보에 대한 검증을 끝내고 CA비밀키를 통해 그 정보를 암호화해서 인증서를 발급해줌
서버는 정보를 요청한 클라이언트에 받은 인증서를 건네줌
클라이언트는 암호화 된 정보를 CA 공개키를 사용하여 복호화함
- 키교환


클라이언트는 서버의 공개키를 사용하여 서버와 통신하고 CA비밀키를 사용해서 RSA를 만들고 서버에서는 공개키와 대응하는 비밀키를 통해 키를 만들고 만들어진 키를 기반으로 통신