-
HTTP, HTTPS, SSL, TLS프로그래밍 2020. 3. 11. 11:07
'도난 당한 패스워드' 라는 만화를 읽고 나름 정리해보았습니다.
책을 보시면 더욱 쉽게 설명되어 있습니다. 강추!암호화라는 건 언제부터 나왔을까?
시계를 거꾸로 돌려 생각해보면 인간이 '암호' 라는 걸 생각한 건 언제부터일까요. 아마도 둘만의 비밀을 아무에게도 들키고 싶지 않아서 사용하기 시작했을 것입니다. 마치 로미오와 줄리엣이 비밀 연애 편지를 주고 받듯이 둘만의 규칙을 정해서 편지를 주고 받았겠죠.
아마도 그때의 암호는 둘만의 규칙으로 이루어졌기 때문에, 만약 그 편지가 유출되어서 다른 사람의 손에 들어간다면 그 내용을 파악할 수 없었을 것입니다. 하지만 편지를 가지고 3개월의 시간을 준다면? 3개월보다 더 걸릴지도 모르지만 수많은 시도 끝에 편지의 내용은 해독이 될 것입니다.
이때까지만 해도 '해독은 곧 시간' 이라는 개념이었습니다.
이러한 개념이 흘러오던 중 2차 대전 시 엄청난 일이 벌어집니다.
나치가 '에니그마' 라는 것을 개발했습니다. 에니그마는 간단하게 암호키를 이용한 암호화 장비이며, 키를 날마다 변경하였습니다. 매일매일 변경되는 키였기 때문에 '해독은 곧 시간'이라는 개념에 한방 날리게 됩니다.
에니그마는 추후 에니그마라는 장비 자체가 유출되게 되면서 보안에 문제가 생기게 되지만 에니그마의 방법은 현대 암호화의 기초가 됩니다.
에니그마부터 공개키까지
에니그마부터 신나게 더 발전하여 DES와 AES 가 나오게 됩니다.
DES 는 Data Encryption Standard, AES 는 Advanced Encryption Standard Algorithm 입니다.
무슨 차이지?그냥 DES 가 먼저 나왔고 그보다 더 발전한 게 AES 입니다. 둘다 복잡한 알고리즘을 가지고 있지만 에니그마의 기본 규칙을 가지고 있다고 생각하시면 됩니다.
에니그마부터 DES, AES 까지 왔습니다. 이 방식은 하나의 큰 문제를 가지고 있습니다.
바로 '키가 유출되면 아무 소용이 없다', 키의 유출을 막기 위해 날마다 바꾸는 등등의 여러가지 보완을 하고 있지만 그 또한 키를 변경하게 되면 그 키를 상대한테 매번 전달해야 된다는 리스트를 안게 되는 겁니다.
기존에 키라는 걸 가지고 암호화, 복호화를 하는 데 쓰이는 키를 '대칭키' 라고 칭합니다. 양쪽 다 같은 키를 가지고 있으니까 대칭을 이룬다는 의미로 받아들이면 좋을 것 같네요. 여기서 아주 똑똑한 사람들이 '대칭키' 만을 사용하는 단점을 보완한 '공개키' 라는 걸 들고 나옵니다.
공개키?, 대칭키? 란 무엇인가
'대칭키를 매번 전달해줘야 하니까 매번 전달하지 말자' 라는 기조에서 공개키 개념은 시작합니다.
공개키 개념엔 두 가지 재료가 필요합니다. 바로 '개인키' 와 '공개키'.
개인키를 'A' 라 하고, 공개키를 'B' 라 하겠습니다.
'A' 로 암호화한 데이터는 'B'로만 복호화할 수 있다.'B' 로 암호화한 데이터는 'A'로만 복호화할 수 있다.
그리고 '개인키(A)' 는 본인만 가지고 있고, '공개키(B)'는 상대방에게 제공한다.
이 개념으로 상대방과 내가 서로의 공개키를 제공해주는 겁니다. 그렇게 되면 서로는 자신의 개인키과 상대의 공개키를 가지고 있게 됩니다.
내 데이터를 상대방에게 전달할 때는 상대의 공개키로 암호화하여 전달.
상대는 데이터를 받아 상대의 개인키로 복호화.
상대방이 나에게 데이터를 전달할 때는 내 공개키로 암호화하여 전달.
나는 데이터를 받아 내 개인키로 복호화.
공개키로는 암호화만 가능하고, 개인키로는 복호화만 가능하니, 복호화가 가능한 개인키를 누구에게도 주지 않아도 됩니다. 유출 가능성을 엄청나게 낮출 수 있게 됩니다.
RSA, 대단한 이름 같은데 그냥 '김이박'
이러한 공개키 기법 중에 가장 보편적이고, 유명한게 RSA 입니다.
이름은 이거 만든 사람들이
로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman), ... 넘어가겠습니다.
너무 느린데?
공개키와 개인키를 이용한 방식은 좋습니다. 좋아요. 근데 보안과 관계 없는 하나의 큰 단점이 있었으니 이는 속도입니다.
너~~무 오래 걸려~~~~
SSL, TLS 의 등장
오래 걸리는 단점을 보완하고자 신구의 조화, 대칭키와 공개키, 개인키를 조합한 기가 막힌 방법이 나오게 됩니다.
이름하야 SSL (TLS 는 SSL 의 업그레이드 이름인데, 그냥 SSL로 이야기하곤 합니다.)
기본 개념은 이러합니다.
- 대칭키를 서로 가지고 있는다.
- 대칭키를 처음에 주고 받는 방식을 공개키 방식을 이용하여 주고 받는다.
- 처음 상대를 신뢰할 수 없기 때문에 인증기관을 거쳐, 두번의 공개키 교환 과정을 통한다.
정리하면 '두번의 공개키 교환을 통해 최종적으로 서로가 대칭키를 가진다'
이 부분에서 이 만화 그림이 설명이 기가 막힙니다. 출처 '도난당한 패스워드'

