seegongsik
내 단어장
seegongsik
보안 · 신뢰를 지키는 법

믿을 수 없는 세상에서, 어떻게 안전을 지킬까

비밀을 지키고, 바뀌지 않았음을 확인하고, 상대가 진짜인지 가립니다. 해시와 솔트부터 대칭키·공개키·키 교환, 서명·인증서·HTTPS, 그리고 방화벽·사회공학·설계 원칙까지. 마지막엔 완벽한 보안은 없다는 것, 곧 위험을 관리하는 법으로 전체 여정을 닫아요.

15 / 15
01믿을 수 없는 세상의 규칙
네트워크에선 메시지가 낯선 길을 지나는 동안 누가 엿보거나 바꾸거나 가로챌지 알 수 없어요. 그래서 보안이 지키려는 목표는 세 가지예요. 남이 못 읽게 하는 비밀 유지(기밀), 가는 중에 안 바뀌게 하는 무결, 필요할 때 늘 쓸 수 있게 하는 가용. 머리글자를 따 CIA라고 불러요. 이 셋은 지키려는 목표지, 지키는 방법이 아니에요. 목표를 지키는 수단은 따로 있어요. 그중 하나가 상대가 진짜 그 사람인지 확인하는 인증이에요. 비밀번호처럼 본인만 아는 걸 보여 누구인지 밝히는 거죠. 정리하면, 보안은 못 믿는 세상에서 기밀·무결·가용 세 목표를 세우고, 인증 같은 수단으로 그 목표를 지키는 일이에요. 목표와 수단을 헷갈리지 않는 게 첫걸음이에요.
02되돌릴 수 없게 바꾸기, 해시
보안 해시는 입력을 한 방향으로만 지문으로 바꿔요. 입력에서 지문은 쉽게 나오지만, 지문에서 입력으로는 되돌아갈 수 없어요. 그래서 비밀번호를 그대로 저장하지 않고 지문만 저장해요. 저장소가 새도 거기엔 지문만 있어서 원래 비밀번호를 곧장 알 수 없어요. 로그인 때는 입력한 값을 다시 지문으로 바꿔서, 저장된 지문과 같은지 견줘요. 같으면 통과예요. 같은 입력은 늘 같은 지문이 나오니까 이 비교가 통하죠. 이건 data에서 본 해시와 모양은 비슷해도 목적이 달라요. data의 해시는 빨리 찾으려고 쓰고, 여기 보안 해시는 못 되돌리게 하려고 써요. 한 방향 지문, 지문만 저장, 비교로 확인. 이게 해시로 지키는 방법이에요.
03같은 비밀번호의 함정, 소금 한 꼬집
같은 비밀번호는 같은 해시가 돼요. 그래서 저장된 해시만 봐도 같은 비밀번호를 쓴 사람을 알 수 있고, 흔한 비밀번호와 그 해시를 미리 적어 둔 표로 역으로 비밀번호를 짐작당할 위험이 생겨요. 막는 방법은 간단해요. 사람마다 다른 무작위 값 한 꼬집을 비밀번호에 더한 뒤 해시하는 거예요. 이 한 꼬집을 소금이라고 불러요. 소금은 비밀이 아니라 사람마다 다르기만 하면 돼요. 소금을 더하면 같은 비밀번호라도 해시가 전부 달라져요. 그러면 미리 만들어 둔 표가 한 번에 들어맞지 않게 되고, 저장된 해시가 같아 보이는 일도 사라져요. 정리하면, 같은 비번이 같은 해시가 되는 함정을 사람마다 다른 소금으로 풀어, 같은 비번도 다른 해시로 만드는 게 소금이에요.
04나임을 증명하는 여러 방법
인증은 네가 너임을 증명하는 일이에요. 증명하는 재료는 크게 세 가지예요. 아는 것(비밀번호처럼 머릿속에 있는 것), 가진 것(폰이나 열쇠처럼 손에 든 것), 본인 것(지문이나 얼굴처럼 몸에 붙은 것). 한 가지만 쓰면 그게 새면 끝이지만, 두 가지를 겹쳐서 요구하면 훨씬 안전해요. 이걸 다단계라고 불러요. 그리고 인증은 권한과 달라요. 인증은 네가 누구인지를 확인하는 거고, 권한은 그 다음에 네가 무엇을 할 수 있는지를 정하는 거예요. 누구인지 확인됐어도 할 수 있는 일은 따로 정해지고, 필요하면 거둬들일 수도 있어요.
05한 번 잠그면 열쇠로만 여는 자물쇠, 암호화
그냥 보낸 메시지는 평문이라, 전달 경로의 누구든 그대로 읽어요. 암호화는 평문을 열쇠로 잠가서 뜻 없는 뒤죽박죽(암호문)으로 바꿔요. 잠긴 글은 읽어도 의미를 알 수 없어요. 다시 읽으려면 올바른 열쇠로 풀어야 하고, 틀린 열쇠로는 풀리지 않아요. 그래서 암호화는 두 곳에서 비밀을 지켜요. 첫째 전송 중. 인터넷을 지나는 동안 가로채도 내용이 보호돼요. 둘째 저장 시. 기기나 서버에 담아 둔 동안 누가 들여다봐도 안전해요. 정리하면, 평문은 엿보이고 암호화는 잠그며 열쇠로만 풀려서 전송에도 저장에도 비밀이 지켜져요. 그 열쇠를 안전하게 어떻게 나눌지는 다음 강에서 이어가요.
06같은 열쇠로 잠그고 푸는 대칭키
대칭키 암호는 잠글 때와 풀 때 같은 열쇠를 써요. 열쇠 하나만 있으면 되니 단순하고, 큰 데이터도 아주 빠르게 잠그고 풀어요. 그래서 널리 쓰여요. 그런데 결정적인 약점이 있어요. 떨어져 있는 상대가 풀려면 같은 열쇠를 그 사람도 가져야 하는데, 그 열쇠를 보내는 길 자체가 위험해요. 보내다 중간에 복사되면 잠금이 무의미해지고, 안 보내면 상대는 영영 못 풀어요. 보내자니 위험하고 안 보내자니 못 쓰는, 막다른 딜레마죠. 이게 키 배송 문제예요. 빠름이라는 장점과 키를 어떻게 건네느냐는 난제가 한 몸이에요. 다음 강의 공개키 방식이 바로 이 딜레마를 풀어줘요.
07열쇠 두 개의 마법, 공개키
공개키 암호는 짝을 이루는 열쇠 두 개를 써요. 하나는 공개키로 누구에게나 나눠줘도 되고, 하나는 개인키로 나만 꼭 쥐고 있어요. 공개키로 잠근 건 오직 그 짝 개인키로만 풀려요. 다른 어떤 키로도, 심지어 잠근 그 공개키로도 못 풀어요. 그래서 받을 사람의 공개키는 온 세상에 공개해도 안전해요. 누구나 그 공개키로 메시지를 잠가 보내면, 짝 개인키를 가진 그 사람만 풀 수 있으니까요. 대칭키에서 골치였던 키 배송 문제가 사라져요. 비밀로 건넬 열쇠가 아예 없으니까요. 공개키는 자물쇠를 나눠주는 것, 개인키는 나만의 열쇠. 이게 열쇠 두 개의 마법이에요.
08몰래 열쇠 나눠 갖기
공개키는 안전하지만 느려요. 그래서 실제로는 빠른 대칭키 하나로 본 내용을 주고받아요. 문제는 그 대칭키를 어떻게 안전하게 나눠 갖느냐예요. 답은 함께 만드는 거예요. 색깔 섞기로 그려보면, 둘 다 아는 공개 색에 각자 비밀 색을 섞어 만든 색만 서로에게 보내요. 받은 색에 자기 비밀 색을 다시 섞으면, 두 사람은 똑같은 최종 색에 도달해요. 이 최종 색이 공유 비밀, 즉 대칭키예요. 중간에서 엿보는 사람은 공개 색과 오간 섞인 색은 봐도, 각자의 비밀 색을 모르니 같은 최종 색을 만들지 못해요. 한 가지 주의할 점은, 키 교환은 공개키로 내용을 암호화하는 것과는 다른 일이라는 거예요. 키 교환은 둘이 같은 비밀을 함께 만드는 절차고, 그렇게 만든 대칭키로 비로소 본 내용을 빠르게 주고받아요.
09편지가 진짜인지 확인하기, 서명
전자 서명은 공개키 암호를 거꾸로 써요. 보낸 사람이 자기 개인키로 메시지에 서명을 붙여요. 개인키는 그 사람만 가지고 있으니 그 서명은 오직 그 사람만 만들 수 있어요. 받는 사람은 그 사람의 공개키로 서명을 검증해요. 검증이 통과하면 두 가지가 한꺼번에 증명돼요. 진짜 그 사람이 보냈다는 진위, 그리고 중간에 한 글자도 안 바뀌었다는 무결성이요. 내용을 아주 조금만 바꿔도 검증이 깨지니까요. 암호화가 내용을 잠가 비밀로 지키는 일이라면, 서명은 잠그는 게 아니라 누가 보냈고 안 바뀌었는지를 증명하는 일이에요. 잠금은 비밀, 서명은 진위와 무결. 같은 열쇠 한 짝으로 방향만 바꿔 두 가지를 다 해내요.
10이 공개키가 진짜 그 사람 걸까, 인증서
공개키를 안전하게 쓰려면, 그 공개키가 진짜 그 사람이나 사이트의 것인지 믿을 수 있어야 해요. 중간에서 누가 가짜 공개키를 진짜인 척 건네면 위험하니까요. 그래서 모두가 신뢰하는 기관, 인증기관(CA)이 나서요. CA는 이 공개키가 진짜 이 사이트의 것이라고 자기 개인키로 서명해 보증해 줘요. 이 보증 문서가 바로 인증서예요. 브라우저에는 신뢰하는 CA들의 목록이 미리 들어 있어요. 그래서 사이트가 보낸 인증서를 받으면, 그게 신뢰하는 CA의 서명으로 보증된 것인지 따라 올라가 확인할 수 있어요. 보증이 맞으면 통과하고, 신뢰 목록에 없는 곳이 서명했거나 보증이 어긋나면 브라우저가 경고를 띄워요. 이렇게 누가 누구의 공개키를 보증하는지 엮은 신뢰의 그물이 공개키 기반구조(PKI)예요. 인증서는 공개키에 붙은 믿을 만한 신원 보증서인 셈이에요.
11모든 게 모이는 자물쇠, HTTPS
HTTPS는 이 영역에서 배운 것들이 한데 모이는 자물쇠예요. 네트워크에서는 그 흐름을 봤다면 여기서는 왜 안전한지를 봐요. 안전은 세 고리가 닫혀서 와요. 첫째, 인증서로 상대가 진짜 그 사이트인지 확인해요. 위장을 막는 고리예요. 둘째, 공개키로 빠른 대칭키를 안전하게 나눠 가져요. 열쇠를 몰래 배송할 필요가 없어요. 셋째, 그 대칭키로 내용을 암호화하고 무결성까지 확인해요. 엿보기와 위조를 막는 고리예요. 이 세 고리가 함께 닫혀야 자물쇠가 잠겨요. 하나라도 비면 안전하지 않아요. 그래서 주소창의 작은 자물쇠는 단순한 그림이 아니라 인증, 키 교환, 암호화가 모두 닫혔다는 신호예요.
12문을 지키는 파수꾼, 방화벽
방화벽은 들어오고 나가는 통신을 규칙으로 검문하는 파수꾼이에요. 통신은 문(포트)을 통해 드나드는데, 방화벽은 문마다 허용할지 차단할지 규칙을 정해 둬요. 규칙은 보통 출발지나 도착지, 그리고 어느 문으로 오는지를 보고 정해져요. 핵심은 기본 차단이에요. 명시적으로 허용한 것만 통과시키고, 모르는 건 일단 막아요. 열린 문이 적을수록 밖에서 들여다볼 수 있는 표면, 곧 공격면이 줄어 더 안전해요. 그래서 꼭 필요한 문만 열고 나머지는 닫아 두는 게 좋은 습관이에요. 방화벽은 문을 지키는 파수꾼, 기본은 모르는 건 막기, 열린 문은 적을수록 안전. 이게 방화벽의 핵심이에요.
13가장 약한 고리는 사람
아무리 암호와 잠금이 강해도 가장 약한 고리는 사람이에요. 공격자는 기술을 깨는 대신 사람의 신뢰와 급한 마음, 도와주려는 호의를 노리기도 해요. 이런 걸 사회공학이라고 불러요. 우리가 알아야 할 건 이런 공격이 존재한다는 '인지' 하나면 충분해요. 수법을 외울 필요는 없고, 방어 습관만 몸에 익히면 돼요. 핵심은 두 가지예요. 첫째, 갑작스럽고 급한 요청일수록 멈추고 다른 경로로 확인해요. 누가 전화로 무언가 요구하면 그 번호로 다시 묻지 말고 공식 번호로 따로 확인해요. 둘째, 비밀번호나 인증번호 같은 비밀은 누구에게도 함부로 말하지 않아요. 결국 보안은 기술만의 문제가 아니라 신뢰의 문제예요. 천천히 의심하고 확인하는 습관이 가장 단단한 방패예요.
14안전을 설계하는 원칙
좋은 보안은 기술 하나가 아니라 설계 원칙에서 나와요. 첫째, 최소 권한이에요. 누구에게나 필요한 만큼만 권한을 주고, 일이 끝나면 거둬요. 권한이 적을수록 잃을 것도 적어요. 둘째, 여러 겹 방어예요. 한 겹만 믿지 않고 막을 겹을 여러 개 둬요. 한 겹이 뚫려도 다음 겹이 받쳐요. 셋째, 기본은 차단이에요. 명시적으로 허용한 것 빼고는 일단 막아요. 모르는 건 들이지 않는 게 안전해요. 넷째, 단순할수록 안전해요. 구조가 복잡할수록 미처 못 본 빈틈이 늘어나요. 단순하면 살피기 쉬워요. 이 원칙들은 개별 기술이 바뀌어도 오래 가요. 그래서 새 기술을 배울 때도 원칙으로 먼저 따져보면 길을 잃지 않아요.
15완벽한 보안은 없어요
완벽한 보안은 없어요. 어떤 자물쇠도 시간과 노력을 충분히 들이면 흔들릴 수 있고, 무엇보다 보안을 한 칸 올릴 때마다 편의는 한 칸 내려가고 비용은 한 칸 올라가요. 셋은 서로 맞바꿈 관계예요. 그래서 성숙한 보안의 목표는 위험을 0으로 만드는 게 아니라, 위험을 관리하는 거예요. 0은 도달할 수도 없고, 도달하려다 삶이 마비돼요. 대신 무엇이 얼마나 소중한지 보고, 받아들일 만한 위험까지만 남기고 나머지를 막아요. 그래서 정답은 상황마다 달라요. 개인 메모장과 은행 금고가 같은 잠금을 쓰지 않듯, 지킬 것의 무게에 맞는 균형점을 고르는 거예요. 완벽을 좇는 게 아니라 균형을 고르는 것, 이게 보안을 보는 어른의 눈이에요.
이 페이지가 도움 됐다면 후원하기