최근 수정 시각 : 2024-08-22 08:36:13

암호학

암호 알고리즘에서 넘어옴
이산수학
Discrete Mathematics
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px; word-break: keep-all"
이론
<colbgcolor=#3CC> 기본 대상 수학기초론( 수리논리학 · 집합론) · 수열 · 조합 · 알고리즘 · 확률
다루는 대상과 주요 토픽
수열 등차수열( 뛰어 세기) · 등비수열 · 계차수열 · 조화수열 · 귀납적 정의( 점화식) · 급수 · 규칙과 대응 · 규칙 찾기 · 피보나치 수열 · 읽고 말하기 수열 · 생성함수
조합 경우의 수( 공식) · 순열( 완전 순열 · 염주 순열) · 치환 · 분할( 분할수) · 최단거리 · 제1종 스털링 수 · 제2종 스털링 수 · 카탈랑 수 · 벨 수 · 라흐 수 · 포함·배제의 원리 · 더블 카운팅 · 조합론
그래프 수형도(트리) · 인접행렬 · 마방진 · 마법진 · 한붓그리기( 해밀턴 회로) · 쾨니히스베르크 다리 건너기 문제
기타 P-NP 문제미해결 · 4색정리 · 이항정리( 파스칼의 삼각형) · 이산 푸리에 변환 · 비둘기 집의 원리 · 상트페테르부르크의 역설 · 투표의 역설 · 에르고딕 가설미해결 · 콜라츠 추측미해결 · 시행착오 ( 예상과 확인) · 불 논리 · 브라에스 역설
관련 문서 논리학 관련 정보 · 수학 관련 정보 · 컴퓨터 관련 정보 · 틀:수학기초론 · 틀:통계학 · 틀:이론 컴퓨터 과학 }}}}}}}}}


정수론
Number Theory
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
공리
페아노 공리계 · 정렬 원리 · 수학적 귀납법 · 아르키메데스 성질
산술
나눗셈 약수· 배수 배수 · 약수( 소인수) · 소인수분해( 목록 · 알고리즘) · 공배수 · 공약수 · 최소공배수 · 최대공약수
약수들의 합에 따른 수의 분류 완전수 · 부족수 · 과잉수 · 친화수 · 사교수 · 혼약수 · 반완전수 · 불가촉 수 · 괴짜수
정리 베주 항등식 · 산술의 기본정리 · 나눗셈 정리
기타 유클리드 호제법 · 서로소
디오판토스 방정식 페르마의 마지막 정리 · 피타고라스 세 쌍 · 버치-스위너턴다이어 추측(미해결)
모듈러 연산
잉여역수 · 2차 잉여 · 기약잉여계 · 완전잉여계 · 중국인의 나머지 정리 · 합동식 · 페르마의 소정리 · 오일러 정리 · 윌슨의 정리
소수론
수의 분류 소수 · 합성수 · 메르센 소수 · 쌍둥이 소수( 사촌 소수 · 섹시 소수) · 페르마 소수 · 레퓨닛 수
분야 대수적 정수론( 국소체) · 해석적 정수론
산술함수 뫼비우스 함수 · 소수 계량 함수 · 소인수 계량 함수 · 약수 함수 · 오일러 파이 함수 · 폰 망골트 함수 · 체비쇼프 함수 · 소수생성다항식
정리 그린 타오 정리 · 페르마의 두 제곱수 정리 · 디리클레 정리 · 소피 제르맹의 정리 · 리만 가설(미해결) · 골드바흐 추측(미해결)( 천의 정리) · 폴리냑 추측(미해결) · 소수 정리
기타 에라토스테네스의 체 · 윌런스의 공식
}}}}}}}}} ||