그림을 보면
- 1,2,3 번의 과정을 통해 site 의 공개키를 인증기관의 개인키로 암호화 해서 돌려받음. 이 결과물을 '인증서'라 함.
- 사용자가 site에 접속요청을 하면 '인증서'만 넘겨줌.
- 사용자의 브라우저는 인증기관의 공개키가 이미 있다!
- 인증서를 인증기관의 공개키로 복호화. 그러면 site 의 공개키를 개인이 획득!
- site 의 공개키로 대칭키를 암호화해서 site 로 준다
- site 의 개인키로 대칭키를 복호화해서 결국 개인과 site 는 같은 대칭키를 획득하게 된다.
말로 하면 복잡한데 그림을 보시면 쉽게 이해되실 겁니다. 이와 같은 과정을 SSL 이라 합니다.
이렇게 요즘 많은 곳에서 SSL 를 쓰고 있으며, SSL 가 적용된 HTTP 요청을 주고 받는 방식을 HTTPS 라 합니다.
제가 정리를 위해 글로 써놓았지만 책을 통해서 만화로 보시면 훨씬 이해가 간편합니다.
감사합니다.
반응형'프로그래밍' 카테고리의 다른 글
<프로그래밍 공부 시작하기-5> 자바 공부 시작하기 <가장 간단한 프로그램, hello world> (0) 2020.03.27 <프로그래밍 공부 시작하기-4> 자바 공부 시작하기 <자바 기본서를 읽기 전에> (0) 2020.03.26 <프로그래밍 공부 시작하기-3> 자바 공부 시작하기 <컴파일, compile> (0) 2020.03.25 <프로그래밍 공부 시작하기-2> 어떤 언어를 공부해야 하나요 (0) 2020.03.24 <프로그래밍 공부 시작하기-1> 프로그래밍 공부 얼마나 걸려요? (0) 2020.03.23