패킷은 여러 라우터를 거쳐 이동하기 때문에, 중간에 다른 사람이 그 내용을 몰래 들여다볼 수도 있습니다. 그래서 중요한 정보를 보낼 때는 암호화로 내용을 숨기고, 방화벽으로 위험한 접속을 미리 걸러내야 합니다. 이 장에는 약자와 전문 용어가 많이 나오므로, 처음 보는 말은 아래 📖 용어 및 약자 설명에서 찾아보세요.
암호화는 읽을 수 있는 원래 글(평문)을 정해진 방법(알고리즘)과 비밀 값(키)으로 뒤바꾸어, 키가 없는 사람은 알아볼 수 없는 암호문으로 만드는 일입니다. 암호문을 키로 다시 평문으로 되돌리는 것은 복호화라고 합니다. 오늘날의 암호는 "알고리즘은 모두에게 공개해도, 키만 비밀이면 안전해야 한다"는 원칙(케르크호프스의 원리)을 따릅니다. 그래서 좋은 암호의 힘은 방법을 숨기는 데서가 아니라 키의 가짓수와 수학적 어려움에서 나옵니다.
| 구분 | 원리 | 키 | 대표 예 | 오늘날 |
|---|---|---|---|---|
| 고전 치환 암호 | 글자를 정해진 규칙에 따라 다른 글자로 바꿈 | 이동 칸 수, 키워드 | 카이사르, 비즈네르 | 빈도 분석·무차별 대입으로 쉽게 풀림(교육용) |
| 고전 전치 암호 | 글자는 그대로 두고 순서만 바꿈 | 줄 수, 막대 굵기 | 스키테일, 레일펜스 | 글자 빈도가 그대로 남아 쉽게 풀림(교육용) |
| XOR·일회용 패드 | 평문 비트와 키 비트를 XOR(같으면 0, 다르면 1)로 섞음 | 평문만큼 긴 무작위 키, 한 번만 사용 | 버냄 암호 | 이론상 완벽하지만 긴 키를 미리 나눠 갖기 어려움 |
| 대칭키 암호 | 비트를 바꾸고 섞는 과정을 여러 번(라운드) 되풀이. 잠그는 키와 여는 키가 같음 | 128 ~ 256비트 키 하나 | AES, SEED, ChaCha20 | 실제 데이터(웹, 와이파이, 디스크) 암호화의 주인공 |
| 공개키(비대칭) 암호 | 수학적으로 짝지은 공개키로 잠그고 개인키로 엶. 소인수분해처럼 거꾸로 풀기 어려운 문제를 이용 | 공개키·개인키 한 쌍 | RSA, 타원곡선(ECC) | 키 나누기, 전자서명, 인증서(HTTPS의 시작) |
| 키 교환 | 공개된 값만 주고받아 둘만 아는 같은 비밀 키를 만듦 | 각자의 비밀 수 | 디피-헬먼 | HTTPS 연결마다 새 대칭키를 만들 때 사용 |
| 해시 함수 (암호화와 구분) | 아무리 긴 글도 고정 길이의 지문으로 요약. 되돌릴 수 없음(일방향) | 없음 | SHA-256 | 비밀번호 저장, 파일이 바뀌지 않았는지 확인 |
실제 인터넷(HTTPS)에서는 이 방법들을 함께 씁니다. 처음에 키 교환·공개키로 상대를 확인하고 둘만의 대칭키를 만든 뒤, 실제 내용은 빠른 대칭키 암호(AES)로 암호화하고, 내용이 바뀌지 않았는지는 해시를 바탕으로 한 검사값으로 확인합니다. 아래 체험실에서 하나씩 직접 해 보세요.
👉 탭을 눌러 여러 암호를 바꿔 가며 체험해 보세요. 고전 암호를 직접 깨 보고, 진짜 현대 암호(AES·SHA-256)가 어떻게 다른지 비교해 보세요!
치환 암호 — 알파벳을 키만큼 밀어서 바꿉니다. 키 3이면 A→D, B→E … X→A가 됩니다. 율리우스 카이사르가 군사 편지에 썼다고 전해집니다.
실제 인터넷에서는 이보다 훨씬 복잡한 방식(예: HTTPS)을 사용하지만, "키를 아는 사람만 원래 내용을 알 수 있다"는 기본 원리는 같습니다.
다중 치환 암호 — 키워드의 글자마다 이동 칸 수를 다르게 씁니다(A=0, B=1 … Z=25). 같은 평문 글자도 위치에 따라 다른 글자가 되어, 단순한 빈도 분석이 잘 통하지 않습니다. 16세기에 정리되어 300년 가까이 '풀 수 없는 암호'로 불렸습니다.
전치 암호 — 글자는 바꾸지 않고 순서만 섞습니다. 레일펜스 암호는 글자를 여러 줄(레일)에 지그재그로 적은 뒤 줄 순서대로 읽습니다. 고대 그리스의 스키테일도 같은 '자리 바꾸기' 원리입니다.
XOR과 일회용 패드 — 컴퓨터 암호의 기본 연산은 XOR입니다(두 비트가 같으면 0, 다르면 1). 평문 비트에 키 비트를 XOR하면 암호문이 되고, 같은 키로 한 번 더 XOR하면 평문으로 돌아옵니다. 키가 평문만큼 길고 완전히 무작위이며 딱 한 번만 쓰이면, 이론적으로 절대 풀 수 없습니다(일회용 패드).
현대 대칭키 암호 AES — 이 탭은 흉내가 아니라 브라우저에 들어 있는 진짜 AES-128(GCM 방식)으로 암호화합니다. AES는 16바이트 블록을 '바꾸기·자리 섞기·열 섞기·키 더하기'로 10번 되풀이해 뒤섞습니다. GCM 방식은 암호문에 인증 태그를 붙여, 키가 틀리거나 암호문이 1비트라도 바뀌면 복호화 자체를 거부합니다.
공개키 암호 RSA — 큰 소수 두 개를 곱하기는 쉽지만, 곱한 결과를 다시 두 소수로 나누기(소인수분해)는 매우 어렵다는 사실을 이용합니다. 누구나 공개키 (n, e)로 잠글 수 있지만, 여는 개인키 d는 n을 소인수분해할 수 있는 사람만 알 수 있습니다. 여기서는 계산이 보이도록 아주 작은 소수를 씁니다(실제는 300자리가 넘는 수).
키 교환(디피-헬먼) — 지수는 계산하기 쉽지만, 나머지 연산을 한 결과에서 지수를 거꾸로 찾기(이산 로그)는 매우 어렵습니다. 그래서 공개된 값만 주고받아도, 엿듣는 사람은 알 수 없는 같은 비밀 수를 두 사람이 만들 수 있습니다. 물감 섞기에 자주 비유합니다: 공통 물감에 각자 비밀 물감을 섞어 교환하고, 받은 것에 다시 자기 비밀 물감을 섞으면 같은 색이 됩니다.
해시 함수 SHA-256 — 글자 수와 상관없이 항상 256비트(16진수 64자리)의 지문을 만듭니다. 원래 글로 되돌릴 수 없고, 입력이 한 글자만 달라도 지문의 비트가 절반쯤 바뀝니다(눈사태 효과). 서버는 비밀번호를 원문 대신 이런 지문(실제로는 일부러 느리게 만든 해시)으로 저장하고, 내려받은 파일이 바뀌지 않았는지도 지문으로 확인합니다. 이 탭도 브라우저의 진짜 SHA-256을 씁니다.
모든 계산은 이 화면 안에서만 이루어지며 입력한 글을 어디로도 보내지 않습니다. RSA와 디피-헬먼은 원리를 보이기 위한 아주 작은 수라서 실제로는 쉽게 풀리며, 실제 시스템에는 검증된 라이브러리와 충분히 큰 키를 써야 합니다.
방화벽은 정해진 규칙에 따라 접속을 허용하거나 차단합니다. 아래 접속 시도가 컴퓨터 → 방화벽 → 서버 순서로 향한다고 할 때, 검사 버튼을 눌러 어떤 것이 방화벽을 통과해 서버까지 도달하고 어떤 것이 막히는지 확인해 보세요.
접속을 막는 방화벽은 한 곳에만 있는 것이 아닙니다. 아래처럼 네트워크 입구와 서버 자신, 두 단계에서 함께 차단이 이루어집니다.
라우터나 전용 보안장비에 내장된 방화벽이 트래픽이 서버에 도달하기 전에 네트워크 입구에서 먼저 걸러냅니다. 한 번 설정해 두면 그 뒤에 있는 여러 서버를 한꺼번에 보호할 수 있어, 위험한 트래픽이 애초에 내부망 안으로 들어오지 못하게 막는 첫 번째 방어선입니다.
각 서버의 운영체제에도 자체 방화벽 기능(예: Linux의 iptables/nftables, Windows 방화벽)이 있어, 특정 IP 주소나 포트 번호 단위로 세밀하게 차단할 수 있습니다. 예를 들어 "80번 포트(웹)는 모두 허용하되 22번 포트(원격 접속)는 관리자 IP에서만 허용"처럼 서버별로 다른 규칙을 적용해, 네트워크 장비를 통과한 트래픽에 대한 마지막 방어선 역할을 합니다.
기관의 전산실(데이터센터)에서는 방화벽 하나로 모든 것을 막지 않습니다. 성격이 다른 여러 보안 장비를 인터넷 입구부터 서버 앞까지 겹겹이 배치해, 한 장비가 놓친 공격을 다음 장비가 잡도록 합니다. 이를 심층 방어(defense in depth)라고 합니다. 아래는 흔히 볼 수 있는 배치의 예입니다.
| 장비 | 보는 계층 | 작동 원리 | 잘 막는 것 | 혼자서는 못 막는 것 |
|---|---|---|---|---|
| 방화벽 (상태 기반) | L3·L4 | 출발지·목적지 IP, 포트, 프로토콜을 규칙표와 위에서부터 차례로 비교해 처음 맞는 규칙대로 허용·차단합니다. 연결 상태를 기억해, 안에서 시작한 연결의 응답은 자동으로 통과시킵니다. | 허락하지 않은 포트·주소로의 접속, 포트 훑기(스캔) | 열어 둔 포트(웹 443번) 안에 숨은 공격 |
| 차세대 방화벽 (NGFW) | L3~L7 | 포트 번호가 아니라 실제 응용 프로그램(웹, 메신저, 파일 공유 등)과 사용자를 알아보고 규칙을 적용합니다. 암호화된 트래픽을 풀어 검사하는 기능을 갖추기도 합니다. | 허락하지 않은 앱, 위험한 사이트 접속 | 정상 앱의 정상 기능을 이용한 공격 |
| 침입 탐지·방지 (IDS·IPS) | L3~L7 | 패킷 내용을 알려진 공격 패턴(시그니처)과 비교하고, 평소와 다른 이상 행동을 찾습니다. IDS는 복사본을 보고 알리기만 하고, IPS는 길 가운데 서서 바로 차단합니다. | 알려진 취약점 공격, 악성 코드 전파 | 처음 보는 공격(제로데이), 내용을 볼 수 없는 암호화 트래픽 |
| 웹방화벽 (WAF) | L7 (HTTP) | 웹 서버 앞에서 대신 요청을 받아(리버스 프록시) 주소·매개변수·헤더·본문을 검사합니다. SQL 삽입, 스크립트 삽입(XSS), 경로 조작 같은 웹 공격 패턴을 걸러 내고, 허용된 형식만 통과시키도록 설정할 수도 있습니다. | 웹 프로그램의 약점을 노린 요청 | 권한 검사를 빠뜨린 것 같은 프로그램의 논리 오류 |
| DDoS 방어 | L3~L7 | 들어오는 트래픽의 양과 모양을 재다가, 평소보다 크게 늘면 공격 트래픽을 골라 버리거나 속도를 제한합니다. 아주 큰 공격은 통신사·클라우드의 대규모 방어 설비가 흡수합니다. | 대량 접속으로 서비스를 마비시키는 공격 | 적은 양으로 약점을 노리는 공격 |
| VPN·접근제어 | L3~L7 | 밖에서 내부망에 들어올 때 암호화된 통로(VPN)와 2단계 인증을 거치게 하고, 관리자 접속을 한 서버(접근제어·점프 서버)로 모아 누가 무엇을 했는지 기록합니다. | 도청, 훔친 비밀번호만으로의 접속 | 정상 권한을 가진 사람의 실수·악용 |
| 백신·EDR | 서버·PC | 각 컴퓨터 안에서 프로그램의 행동을 지켜보며 악성 코드와 수상한 동작(대량 파일 암호화 등)을 찾아 멈춥니다. | 랜섬웨어, 악성 프로그램 실행 | 네트워크로 오가는 공격 자체 |
| 보안 관제 (SIEM) | 전체 | 모든 장비와 서버의 기록(로그)을 한곳에 모아 시간 순서로 엮어 분석하고, 여러 곳에서 동시에 생긴 이상 징후를 경보로 알립니다. | 여러 단계에 걸친 공격의 발견 | — (직접 막지는 않고 발견·대응을 도움) |
우리나라 공공기관에서는 이에 더해 업무용 컴퓨터망과 인터넷망을 아예 나누는 망분리도 널리 씁니다. 두 망 사이에서 자료를 옮길 때는 검사를 거치는 전용 자료 전송 장치를 씁니다. VPN이 터널을 만드는 원리와 OTP·패스키 같은 사용자 인증 방법은 VPN/OTP와 사용자 인증 편에서 직접 계산해 보며 다룹니다.
👉 규칙을 켜고 끄거나 ▲▼로 순서를 바꾼 뒤, 시험 패킷이 어느 규칙에 걸리는지 확인해 보세요!
방화벽 규칙표 (위에서부터 비교, 처음 맞는 규칙 적용)
맨 아래 '기본 차단'은 어떤 규칙에도 맞지 않는 접속을 모두 막는 마지막 규칙으로, 끄거나 옮길 수 없습니다.
시험 패킷과 결과
👉 예시 요청을 고르거나 검색어를 직접 바꿔 보며, 웹방화벽이 정상 요청과 공격 요청을 어떻게 구별하는지 확인해 보세요!
실제 웹방화벽은 수백 ~ 수천 개의 규칙과 정상 요청의 형식을 함께 써서 판단합니다. 여기서는 대표적인 공격 네 가지의 단순한 규칙만 흉내 냈습니다. 웹방화벽은 보조 방어선일 뿐이고, 가장 확실한 방어는 아래 '서버 프로그램' 표처럼 프로그램 자체를 안전하게 만드는 것입니다.
네트워크 장비를 아무리 갖춰도, 열어 둔 문(웹, 원격 접속)으로 들어온 공격은 결국 서버에 닿습니다. 그래서 서버 하나하나가 스스로를 지키도록 설정해야 합니다. 흔히 이것을 서버 보안 강화(하드닝)라고 합니다.
| 지킬 일 | 방법 | 이유 |
|---|---|---|
| 필요한 것만 설치·실행 | 쓰지 않는 프로그램과 서비스를 지우거나 끄고, 열린 포트를 주기적으로 확인합니다(예: 리눅스 ss -tlnp). | 문이 적을수록 공격받을 곳도 적습니다. |
| 보안 업데이트 | 운영체제와 프로그램, 라이브러리의 보안 패치를 정기적으로(가능하면 자동으로) 적용합니다. | 대부분의 침해는 이미 고칠 방법이 나온 약점을 노립니다. |
| 계정과 권한 | 관리자(root) 계정으로 직접 로그인하지 않고, 필요할 때만 권한을 빌려 씁니다(sudo). 프로그램마다 전용 계정을 만들어 꼭 필요한 권한만 주고, 퇴직자·안 쓰는 계정은 잠급니다. | 한 계정이 뚫려도 피해 범위가 작아집니다(최소 권한). |
| 원격 접속(SSH) | 비밀번호 대신 키로 인증하고, 22번 포트는 관리망·VPN에서만 엽니다. 로그인 실패가 반복되면 그 주소를 잠시 차단합니다(예: fail2ban). | 인터넷에 열린 원격 접속 포트는 하루에도 수천 번 비밀번호 대입 공격을 받습니다. |
| 서버 자체 방화벽 | 기본은 모두 차단하고, 서비스에 필요한 포트만 필요한 주소에 엽니다. | 앞단 방화벽이 잘못 설정되어도 한 번 더 막습니다. |
| 파일 권한과 암호화 | 설정 파일·키 파일은 소유자만 읽게(600) 하고, 개인정보와 백업은 암호화해 저장합니다. | 서버나 디스크를 잃어버려도 내용이 새지 않습니다. |
| 기록과 정확한 시각 | 접속·관리 기록을 남겨 별도 장소(보안 관제)로 보내고, 모든 서버의 시각을 시간 서버(NTP)에 맞춥니다. | 사고가 나면 여러 기록의 시각을 맞춰야 무슨 일이 언제 일어났는지 알 수 있습니다(장비간 시각동기화 편 참고). |
| 백업 3-2-1 | 사본 3개, 서로 다른 매체 2가지, 그중 1개는 다른 장소(또는 네트워크에서 분리된 곳)에 둡니다. 복구 연습도 정기적으로 합니다. | 랜섬웨어는 연결된 백업까지 암호화하므로, 떨어져 있는 사본이 있어야 되살릴 수 있습니다. |
| 물리 보안 | 전산실 출입을 통제·기록하고, 정전에 대비해 무정전 전원 장치(UPS)를 둡니다. | 서버에 직접 손을 대면 대부분의 보안 설정을 우회할 수 있습니다. |
🧮 실제 값으로 계산해 보기 — 비밀번호는 왜 길어야 할까?
유출된 비밀번호 저장값을 공격자가 고성능 컴퓨터로 1초에 100억 번 맞춰 본다고 할 때, 가능한 모든 조합을 시험하는 데 걸리는 시간입니다.
| 비밀번호 | 조합의 수 | 모두 시험하는 시간 |
|---|---|---|
| 소문자 8자리 | 268 ≈ 2.1 × 1011 | 약 21초 |
| 대소문자·숫자 8자리 | 628 ≈ 2.2 × 1014 | 약 6시간 |
| 대소문자·숫자 12자리 | 6212 ≈ 3.2 × 1021 | 약 1만 년 |
| 대소문자·숫자 16자리 | 6216 ≈ 4.8 × 1028 | 약 1,500억 년 |
웹 서버나 데이터 서버의 프로그램 자체에 약점이 있으면, 방화벽이 열어 둔 정상 통로로 공격이 그대로 들어옵니다. 국제 웹 보안 단체 OWASP가 정리한 대표적인 약점과 이를 막는 방법은 다음과 같습니다. 모든 규칙의 바탕은 "사용자가 보낸 값은 아무것도 믿지 않는다"입니다.
| 약점 | 무슨 일이 생기나 | 프로그램에서 지킬 일 |
|---|---|---|
| 입력값 검증 부족 | 예상하지 못한 값이 프로그램을 오작동하게 함 | 서버에서 모든 입력의 형식·길이·범위를 허용 목록 방식으로 확인(브라우저 쪽 검사는 편의일 뿐) |
| SQL 삽입 | 입력에 SQL 명령을 섞어 데이터베이스를 엿보거나 지움 | SQL 문장에 입력을 이어 붙이지 말고 매개변수 바인딩(prepared statement) 사용, DB 계정은 필요한 권한만 |
| 스크립트 삽입(XSS) | 게시글 등에 넣은 스크립트가 다른 사용자 브라우저에서 실행됨 | 화면에 출력할 때 HTML 특수문자를 바꿔서(이스케이프) 출력, 콘텐츠 보안 정책(CSP) 헤더 |
| 요청 위조(CSRF) | 로그인한 사용자 몰래 다른 사이트가 글쓰기·삭제 요청을 보냄 | 상태를 바꾸는 요청마다 CSRF 토큰 확인, 쿠키에 SameSite 속성 |
| 인증·세션 관리 | 비밀번호 유출, 로그인 가로채기 | 비밀번호는 느린 해시로 저장, 로그인 시도 횟수 제한, 로그인 후 세션 ID 새로 발급, 쿠키에 Secure·HttpOnly |
| 권한 검사 누락 | 주소의 번호만 바꿔 남의 정보를 봄 | 요청마다 서버에서 "이 사용자가 이 자료에 접근할 수 있는지" 확인(버튼을 숨기는 것은 보안이 아님) |
| 파일 올리기 | 올린 파일이 서버에서 프로그램으로 실행됨 | 확장자·내용 형식 확인, 크기 제한, 이름을 새로 붙여 실행되지 않는 위치에 저장 |
| 비밀 정보 노출 | 코드 저장소에 남은 DB 비밀번호·API 키가 유출 | 비밀 값은 코드와 분리해 권한이 제한된 설정 파일·환경 변수·비밀 관리 도구에 보관 |
| 자세한 오류 메시지 | SQL 문장·파일 경로가 화면에 드러나 공격 단서가 됨 | 사용자에게는 간단한 안내만, 자세한 내용은 서버 기록에만(비밀번호·개인정보는 기록에도 남기지 않음) |
| 오래된 부품 | 사용 중인 라이브러리의 알려진 약점을 노림 | 사용하는 라이브러리 목록을 관리하고 보안 업데이트를 정기적으로 반영 |
| 암호화하지 않은 통신 | 로그인 정보·쿠키를 중간에서 엿봄 | 모든 접속을 HTTPS로 강제하고 HSTS 등 보안 헤더 설정 |
PHP로 쓴 예시입니다. 다른 언어에도 같은 역할의 기능이 있습니다.
// ✗ 위험: 입력을 SQL 문장에 그대로 이어 붙임 → ' OR '1'='1 같은 입력이 명령이 됨
$sql = "SELECT * FROM users WHERE id = '" . $_GET['id'] . "'";
// ✓ 안전: 자리표시자(?)에 값을 따로 넘김 → 입력은 언제나 '값'으로만 취급됨
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$_GET['id']]);
// ✓ 화면에 출력할 때는 HTML 특수문자를 바꿔서 (XSS 방지)
echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
// ✓ 비밀번호는 원문 대신 느린 해시로 저장하고, 비교도 전용 함수로
$hash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify($input, $hash)) { /* 로그인 성공 */ }
// ✓ 글쓰기·삭제처럼 상태를 바꾸는 요청에는 CSRF 토큰 확인
if (!hash_equals($_SESSION['csrf_token'] ?? '', $_POST['csrf_token'] ?? '')) {
http_response_code(403);
exit;
}
// ✓ 로그인 성공 직후 세션 ID를 새로 발급 (세션 고정 공격 방지)
session_regenerate_id(true);
전파망원경 데이터를 주고받는 서버도 방화벽의 두 단계 방어를 그대로 씁니다. 다만 대용량 과학 데이터에는 몇 가지 특별한 점이 있습니다.
| 지킬 점 | 이유와 방법 |
|---|---|
| 제어 포트는 허락된 주소에서만 | VLBI 전송 프로그램 jive5ab의 제어 포트(기본 2620)에는 비밀번호 같은 인증이 없습니다. 접속만 되면 전송·덮어쓰기 명령을 내릴 수 있으므로, 서버 방화벽에서 제어용 컴퓨터의 IP만 허용합니다. |
| 데이터 포트는 상대 서버에서만 | 데이터 포트(기본 2630)는 데이터를 주고받는 상대 서버의 IP만 허용합니다. UDP 기반 전송을 쓰면 같은 번호의 UDP도 열어야 합니다. |
| 받기와 올리기 권한 나누기 | 관측 자료를 나눠 주는 저장소는 누구나 내려받게 열어 두더라도, 올리기·지우기는 허락된 장비와 주소에서만 하도록 따로 막아 둡니다. |
| 내용이 맞는지 확인 | 체크섬(SHA-256 등)으로 받은 파일이 보낸 파일과 같은지 확인합니다. 전송 도구의 "완료" 메시지만 믿지 않습니다. |
| 암호화와 속도 사이의 선택 | 수십 Gbps를 암호화하면 컴퓨터 부담이 커서, 대용량 데이터는 외부와 분리된 연구망 안에서 보내고 명령·로그인 같은 중요한 통신만 암호화(SSH, VPN)하는 경우가 많습니다. |
실제 방화벽 설정 예(ufw)와 전송 도구 설치 방법은 대용량 데이터 전송 및 수신 편 ⑦에서 다룹니다.
📖 용어 및 약자 설명
| 용어·약자 | 원어(풀이) | 뜻 |
|---|---|---|
| 암호의 기본 용어 | ||
| 평문 / 암호문 | plaintext / ciphertext | 읽을 수 있는 원래 글 / 암호화되어 알아볼 수 없게 바뀐 글 |
| 암호화 / 복호화 | encryption / decryption | 평문을 암호문으로 바꾸기 / 키로 암호문을 평문으로 되돌리기 |
| 키 | key | 암호화·복호화에 쓰는 비밀 값. 키의 가짓수가 많을수록 안전 |
| 알고리즘 | algorithm | 정해진 계산 순서. 현대 암호는 알고리즘을 공개하고 키만 비밀로 함 |
| 케르크호프스의 원리 | Kerckhoffs's principle | "방법이 알려져도 키만 비밀이면 안전해야 한다"는 암호 설계 원칙 |
| 무차별 대입 | brute force | 가능한 키를 하나도 빠짐없이 모두 넣어 보는 공격 |
| 빈도 분석 | frequency analysis | 글자가 나오는 횟수의 버릇으로 단순 치환 암호를 푸는 방법 |
| 치환 / 전치 암호 | substitution / transposition | 글자를 다른 글자로 바꾸는 암호 / 글자는 두고 순서만 섞는 암호 |
| 대칭키 암호 | symmetric-key cipher | 잠그는 키와 여는 키가 같은 암호. 빠름(예: AES) |
| 공개키(비대칭) 암호 | public-key cipher | 공개키로 잠그고 짝이 되는 개인키로만 여는 암호(예: RSA, ECC) |
| 키 교환 | key exchange | 공개된 값만 주고받아 둘만 아는 같은 비밀 키를 만드는 방법 |
| 해시 함수 | hash function | 어떤 입력이든 고정 길이 지문으로 요약하는 일방향 함수. 되돌릴 수 없음 |
| 무결성 | integrity | 자료가 중간에 바뀌지 않았음. 해시·인증 태그로 확인 |
| 전자서명 | digital signature | 개인키로 만든 값으로, 누가 보냈고 내용이 바뀌지 않았음을 공개키로 확인 |
| 인증서 / 인증기관 | certificate / CA (Certificate Authority) | 웹사이트의 공개키가 그 주소 주인의 것임을 믿을 만한 기관(CA)이 서명해 보증한 전자 문서 |
| 소인수분해 / 이산 로그 | factorization / discrete logarithm | 큰 수를 소수의 곱으로 나누기 / 나머지 연산 결과에서 지수 찾기. 둘 다 매우 어려워 공개키 암호의 바탕이 됨 |
| 암호 관련 약자 | ||
| AES | Advanced Encryption Standard | 2001년 미국 표준이 된 대칭키 블록 암호. 키 128·192·256비트 |
| SEED | — | 1999년 우리나라에서 개발한 128비트 블록 암호 |
| ChaCha20 | — | 모바일 기기 등에서 많이 쓰는 빠른 대칭키(스트림) 암호 |
| GCM | Galois/Counter Mode | AES를 쓰는 방식의 하나. 암호화와 함께 인증 태그로 변조 여부를 검사 |
| IV | Initialization Vector | 암호화할 때마다 새로 정하는 시작 값. 같은 평문도 매번 다른 암호문이 되게 함(공개해도 됨) |
| RSA | Rivest–Shamir–Adleman | 1977년 발표된 공개키 암호. 만든 세 사람의 이름 머리글자 |
| ECC | Elliptic Curve Cryptography | 타원곡선을 이용한 공개키 암호. RSA보다 짧은 키로 같은 안전성 |
| DH | Diffie–Hellman | 1976년 발표된 키 교환 방법(디피-헬먼) |
| OAEP | Optimal Asymmetric Encryption Padding | RSA로 암호화하기 전 무작위 값을 섞는 채움 방식. 같은 평문이 같은 암호문이 되는 것을 막음 |
| XOR | exclusive OR | 두 비트가 같으면 0, 다르면 1인 연산. 컴퓨터 암호의 기본 연산 |
| OTP | One-Time Pad | 일회용 패드. 평문만큼 긴 무작위 키를 한 번만 쓰는 암호(일회용 비밀번호 OTP와는 다른 뜻) |
| SHA-256 | Secure Hash Algorithm 256 | 256비트 지문을 만드는 해시 함수 |
| bcrypt · Argon2 | — | 비밀번호 저장용으로 일부러 느리게 만든 해시 함수 |
| PQC | Post-Quantum Cryptography | 양자내성암호. 양자컴퓨터로도 풀기 어렵게 설계한 새 공개키 암호 |
| BB84 | Bennett–Brassard 1984 | 빛 알갱이(광자)의 양자 성질로 키를 나누는 양자 암호 방식 |
| 네트워크·통신 | ||
| IP / IP 주소 | Internet Protocol | 인터넷에서 패킷을 목적지까지 보내는 규약 / 기기의 인터넷 주소 |
| TCP / UDP | Transmission Control Protocol / User Datagram Protocol | 확인하며 순서대로 보내는 규약 / 확인 없이 빠르게 보내는 규약 |
| 포트 | port | 한 컴퓨터 안에서 어느 프로그램에 전달할지 구분하는 번호(예: 웹 443, SSH 22) |
| 패킷 | packet | 네트워크로 보내기 위해 잘게 나눈 데이터 묶음 |
| L3 · L4 · L7 | Layer 3 · 4 · 7 | OSI 7계층의 네트워크 계층(IP) · 전송 계층(TCP/UDP) · 응용 계층(HTTP 등) |
| HTTP / HTTPS | HyperText Transfer Protocol (Secure) | 웹 페이지를 주고받는 규약 / 이를 TLS로 암호화한 것(주소창 자물쇠) |
| TLS | Transport Layer Security | HTTPS 등에서 통신을 암호화하는 규약(예전 이름 SSL) |
| SSH | Secure Shell | 서버에 암호화된 통로로 원격 접속하는 규약(기본 22번 포트) |
| VPN | Virtual Private Network | 인터넷 위에 암호화된 전용 통로를 만들어 내부망처럼 접속하는 기술 |
| NTP | Network Time Protocol | 네트워크로 컴퓨터 시각을 맞추는 규약 |
| API | Application Programming Interface | 프로그램끼리 정해진 형식으로 요청·응답을 주고받는 창구 |
| DB | Database | 데이터베이스. 정리된 자료를 저장·검색하는 시스템 |
| 보안 장비와 방어 개념 | ||
| 방화벽 | firewall | 규칙에 따라 접속을 허용·차단하는 장비·프로그램 |
| 상태 기반 방화벽 | stateful firewall | 연결 상태를 기억해, 안에서 시작한 연결의 응답은 자동 통과시키는 방화벽 |
| NGFW | Next-Generation Firewall | 차세대 방화벽. 포트가 아니라 응용 프로그램과 사용자까지 알아보고 규칙 적용 |
| IDS / IPS | Intrusion Detection / Prevention System | 침입 탐지 시스템(알리기만 함) / 침입 방지 시스템(바로 차단함) |
| WAF | Web Application Firewall | 웹방화벽. HTTP 요청 내용을 검사해 웹 공격을 걸러 냄 |
| DDoS | Distributed Denial of Service | 분산 서비스 거부 공격. 많은 기기로 한꺼번에 접속해 서비스를 마비시킴 |
| DMZ | Demilitarized Zone | 외부에 공개하는 서버를 내부망과 분리해 두는 중간 구역 |
| EDR | Endpoint Detection and Response | PC·서버 안에서 수상한 행동을 찾아 대응하는 보안 프로그램 |
| SIEM | Security Information and Event Management | 보안 관제 시스템. 여러 장비의 기록을 모아 분석하고 경보 |
| 리버스 프록시 | reverse proxy | 서버 앞에서 요청을 대신 받아 전달하는 중계 서버(웹방화벽이 이 위치에서 동작) |
| 시그니처 | signature | 알려진 공격의 특징 패턴. IPS·백신이 비교에 씀 |
| 제로데이 | zero-day | 아직 고칠 방법이 나오지 않은, 처음 알려진 약점이나 그것을 노린 공격 |
| 오탐 / 미탐 | false positive / false negative | 정상을 공격으로 잘못 판단 / 공격을 놓침 |
| 심층 방어 | defense in depth | 성격이 다른 방어 수단을 겹겹이 두어 하나가 뚫려도 다음이 막게 하는 전략 |
| 제로 트러스트 | zero trust | 내부망이라도 기본으로 믿지 않고, 접속할 때마다 사용자와 기기를 확인하는 방식 |
| 망분리 | network separation | 업무망과 인터넷망을 물리적·논리적으로 나누는 것 |
| 접근제어(점프) 서버 | bastion / jump server | 관리자 접속을 한곳으로 모아 통제하고 작업을 기록하는 서버 |
| 서버·웹 프로그램 보안 | ||
| OWASP | Open Worldwide Application Security Project | 웹 보안 정보를 공개하는 국제 비영리 단체. "OWASP Top 10"으로 유명 |
| SQL / SQL 삽입 | Structured Query Language / SQL injection | 데이터베이스 명령 언어 / 입력에 SQL 명령을 섞어 데이터베이스를 조작하는 공격 |
| XSS | Cross-Site Scripting | 스크립트 삽입 공격. 넣은 스크립트가 다른 사용자 브라우저에서 실행됨 |
| CSRF | Cross-Site Request Forgery | 요청 위조 공격. 로그인한 사용자 몰래 다른 사이트가 요청을 보내게 함 |
| CSP | Content Security Policy | 페이지에서 실행할 수 있는 스크립트 출처를 제한하는 보안 헤더 |
| HSTS | HTTP Strict Transport Security | 브라우저가 그 사이트에 항상 HTTPS로만 접속하게 하는 보안 헤더 |
| 매개변수 바인딩 | prepared statement / parameter binding | SQL 문장과 입력값을 따로 넘겨, 입력이 명령이 아닌 값으로만 다뤄지게 하는 방법 |
| 이스케이프 | escape | <, > 같은 특수문자를 화면용 기호(< 등)로 바꿔 명령으로 해석되지 않게 하는 처리 |
| 세션 / 쿠키 | session / cookie | 로그인 상태를 서버가 기억하는 정보 / 그 표시를 브라우저에 저장한 작은 값 |
| Secure · HttpOnly · SameSite | 쿠키 속성 | HTTPS로만 전송 · 스크립트가 읽지 못함 · 다른 사이트에서 온 요청에는 보내지 않음 |
| 2단계 인증 | 2FA / MFA (Multi-Factor Authentication) | 비밀번호에 휴대전화 확인 등 다른 수단을 더하는 인증 |
| 하드닝 | hardening | 서버의 불필요한 기능을 없애고 설정을 강화해 공격받을 곳을 줄이는 일 |
| 패치 | patch | 프로그램의 오류·보안 약점을 고친 업데이트 |
| root / sudo | — | 리눅스의 최고 관리자 계정 / 필요할 때만 관리자 권한을 빌려 명령을 실행하는 도구 |
| fail2ban | — | 로그인 실패가 반복되는 주소를 자동으로 잠시 차단하는 리눅스 도구 |
| 랜섬웨어 | ransomware | 파일을 암호화해 쓰지 못하게 한 뒤 돈을 요구하는 악성 코드 |
| 3-2-1 백업 | 3-2-1 backup rule | 사본 3개, 매체 2가지, 그중 1개는 다른 장소에 두는 백업 원칙 |
| UPS | Uninterruptible Power Supply | 무정전 전원 장치. 정전 때 잠시 전기를 공급 |
| PHP / HTML | PHP: Hypertext Preprocessor / HyperText Markup Language | 웹 서버 프로그램 언어 / 웹 페이지를 표현하는 언어 |
| 기관·문서 | ||
| KISA | Korea Internet & Security Agency | 한국인터넷진흥원. 보호나라 운영, 침해 사고 대응 |
| CERT / CC | Computer Emergency Response Team / Coordination Center | 침해 사고 대응 조직 / 그 조정 센터. KrCERT/CC는 우리나라 조직 |
| NIST | National Institute of Standards and Technology | 미국 국립표준기술연구소. AES·양자내성암호 등 보안 표준 발표 |
| CSRC · SP · FIPS | Computer Security Resource Center · Special Publication · Federal Information Processing Standard | NIST의 보안 자료 센터 · 지침 문서 · 연방 정보 처리 표준 |
| UTF-8 | Unicode Transformation Format – 8-bit | 전 세계 글자를 바이트로 저장하는 방식(한글은 대부분 3바이트) |
🧑🏫 선생님·학부모님을 위한 설명 도움말
원리 자세히 보기
암호의 발전사
| 시기 | 사건 | 의미 |
|---|---|---|
| 고대 그리스 | 스키테일 | 널리 알려진 이야기로는 스파르타 사람들이 막대에 가죽 띠를 감아 글을 쓰고 풀어서 보냈다고 합니다. 같은 굵기의 막대가 있어야 읽을 수 있는 '자리 바꾸기' 암호입니다. 실제로 암호로 쓰였는지는 학자들 사이에 의견이 갈립니다. |
| 기원전 1세기 | 카이사르 암호 | 로마의 역사가 수에토니우스에 따르면 율리우스 카이사르는 글자를 세 자리씩 밀어 군사 편지를 썼습니다. 위 실험의 키 3이 바로 이 방식입니다. |
| 9세기 | 알킨디의 빈도 분석 | 아랍의 학자 알킨디가 글자의 출현 빈도로 암호를 푸는 방법을 처음으로 기록했습니다. 단순한 글자 바꾸기 암호는 이때부터 안전하지 않게 되었습니다. |
| 1918~1945년 | 에니그마와 암호 해독 | 독일의 셰르비우스가 회전자로 글자를 계속 바꾸는 암호 기계를 특허로 냈고, 군대가 이를 썼습니다. 1932년 폴란드의 레예프스키가 처음 풀었고, 제2차 세계대전 중 영국 블레츨리 파크에서 튜링 등이 해독 기계로 이어받았습니다. |
| 1976~1977년 | 공개키 암호 | 디피와 헬먼이 처음 만난 사이에도 비밀 키를 나눠 가질 수 있는 방법을 발표했고, 이듬해 RSA 암호가 나왔습니다. 오늘날 인터넷 보안의 바탕입니다. |
| 1984년 | 양자 암호(BB84) | 베넷과 브라사드가 빛 알갱이(광자)의 양자 성질로 키를 나누는 방법을 제안했습니다. 누군가 엿보면 그 흔적이 반드시 남는다는 것이 특징입니다. |
| 1999년 / 2001년 | SEED와 AES | 우리나라에서 128비트 블록 암호 SEED가 개발되었고, 미국은 공개 경쟁으로 고른 AES를 표준으로 정했습니다. |
| 2024년 | 양자내성암호 표준 | 미래의 양자컴퓨터가 RSA 같은 공개키 암호를 풀 수 있다는 우려에 대비해, 미국 국립표준기술연구소(NIST)가 양자컴퓨터로도 풀기 어려운 새 암호 표준을 발표했습니다. |
보안 장비와 큰 보안 사고의 역사
| 시기 | 사건 | 의미 |
|---|---|---|
| 1988년 | 모리스 웜 | 인터넷에 연결된 컴퓨터의 약점을 타고 스스로 퍼지는 프로그램이 당시 인터넷 컴퓨터의 상당수를 멈추게 했습니다. 이 사건을 계기로 침해 사고 대응 조직(CERT)이 생겼습니다. |
| 1980년대 말 ~ 1990년대 | 패킷 필터와 상태 기반 방화벽 | IP·포트로 거르는 패킷 필터 방화벽이 등장했고, 1990년대에는 연결 상태를 기억하는 상태 기반 방화벽이 상용화되어 기업 네트워크의 기본 장비가 되었습니다. |
| 2003년 | 슬래머 웜과 OWASP Top 10 | 1월 슬래머 웜이 몇 분 만에 전 세계로 퍼져 우리나라 인터넷이 마비되었습니다(1·25 인터넷 대란). 같은 해 웹 프로그램의 대표 약점을 정리한 OWASP Top 10이 처음 발표되었습니다. |
| 2009년 | 7·7 DDoS 공격 | 감염된 수많은 PC가 국내외 주요 사이트에 동시에 접속해 서비스를 마비시켰고, DDoS 방어 체계를 갖추는 계기가 되었습니다. |
| 2013년 | 3·20 전산망 해킹 | 방송사와 금융기관의 PC·서버 하드디스크가 한꺼번에 지워졌습니다. 내부 관리 서버를 거쳐 퍼진 공격이라, 관리자 접속 통제와 망분리의 중요성이 커졌습니다. |
| 2016년 ~ 현재 | IoT 기기 감염과 랜섬웨어 | 기본 비밀번호를 쓰던 카메라·공유기가 대규모 공격에 동원되고(CCTV 편 참고), 파일을 암호화해 돈을 요구하는 랜섬웨어가 늘면서 분리 보관 백업이 필수가 되었습니다. |
비유로 설명하기
자주 하는 오해
함께 해 볼 질문·활동
📚 참고 자료 및 출처
본 교육자료는 Anthropic(Claude) 및 OpenAI(ChatGPT)를 활용하여 제작하였으며, 제작자가 내용을 검토·편집하였습니다. 주요 참고자료와 출처는 각 페이지의 「참고 자료 및 출처」에 명시하였습니다. 출처가 별도로 표기되지 않은 페이지와 참고자료에 포함되지 않은 내용은 제작자가 직접 작성하거나 정리한 것입니다. 내용에 오류가 있거나 수정이 필요한 사항을 발견하시면 kvnsite@kasi.re.kr로 알려 주시기 바랍니다.