''' 이론 컴퓨터 과학
{{{#!wiki style="display: inline-block; font-family:Times New Roman, serif;font-style:italic"'''
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#a36> 이론
기본 대상 수학기초론{ 수리논리학( 논리 연산) · 계산 가능성 이론 · 범주론 · 집합론} · 이산수학( 그래프 이론) · 수치해석학 · 확률론 통계학 · 선형대수학
다루는 대상과 주요 토픽
계산 가능성 이론 재귀함수 · 튜링 머신 · 람다대수 · 처치-튜링 명제 · 바쁜 비버
오토마타 이론 FSM · 푸시다운 · 튜링 머신( 폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임 · 형식언어
계산 복잡도 이론 점근 표기법 · 튜링 기계^ 고전, 양자, 비결정론적, 병렬 임의접근 기계^ · 알고리즘 · 자료구조 · 알고리즘 패러다임( 그리디 알고리즘, 동적 계획법)
정보이론 데이터 압축( 무손실 압축 포맷 · 손실 압축 포맷) · 채널 코딩(채널 용량) · 알고리즘 정보 이론(AIT) · 양자정보과학
프로그래밍 언어이론 프로그래밍 언어( 함수형 언어 · 객체 지향 프로그래밍 · 증명보조기) · 메타 프로그래밍 · 유형 이론 · 프로그래밍 언어 의미론 · 파싱 · 컴파일러 이론
주요 알고리즘 및 자료구조
기초 정렬 알고리즘 · 순서도 · 탐색 알고리즘
추상적 자료형 및 구현 배열^ 벡터^ · 리스트^ 연결 리스트^ · 셋(set)^ 레드-블랙 트리, B-트리^ · 우선순위 큐^, 피보나치 힙^
수학적 최적화 조합 최적화 외판원 순회 문제 · 담금질 기법 · 유전 알고리즘 · 기계학습
볼록 최적화 내부점 방법 · 경사하강법
선형계획법 심플렉스법
계산 수론 및 암호학 밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · LLL 알고리즘 · 해시( MD5 · 암호화폐 · 사전 공격( 레인보우 테이블) · SHA) · 양자 암호
대칭키 암호화 방식 블록 암호 알고리즘( AES · ARIA · LEA · Camellia) · 스트림 암호 알고리즘(RC4)
공개키 암호화 방식 공개키 암호 알고리즘( 타원 곡선 암호 · RSA) · 신원 기반 암호 알고리즘(SM9)
계산기하학 볼록 껍질 · 들로네 삼각분할 및 보로노이 도형^Fortune의 line-sweeping 알고리즘^ · 범위 탐색^vp-tree, R-tree^ · k-NN
그래프 이론 탐색^ BFS, DFS, 다익스트라 알고리즘, A* 알고리즘^ · 에드몬드-카프 · 크루스칼 알고리즘 · 위상 정렬 · 네트워크 이론
정리
정지 문제 대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결
틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학 }}}}}}}}}



