HTTP
는 “HyperText Transfer Protocol”의 약자로 HTML 문서를 주고 받는 통신 규약(프로토콜)입니다. HTTP는 웹 브라우저와 웹 서버 간의 통신을 위해 사용되며, 데이터를 평문으로 전송합니다. 따라서 HTTP 통신은 암호화되지 않은 형태로 이루어지며, 데이터가 네트워크를 통해 전송되는 동안 제3자가 데이터를 엿듣거나 조작할 수 있는 보안 위험이 있습니다.
만약 어느 한 유저가 네네치킨을 어플로 주문을 했다고 가정합시다.
이때 옆 가게인 교촌치킨에서 이 주문을 지켜보다가 가로채어 주문이 접수되었다는 알림을 유저에게 보냅니다.
이건 주문내역을 암호화하지 않았기 때문에
주문한 사용자가 누구인지, 무엇을 주문했는지 다 알 수 있어 가능한 일입니다.
네네치킨은 이렇게 하루종일 교촌치킨에게 주문을 다 빼았기고 결국 망하고 말겠죠.
HTTPS
는 "HyperText Transfer Protocol Secure"의 약자로, 웹에서 데이터를 안전하게 전송하기 위해 사용되는 통신 규약(프로토콜)입니다. 기본적으로 웹 브라우저와 웹 서버 간의 통신에 사용되는 HTTP 프로토콜을 보안하기 위해 개발되었습니다. HTTPS를 사용하면 사용자들의 비밀번호 같은 중요한 정보들을 암호화하여 안전하게 서버로 보낼 수 있습니다.
또한 구글은 HTTPS를 사용하는 웹사이트에 더 높은 순위를 부여하므로 HTTPS를 사용하면 검색 엔진에서 더 잘 노출될 수 있습니다. 자신들의 웹사이트가 상단에 노출되고 싶다면 당연히 HTTPS를 사용할 수 밖에 없겠죠
네네치킨은 교촌치킨이 사용자들의 주문을 다 뺏어간다는 것을 깨닫고,
사용자들에게 주문내역을 암호화하여 주라고 부탁하였습니다.
근데 누가 귀찮게 그럼 네네치킨에서 주문할까요?
네네치킨은 이에 주문내역을 암호화하여 주는 사용자들에게는 서비스를 주겠다고 말하였습니다.
암호화 방식중 하나인 대칭키 방식
은 어떤 정보를 암호화/복호화 할때 사용하는 키가 동일한 방식입니다.
즉, 암호화 할때 사용하는 키와, 그 암호화한 정보를 다시 원래 정보로 되돌리기 위한 복호화를 할때 필요한 키 값이 동일한 경우를 의미합니다. 이 대칭키 방식은 데이터를 전송할때, 그 키를 같이 보내주어야 하기 때문에 이 키가 탈취당할 경우 보안상 문제를 겪을 수 있습니다.
근데 손님들은 어떻게 주문내역을 암호화할까요?
네네치킨은 손님들에게 암호화하는 키를 주고
자신들도 주문이 들어왔을때 그 키로 주문내역을 복호화하여 주문내역을 확인하였습니다.
교촌치킨은 중간에 주문내역을 가로채가도 누가 무엇을 시킨지 확인할 수 없기 때문에
더이상 네네치킨의 주문을 빼앗아 갈 수 없게 되었습니다.
공개키(비대칭키) 방식은 암호화할때 사용하는 키와 복호화할때 사용하는 키가 다른 방식입니다.
서버는 공개키(public key)를 공개하고 그 키로 데이터를 암호화해달라고 요청합니다. 그리고 그 공개키에 맞는 비밀키(private key)로 그 암호화된 정보를 복호화합니다.이 방식은 공개키는 암호화만, 비밀키는 복호화만 가능하기 때문에 공개키로는 절대 복호화를 할 수 없어 공개키를 탈취당한다 하더라도 데이터를 열어 볼 수 없습니다.
하지만 비대칭 키 암호화는 대칭 키 암호화보다 계산 비용이 많이 듭니다. 비대칭 키 암호화 알고리즘은 수학적 연산을 많이 필요로 하므로, 대량의 데이터를 암호화하거나 복호화하는 경우에는 시간이 오래 걸릴 수 있습니다. 그럼에도 불구하고 데이터의 안전성을 보장하는 것은 중요하기 때문에 비대칭키 방식을 사용합니다.
따라서 HTTPS는 대칭 키 암호화와 비대칭 키 암호화를 조합하여 사용하는 하이브리드 암호화 방식을 사용합니다. 비대칭 키 암호화는 주로 대칭 키를 안전하게 교환하기 위해 사용되며, 대칭 키 암호화는 실제 데이터의 암호화 및 복호화에 사용됩니다.
하지만 문제가 생겼습니다. 교촌치킨이 암호화하는 키까지 탈취해버린 것입니다.
네네치킨은 이에 암호화와 복호화에 다른 키를 사용하기로 했습니다.
키를 두개 생성한다는 것에서 귀찮음이 있지만 어쩔 수 없죠.
유저가 주문내역을 암호화할때 사용하는 공개키는 누구나 볼 수 있게하고,
복호화할때 사용하는 키(비밀 키)는 가게 안에만 두어 절대 남이 볼 수 없게 한 것이죠.
공개키로는 복호화가 불가능하기 때문에 교촌치킨은 이제 더 이상 주문내역을 가로채도 확인할 수가 없게 되었습니다.
이제 걱정이 없겠다라고 생각한 네네치킨은 큰 위기를 맞습니다.
네네치킨과 거의 비슷하게 생긴 니니치킨이란 치킨집이 들어와 마치 자신들이 네네치킨인 것처럼 위장한 것입니다.
그리고 유저들에게 자신들의 공개키를 전달합니다.
유저들은 이 키가 네네치킨의 공개키인 줄 알고 니니치킨의 공개키로 주문내역을 암호화한 뒤
니니치킨에게 주문을 전달해버립니다. 네네치킨은 또 위기를 맞았습니다.
이 처럼 공개키
를 이용해 암호화를 하더라도 진짜 사이트인지를 증명할 수단이 필요합니다. 이때문에 제3자가 해당 사이트가 진짜 인지를 대신증명해주는 것입니다. 이를 통해 사용자는 자신이 통신하는 사이트가 진짜 사이트인지를 믿을 수 있게 됩니다.
이때 사용하는 것이 ssl 방식
입니다. “우리 믿을 수 있는 사이트에요”라고 제 3자에게 인증을 요청하는 것이죠.
서버는 인증서를 발급해주는 CA기관에 ssl 인증서
를 요청하여 인증서를 발급 받습니다. 이제 client가 접속요청을하면 발급 받은 인증서를 전달합니다. client는 CA기관에서 미리 받아 브라우저에 저장된 인증서 리스트와 받은 인증서를 비교한 다음, 인증서 리스트에 있다면 인증서 안의 공개키로 데이터를 암호화하여 전달합니다.
네네치킨은 이제 제 3자에게 요청을 하였습니다. 제 3자는 네네치킨이 믿을만한 곳이라는 인증서를 내어줍니다.
손님들은 주문시에 믿을만한 가게 리스트를 확인합니다.
그리고 네네치킨은 손님들이 주문할때 자신들이 받은 인증서를 보내줍니다.
손님들은 이 인증서를 가진 가게가 믿을만한 가게 리스트에 있는지 확인한 다음,
있다면 그 가게의 공개키로 주문내억을 암호화해서 가게로 보냅니다.
니니치킨은 믿을만한 가게가 아니기 때문에 니니치킨이 손님을 아무리 속여도 더 이상 손님들은 속지 않게되었습니다.
이제 더 이상 네네치킨은 주문을 빼앗길 일이 사라졌습니다.
이해가 뚝!딱! 잘 읽고갑니다~