[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 || 수학( 해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학( 환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학( 형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU( 그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/ C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시( SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로( 보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{ 컴파일러( 어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩( 유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도( 최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리( 기계 번역 · 음성인식) · 버전 ( 버전 관리 시스템 · Git · GitHub)


1. 개요2. 고전 암호
2.1. 카이사르 암호2.2. 비즈네르 암호2.3. 스키테일2.4. 단일문자 체계2.5. 에니그마
3. 현대 암호
3.1. 양방향 암호 시스템
3.1.1. 대칭키 암호화 기법
3.1.1.1. 블록 암호 알고리즘3.1.1.2. 스트림 암호 알고리즘
3.1.2. 공개키 암호화 기법
3.1.2.1. 공개키 암호 알고리즘3.1.2.2. 신원 기반 암호 알고리즘
3.1.3. 양자 암호
3.2. 단방향 암호 시스템
4. 여담5. 악용 사례6. 관련 문서

1. 개요

/ Cryptology

정보를 보호하기 위한 수학적, 언어학적인 방법을 다루는 학문이다. 컴퓨터과학, 정보보안, 수학, 언어학과 관련 깊다. 전시에서의 통신 수단으로도 많이 쓰이기 때문에 군사 기술과도 관계가 깊다.

암호학은 크게 두 가지 분류로 나누어진다. 후술할 비밀키 암호화 기법 공개키 암호화 기법이며, 역사적으로는 비밀키 암호화 기법이 먼저 등장하였다.

수학과에서는 4학년 때 응용 수학으로서 배우게 된다. 그리고 국가정보원, CIA 정보기관을 연상시키는 가장 대표적인 학문으로 실제로도 정보기관 채용 모집인원에 암호학 전공자가 아주 많은 편이고, 많은 암호 기술들이 정보기관의 주도로 만들어지고 있다.

2. 고전 암호

2.1. 카이사르 암호

역사상 가장 오래된 암호의 형태 중 하나로 유명한 체계. 율리우스 카이사르가 사용했다고 전해진다.

원문의 글자 하나하나를 다른 글자로 치환하는 치환 암호로, 모든 글자를 정해진 키 숫자만큼 뒤의 철자로 바꾸는 방식. 현대 영문 알파벳이 26종이므로, 총 25가지 키를 사용할 수 있다. 크기가 다른 원판 두 개를 겹쳐 놓고 중심을 서로 고정한 뒤 테두리 쪽에 순서대로 알파벳을 쓰는 식으로 암호판도 만들 수 있다.

이 체계 자체가 유명하기도 하지만, 암호화 원리 자체가 매우 단순하여 전혀 모르는 사람이라도 글자 빈도 분석이나 브루트 포스로 순식간에 뚫을 수 있다. 현대 기준으로는 보안성은 거의 없는 수준. 카이사르 당시에도 자기 이름 철자인 C만 키로 써서(...) 유명무실한 암호였다는 일화도 있다. 그래도 전승()되는 최초의 암호화 기법이라는 점에 의의가 있다.

예문은 아래와 같다.
원문 b r u t u s i s b e t r a y e r
d d d d d d d d d d d d d d d d
암호문 F V Y X Y W M W F I X V E C I V

2.2. 비즈네르 암호

카이사르 암호를 키값이 26개 밖에 존재하지 않는다는 단점을 보완해서 만든 암호이다.
여기서 키는 한 글자가 아닌 하나의 단어로 키 칸에 계속 반복되게 적는다. 그럼 같은 단어라도 키에서 다른 위치에 걸리게 되면 암호화된 글자는 달라지게 된다.
상세히 적자면, A에 0, B에 1, ..., Z에 25의 숫자를 대입해서 원문과 키의 숫자를 더한 결과값을 나타낸 것이다.
다음은 그 예시다. 이 예시에서 키는 'dog' 라고 하자.
원문 b r u t u s i s b e t r a y e r
d o g d o g d o g d o g d o g d
암호문 E F A W I Y L G H H H X D M K U

암호문에 HHH 라는 연속된 글자가 나오지만, 이것의 원본은 bet 로 각각 다르다. 그만큼 해독이 어려워진다.

2.3. 스키테일

파일:scytale1.jpg 파일:scytale2.jpg
주로 스파르타에서 전쟁에 나가 있는 군대에 메시지을 전할때 썼던 암호이다. 이 암호를 암호화 하고 복호화 하는 과정은 스키테일(Scytale) 이라는 원통형 나무 막대기를 이용한다. 이것으로 암호화하는 과정은 다음과 같다.

1. 이 막대기에 종이를 왼쪽부터 오른쪽으로 위에서 아랫방향으로 돌려 싼 다음 왼쪽에서 오른쪽으로 메세지를 적는다.
2. 빈칸은 아무렇게나 채운 다음 종이를 스키테일에서 푼다.

이것을 복호화 할 때는 같은 굵기의 스키테일에 감아서 확인을 해보면 된다.

2.4. 단일문자 체계

2.5. 에니그마

파일:상세 내용 아이콘.svg   자세한 내용은 에니그마(기계) 문서
번 문단을
부분을
참고하십시오.

3. 현대 암호



파일:CC-white.svg 이 현대 암호의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 현대 암호의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)
IotBN8)yfBA7L9OjoK)phwEfVXRSg9XukiY!
단어 namu.wiki을 암호 umanle, 448비트 Blowfish 방식으로 암호화한 문장.

원본을 알아보지 못하도록 비화하는데 쓰이는 컴퓨터 알고리즘.

컴퓨터가 발달하면서 이전에는 군용이나 중대한 사업용으로만 쓰이던 암호가 일상생활에도 널리 활용되게 되었다. 단순한 개인 게시판을 시작으로 대형 DBMS까지 다양한 분야에서 암호학이 실제로 쓰이며, 이러한 암호의 보급화는 전자상거래가 시작되는 데 결정적인 역할을 하기도 했다. 암호는 개인정보 보호와 악의적 공격자의 공격으로 인하여 데이터가 누출되었을 때 중요한 자료들을 바로 가져갈 수 없도록 처리하거나 온라인 상에서 신원을 보장하는데 이용될 수 있다.

3.1. 양방향 암호 시스템



파일:CC-white.svg 이 양방향 암호 시스템의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 양방향 암호 시스템의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)


암호는 크게 대칭형 암호와 비대칭형 암호의 2가지로 나눌 수 있으며, 암호화에 사용하는 키 값과 복호화에 사용하는 키 값이 같은지 다른지를 기준으로 구분한다. 암호화할 때 사용한 키로 복호화를 할 수 있으면 대칭형 암호, 암호화 키와 복호화 키를 따로 구분하면 비대칭형 암호다. 통상적으로 대칭형 암호는 비공개키 암호에 사용되며 비대칭형은 공개키 암호에 사용된다.

대칭형 암호 중에는 블럭 암호와 스트림 암호가 있다. 전자는 일정 비트 수(단위, 또는 블럭)를 암호화하는 방식이며, 후자는 연속적인 데이터를 암호화하는 방식이다.

3.1.1. 대칭키 암호화 기법

대칭키 암호화 기법은 암호화와 복호화에 사용되는 키가 일치하는 암호 알고리즘 체계이다.

두 사람이 비밀키 암호를 이용하여 데이터를 주고 받기 위해서는 동일한 키를 나눠가져야 하므로 키 분배 방법이 매우 중요하게 다뤄진다. 일반적으로 키 동의, 키 합의 방법으로 DH 알고리즘을 사용하거나 SSL/TLS 처럼 공개키 암호를 이용하여 키를 분배한다.



파일:CC-white.svg 이 대칭키 암호화 기법의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 대칭키 암호화 기법의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)


상술했듯 암호화할 때 사용하는 키와 복호화할 때 사용하는 키가 동일한 암호화 기법이다. 현재 사용되는 대칭형 암호화 알고리즘은 주로 파이스텔 네트워크(Feistel Network) / S-Box를 통하여 블럭 암호로 만들어졌지만 AES처럼 파이스텔 네트워크를 사용하지 않는 알고리즘도 있다. 이쪽은 라인달(Rijndael) 알고리즘이라는 비교적 새로운 알고리즘을 적용하고 있다.

현재 가장 보편적으로 쓰이는 암호화 방식은 현 미국 표준 방식인 AES. 128~256비트 키를 적용할수 있어 보안성이 뛰어나며 공개된 알고리즘이라 누구나 사용할 수 있다. 그전에는 DES(Data Encryption Standard)라는 알고리즘이 1975년부터 사용되고 있었으나 너무 오래되어 취약점이 발견됨에 따라[1] 이를 대체하기 위해 등장한 것이 바로 AES이다.

그 외에는 RC4, Twofish, Serpent, Blowfish, CAST5, 3DES, IDEA 등의 암호화 알고리즘이 존재하며 국내에서 개발된 SEED ARIA라는 알고리즘도 있다. AES는 현재 일반인들이 쉽게 접근할 수 있는 암호화 방식들 중에서 충분히 안전성이 있다고 알려진 암호로 암호화 키와 복호화 키가 동일하다. 즉, ABCDE라는 문자열을 QWERTY라는 키로 암호화했으면 복호화도 반드시 QWERTY로 해야 한다.(실제 키는 128비트 또는 256비트와 같이 알고리즘에서 요구하는 길이를 사용하여야 하기 때문에 16바이트 또는 32바이트가 되어야 한다.)

대칭형 암호를 공격하는 방식에는 Known-PlainText, Chosen-PlainText, Differential, Linear 등의 방식이 있으며, AES의 경우 이러한 방식을 통한 알고리즘의 취약점 공격에 대해서는 아직 알려진 게 없음으로 안전하다고 알려져 있다.
3.1.1.1. 블록 암호 알고리즘


파일:CC-white.svg 이 블록 암호 알고리즘의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 블록 암호 알고리즘의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)

국내에서 개발된 암호 알고리즘은 KISA에서 명세서와 소스코드를 모두 무료로 다운받아 사용할 수 있다.
  • AES(Advanced Encryption Standard): 현재 미국 국가 표준 대칭키 암호화 기법. 전세계적으로 가장 많이 사용되는 대칭키 암호화 기법이다. 128/192/256비트 키를 사용한다.
  • DES(Data Encryption Standard): 구 미국 국가 표준. 56비트 키를 사용한다.
  • 3DES: DES를 3번 반복한다. DES로 키를 바꿔가며 암호화→복호화→암호화를 해서 키 길이를 늘리는 기법이다. 2키를 사용하는 경우 112비트, 3키를 사용하는 경우 168비트의 키 길이를 가지기 때문에 현재도 제법 안전성은 있다고는 하지만, 느리다는 문제가 있다.
  • SEED: 대한민국의 국가 암호 표준. 128비트 키를 사용하며 2005년에 ISO/IEC 국제 표준으로 제정.
  • HIGHT: 저전력, 경량 환경에서 사용할 수 있도록 개발된 64비트 블록암호 알고 리즘. 코드 사이즈가 작고 AES보다도 속도가 빠르다. 2010년 12월 ISO/IEC 국 제표준으로 제정.
  • ARIA: SEED 이후로 나온 대한민국의 국가 암호 표준. 128/192/256비트 키를 사용한다. (AES와 동일)
  • LEA(Lightweight Encryption Algorithm): 빅데이터, 클라우드, 모바일 등의 환경에 맞게 2013년에 국내 개발된 128비트 경량 암호 알고리즘. AES의 1.5~2배의 속도를 낼 수 있다.
  • Blowfish
  • Camellia: 일본 미쓰비시전기와 NTT에서 개발한 알고리즘. 블록 사이즈는 128비트이며 128/192/256비트 키를 사용한다.
  • GOST - 소련/ 러시아 연방 표준 암호. 처음은 KGB가 개발한 '마그마'로 GOST 28147-89이 되었다. 키값은 256비트 고정. GOST R 34.11-94, GOST 34.311-95 해쉬가 이를 사용한다. GOST는 키만 컸지 DES와 비슷해서 나중에 Kuznyechik[2]가 새로 만들어지게 된다.
3.1.1.2. 스트림 암호 알고리즘
  • RC-4

3.1.2. 공개키 암호화 기법

공개키 암호화 기법은 위의 비밀키 암호화 기법에서의 보안성과 기하급수적으로 늘어나는 키의 개수를 개선하기 위한 방법으로, 암호화에 사용되는 키[3]와 복호화에 사용되는 키[4]가 서로 다르고, 암호화 키(공개키)로부터 복호화 키(비밀키)를 계산하기 매우 어렵다. 처리해야 하는 정보량이 많기 때문에 컴퓨터가 발명되고 난 뒤에 생겼다.



파일:CC-white.svg 이 공개키 암호화 기법의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 공개키 암호화 기법의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)

비대칭형 암호는 이름 그대로 암호화 키와 복호화 키가 다르다. 암호화를 하면 하나의 키 쌍이 생기고 이 두 개의 키는 수학적으로 밀접한 관계를 가지고 있다. 두 개의 키를 각각 키 A, 키 B라고 했을 때 키 A로 암호화한 암호문은 키 B로만 복호화할 수 있다. 따라서 이 중 하나의 키(B)만 비밀로 보호하고(이를 '비밀키', '개인키'라고 한다) 다른 하나의 키(A)는 공중에게 공개해도 관계가 없다(이를 '공개키'라고 부른다). 이렇게 둘 중 하나의 키는 반드시 공개되어야 통상적인 사용이 가능하므로 공개키 암호라고도 불린다. 공개키로 암호화한 암호문은 어차피 개인키를 가진 사람만이 풀어볼 수 있으므로 상호간에 공개키만 교환하고 상대의 공개키로 암호화를 해서 데이터를 교환하면 상대는 자신의 개인키로 복호화를 한다. 따라서 키 배송 문제는 근본적으로 발생하지 않는 것.

굉장히 참신한 아이디어기는 한데 비대칭형 암호는 암/복호화가 대칭형 암호에 비해 현저하게 느리다는 문제점이 있다. 따라서 현실적으로는 비대칭형 암호를 이용해서 대칭형 암호의 키를 배송하고 실제 암호문은 대칭형 암호를 사용하는 식으로 상호보완적으로 이용하는 것이 일반적이다. 그리고 비대칭형 암호라고 약점이 없는 것은 아니어서 중간자 공격(MITM: Man In The Middle Attack)에는 취약하다. 해커가 중간에서 통신을 가로채어 수신자에게는 송신자인 척하고 송신자에게는 수신자인 척해서 양쪽의 공개키와 실제 암호화에 사용되는 대칭키를 모두 얻어내는 기법. 참고로 이 중간자 공격을 미리 차단하기 위해서 사이트 인증서라는 것이 존재한다.

그리고 아직까지는 효율적인 알고리즘이 없어서 불가능하지만, 공개키만을 수집해서 비밀키 없이 수학적인 관계가 있는 임의의 키를 잔뜩 생성해서 다 때려 꽂아넣는 효율적인 알고리즘이 개발된다면, 비대칭형 암호는 대칭형 암호보다 못한 물건이, 아니, 그냥 숭숭 뚫려버릴 가능성이 농후하다. 물론 아직까지는 해시 함수의 역함수나, 큰 소수를 효율적으로 구하는 알고리즘은 없으니 상관 없다.


자세한 내용은 공개키 암호화 방식 문서 참조.
3.1.2.1. 공개키 암호 알고리즘


파일:CC-white.svg 이 공개키 암호 알고리즘의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 공개키 암호 알고리즘의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)
  • RSA: 공개키 암호화 기법의 사실상 표준. 매우 큰 수의 소인수분해가 수학적으로 어렵다는 이론에 기반한다.
  • 타원 곡선 암호: RSA의 키 길이가 너무 긴 결점을 보완하기 위해 타원곡선함수를 이용한 암호화 기법. 비교적 최신 기법이다.
  • NTRU: 격자(Lattice) 기반 암호화 기법
3.1.2.2. 신원 기반 암호 알고리즘
사용자 정보를 공개키로 사용하는 공개키 암호 알고리즘의 일종
  • SM9: 중국의 국가 암호 표준.

3.1.3. 양자 암호

양자의 특징인 불확정성(Uncertainty), 양자 얽힘(Quantum Entanglement) 등을 이용하여 암호화하는 기법.

현재 상용화되거나 연구중인 양자암호 기술은 대부분 양자 키 분배 기술이며, 실질적인 양자 암호화는 거리가 있으므로 주의해야 한다.

3.2. 단방향 암호 시스템

평문에서 암호문으로 만드는 것은 자유지만, 그 반대는 아니란다로 대표되는 암호 체계. 대부분이 해시 암호화 체계이다.

이는 일반적으로 password 를 저장하는 용도로 사용된다. 예를 들어 초창기 유닉스/ 리눅스는 유저의 password 를 암호화하여 /etc/passwd 파일에 저장해 두었다. 보안을 위해서 암호화 방식도 어려운 것으로 변경되었을 뿐만 아니라 저장 위치도 /etc/shadow 라는 파일로 변경하고, 관리자가 아니면 볼 수도 없도록 제한을 걸어놨다.

예를 들여 어떤 사용자의 password를 12345678라고 한다면, 이를 MD5로 암호화했을때 25d55ad283aa400af464c76d713c07ad이 되는데, 이를 저장해 둔다. 그리고, 누군가가 로그인을 시도할 때 12345678 을 입력하고 이를 MD5로 암호화해서 그결과를 비교해보면 같은 값이 나옴을 알 수 있다. 하지만, 반대로 암호화된 문자열에서 원래 암호를 복호화하는 것은 아주 어렵다. 다만, 컴퓨터의 발전으로 인해서 MD5 같은 알고리즘은 더 이상 안전하지 않다.



파일:CC-white.svg 이 단방향 암호 시스템의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 단방향 암호 시스템의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)


평문을 암호문으로 암호화하는 것은 가능하지만, 암호문을 평문으로 복호화하는 것은 불가능한 암호화 기법. 기본적으로 동일한 평문은 동일한 암호문으로 암호화되지만 이를 바탕으로 평문을 복원할 수는 없다. 얼핏 생각하면 뭐 이딴 게 다 암호화냐! 라고 할 수도 있겠지만 실제로는 복호화하지 않아도 상관없는 정보가 있기 마련이다. 예를 들면 패스워드는 양방향 암호로 저장하는 것보다 단방향 암호로 저장하는 것이 안전하다. 암호화된 패스워드 목록이 털린다고 해도 이를 가지고 원래의 패스워드를 복원할 수 없고, 패스워드 자체를 검증할 때는 입력받은 값을 암호화해서 암호화한 값끼리 비교하면 땡이기 때문. 또 다른 예로 사진, 동영상 등 용량이 큰 미디어 파일을 비교하는 목적으로도 쓰일 수 있다. 가령 애플은 아동성범죄에 관련된 사진을 구별해내 검열하는 시스템이 존재하는데, 이는 유저가 업로드한 사진의 해시를 가져와 단순비교하는 것일 뿐 사진을 그대로 열람하는 것이 아니다.[5] 비슷하게 운영체제의 설치 파일 등 극히 중요하고 악성 파일이 있을 수도 있는 경우는 제작사에서 파일 전체를 해싱한 체크섬을 공개하기 때문에 내가 다운로드받은 파일이 악성 코드가 들어있는 상태는 아닌지, 다운로드 중간에 변질된 건 아닌지 비교해볼 수 있다.

주로 해시 기법을 사용하며 최소한 SHA-256, 가능하면 SHA-3를 쓰는 것이 좋다. 나머지는 취약점이 발견된 상태며, 특히 MD5는 단시간 내에 충돌값을 찾아낼 수 있는 지경에 이르렀다.[6] 패스워드 암호화에 아직도 MD-5를 사용하는 사이트가 있거든 당장 탈퇴하라고 얘기할 정도.

MD5가 위험하다는 것을 쉽게 예를 들어 설명하자면, 어떤 평문을 해시화했을 때 ABCD가 나온다면, ABCD라는 해시값을 반환하는 여러 개의 평문을 예상보다 쉽게 찾을 수 있다는 의미이다. 이것이 문제가 되는 것은 MD5는 주로 파일의 무결성 검사를 위해 사용하기 때문이다. 공격 코드를 포함하지만 원래 MD5 해시값과 같은 바이너리를 비교적 손쉽게 만들 수 있다는 뜻이다. 물론 아직까지는 엄청난 연산이 필요하지만, 제곱의 기하급수적 증가를 생각해 보면 10비트만 줄여도 계산량은 210분의 1로 줄어든다! 쉽게 말하면 100만 년이 977년으로 줄어드는 것이다. 이런 문제를 줄이기 위해 SHA-3은 스폰지 펑션, 즉, 원문의 길이에 따라 해시값의 길이가 예측 불가능하게 바뀌는 함수를 내장하고 있다.

자세한 내용은 해시 문서 참조.

3.2.1. 암호학적 해시 함수



파일:CC-white.svg 이 암호학적 해시 함수의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 암호학적 해시 함수의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)

해쉬를 이용한 알고리즘은 암호화를 위한 알고리즘으로 쓰이기도 하지만, 무결성 알고리즘이기도 하다. 암호화 알고리즘과 무결성 알고리즘은 같다고 보기는 힘들다. 전자는 파일의 내용을 쉽게 알지 못하도록 변형(암호화)화고 필요할 때 복구(복호화)하는 것이 주라면, 후자는 파일 해쉬값을 이용해 위변조를 인식하는 것이 주 목적이다.
  • MD5: 현재는 안전하지 않다.
  • SHA
  • bcrypt: 블로피시(Blowfish)라는 블록 암호 알고리즘을 해시 함수로 변형한 것이다.
  • GOST R 34.11-94, GOST 34.311-95: 러시아 연방의 구 표준 해쉬 암호. 기반은 구형 GOST 암호 알고리즘을 적용해서 나왔다.
  • Streebog: GOST R 34.11-2012으로 정의된 러시아 연방 표준 해시 암호 알고리즘.
  • PBKDF2: 미국 정부기관에서 승인할 정도로 검증된 암호학적 해시 알고리즘이다.
  • scrypt: PBKDF2의 강화판. 굼벵이 같은 해싱 속도로 유명하다(...). [7]

4. 여담

암호학에 대해서 설명할 경우에는 앨리스(Alice)와 (Bob)이 자주 등장한다. 이는 A가 B에게 메세지를 전달한다고 하는 것이 별로 재미가 없을 뿐만 아니라, 딱딱하게 "Person A", "Person B" 계속 운운하는 것보다는 성별이 뚜렷히 드러나는 이름인 앨리스와 밥을 도입해서 인칭대명사(He, She 등)를 써먹으려는 영어권 학자들의 센스가 반영된 결과이다.

C의 캐롤(Carol), D의 데이브(Dave)가 등장하기도 하지만, 학문이 학문이니만큼 앨리스와 밥 다음으로 자주 나타나는 인물은 E의 이브(Eve). Eavesdropper(엿듣는 사람)의 별칭이며, 대개 암호 프로토콜에 침입해 통신 내용을 엿들으려 하는 소극적 공격자를 가리킨다. xkcd에서 이와 관련한 우스갯소리를 그려낸 바 있는데, 컴퓨터과학자들이 지루한 이야기에 집중하게 하는 법 Eve의 사연 Alice와 Bob 이외의 이름을 정리해놓은 글 포네틱 코드와 비슷한 아이디어이며, 한국의 물리 교과서에서 갑과 을 대신 철수 영희가 자주 등장하는 것과 같은 이치이다.

5. 악용 사례



파일:CC-white.svg 이 악용 사례의 내용 중 전체 또는 일부는 문서의 r108에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 악용 사례의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r108 ( 이전 역사)
문서의 r ( 이전 역사)
  • 랜섬웨어 : 랜섬웨어는 사용자의 파일을 멋대로 암호화하고, 돈을 내지 않으면 안 풀어준다며 인질극(...)을 벌이는 악성코드다. 랜섬웨어마다 다르지만 보통 TLS에서 볼 수 있듯이 파일마다 AES-256 키를 생성하여 RSA 암호화-4096 공개키로 암호화 시킨다. 파일을 복구하려면 공격자가 원하는 대로 돈을 주거나 [8] 브루트 포스로 모든 경우의 수를 시도해서 찾아야 한다. 그러나 모든 경우의 수를 찾는 방법으로는 슈퍼컴퓨터로도 수백만 년이 걸릴 것이다. 대다수의 랜섬웨어는 시스템의 취약점을 이용하여 감염 및 확산되므로 이러한 사태를 예방하기 위한 최선의 방법은 보안 업데이트를 자주하여 보안 취약점을 최대한 제거하고 중요한 데이터를 정기적으로 백업하는 것이다.

6. 관련 문서






[1] 대표적으로 암호화 키 길이가 56비트에 지나지 않는다. 70~80년대에는 이 정도면 충분한 길이였으나 오늘날에는 거의 의미가 없다. [2] GOST R 34.12-2015로 러시아 연방 국가 표준으로 등록됨 [3] 이것만 공개키이다. [4] 이건 비밀키이다. [5] 다만 이도 사생활 침해에 해당한다고 하는 의견이 많다. 자세한 내용은 해당 내용을 다룬 문서참고. [6] 복호화하는 것은 가능하지만, 그것이 원문이라는 보장이 없다. 출력값의 길이가 제한된 모든 해시 함수는 비둘기 집의 원리에 의해 충돌값이 반드시 발생할 수밖에 없다. 따라서 해시값을 가지고 원문을 복원하는 것은 불가능하다는 것은 수학적으로 증명되어 있다. 중학교 수준의 수학만 가지고도 설명할 수 있다. [7] 느리다는 점을 이용해 라이트코인이 스크립트 알고리즘을 사용하긴 하지만 결국 스크립트 알고리즘 역시 ASIC이 나와버리고 결국... [8] 먹튀하는 경우도 있다(...).