20200502
권기웅
Table Of Contents
🔒 Cryptography
암호란 무엇일까요?
비밀을 유지하기 위하여 당사자끼리만 알 수 있도록 꾸민 약속 기호.
🔒 Cryptography
암호란 무엇일까요?
우리가 아는 암호: 비밀번호
→ 비밀번호는 나와 내 상대방만 진짜 정보를 알 수 있다
→ 비밀번호는 나와 상대방만 알 수 있는 비밀스러운 것
🔒 Cryptography
암호란 무엇일까요?
비밀번호 486은 모르는 사람을 알 수 없도록 Encrypt 됨
🔒 Cryptography
암호를 위한 사전 지식
암호를 공부하기 위해 알아야 할 몇 가지 용어를 정리해 보겠어요 📚
🔒 Cryptography
암호를 위한 사전 지식
Plain Text
Cipher Text
Encryption
Sender
Receiver
Entity
Adversary
Key
Key Space
Cryptographic Algorithm
Hash
Symmetric-Key Algorithm
Asymmetric-Key Algorithm
PseudoRandom Number
🔒 Cryptography
암호를 위한 사전 지식
Plain Text; 평문 - 암호화 되지 않고 의미를 가지는 것
Cipher Text; 암호문 - 암호화 되고 정보 자체로는 의미가 없는 것
Encryption; 암호화 - 의미를 알 수 없는 형식(암호문)으로 변환하는 것
Decryption; 복호(화) - 암호화(encryption, encipherment) 과정의 역과정 암호 알고리듬에 의하여 암호문을 평문으로 바꾸는 과정
Key; 키 - 암호를 풀 수 있도록 사전에 약속된 정보 (자물쇠의 열쇠)
🔒 Cryptography
암호를 위한 사전 지식
실제로 많은 암호학 관련 책에서 통용되는 이름입니다
🔒 Cryptography
암호를 위한 사전 지식
Key Space; 키 공간 - 암호 키에 대한 가능한 값의 범위
e.g,. 단일 치환 암호의 키 공간은 26! 이다
🔒 Cryptography
암호를 위한 사전 지식
여기서 다루지 않은 내용은 나중에 나옵니다요
🔒 Cryptography
암호의 역사 - 고대 암호학
🔒 Cryptography
암호의 역사 - 고대 암호학
누구나 비밀은 있다
🔒 Cryptography
암호의 역사 - 고대 암호학
RUSQHUVKBVEHQIIQIYDQJEH
🔒 Cryptography
암호의 역사 - 고대 암호학
BE CAREFUL ASSASINATOR
🔒 Cryptography
암호의 역사 - 고대 암호학
시저 암호
A-Z 를 1부터 26에 대응하여 약속된 만큼 앞/뒤로 이동하여 다른 문자로 치환하는 암호
🔒 Cryptography
암호의 역사 - 고대 암호학
시저 암호의 키 공간
c = E(p, k) = (p + k) mod 26
E: encrypt, p: plaintext, k: key, c: cipher
🔒 Cryptography
암호의 역사 - 고대 암호학
키가 26개라고? 다 해보면 되겠네
🔒 Cryptography
암호의 역사 - 고대 암호학
단일 치환 암호의 키 공간
알파벳 26문자를 무작위로 나열한 집합과 원래의 26문자를
서로 1대1 대응시켜 암호문을 생성하는 방법
(송/수신자는 치환표를 공유해야 한다)
🔒 Cryptography
암호의 역사 - 고대 암호학
단일 치환 암호의 키 공간
26! (알파벳으로만 한정했을 경우)
(1초에 키 10억개를 조사해도 120억년이 걸림)
🔒 Cryptography
암호의 역사 - 고대 암호학
엥 근데 왜 이거 안쓰죠?
🔒 Cryptography
암호의 역사 - 고대 암호학
빈도 분석, 패턴 유추 등 다양한 방법으로 털림
자세한 내용은 이 슬라이드를...
🔒 Cryptography
암호의 역사 - 고대 암호학
요약하자면, Cipher Text 는 그 자체가 가지는 의미가 없어야 하는데, 문자만 치환 (Substitution) 되었을 뿐 의미는 존재할 수 있음
🔒 Cryptography
암호의 역사 - 고대 암호학
스테가노그래피
Stegano; 감춰진 + graphy; 글
= 암호이지만 암호가 아닌척 하는 것
🔒 Cryptography
암호의 역사 - 고대 암호학
최초의 스테가노그래피는...
머리카락이 없으면 암호도 못숨기는거임 엌...
🔒 Cryptography
암호의 역사 - 고대 암호학
🔒 Cryptography
암호의 역사 - 고대 암호학
스테가노그래피를 쓰면
1. 암호가 아닌 척 할 수 있어 안티멀웨어 프로그램을 우회할 수 있음
2. 등잔밑이 어두움
🔒 Cryptography
암호의 역사 - 고대 암호학
스테가노그래피를 써도
1. 나와 동일한 정보를 이미 가지고 있는 사람은 쉽게 발견할 수 있음
2. 디지털 파일의 Checksum 확인
🔒 Cryptography
암호의 역사 - 고대 암호학
🔒 Cryptography
암호의 역사 - 근대 암호학
다중 치환 암호
암호문에서 패턴을 없애기 위해 모든 문자를 동일한 빈도로 치환하자
🔒 Cryptography
암호의 역사 - 근대 암호학
다중 치환 암호
비장느르 암호, 에니그마 기계, 일회용 암호표
🔒 Cryptography
암호의 역사 - 근대 암호학
다중치환 암호는 무작위 속성에 근거하여 생성됨
🔒 Cryptography
암호의 역사 - 근대 암호학
사람이 완벽한 무작위를 만들어 낼 수 있을까요?
🔒 Cryptography
암호의 역사 - 근대 암호학
무작위 동전 던지기의 결과가 구분되나요?
🔒 Cryptography
암호의 역사 - 근대 암호학
에니그마 (Enigma); 수수께끼
독일의 세르비우스가 20세기 초에 발명한
암호화/복호화를 수행하는 기계
🔒 Cryptography
암호의 역사 - 근대 암호학
에니그마 (Enigma) 의 두뇌; 로터
26개의 순열을 가진 기어 3개가 입력할 때 마다
각각이 맞물려 회전한다
🔒 Cryptography
암호의 역사 - 근대 암호학
🔒 Cryptography
암호의 역사 - 근대 암호학
🔒 Cryptography
암호의 역사 - 근대 암호학
가능한 조합의 수
6x26x26x26x26x26x26 = 1,853,494,656
로터의 위치 변경, 각각의 순열, 임의의 설정 등
🔒 Cryptography
암호의 역사 - 근대 암호학
하지만 코드북이 털려서 앨런 튜링에게 정벜...
🔒 Cryptography
암호의 역사 - 근대 암호학
다음 시간엔 일회용 패드, DES 에 대해...
🔒 Cryptography
암호의 역사 - 근대 암호학
🔒 Cryptography
암호의 역사 - 근대 암호학
🔒 Cryptography
암호의 역사 - 근대 암호학
암호 알고리즘
키
시저 암호
단일 치환 암호
에니그마 (통신키)
에니그마 (통신문)
문자 수를 약속만큼 평행이동한다
평행이동할 문자 수
치환표에 따라 알파벳을 변환
치환표
치환표에 따라 알파벳을 변환
로터순서, 각도, 플러그보드 연결선
치환표에 따라 알파벳을 변환
로터의 각도
🔒 Cryptography
암호의 역사 - 근대 암호학
자물쇠 설계도는 대부분 공개 특허로 등록되어 있다
= 암호 알고리즘은 반복사용하고, 키(자물쇠 열쇠)는 서로 다르게
비트열 암호화와 XOR 연산
🔒 Cryptography
XOR 연산
🔒 Cryptography
XOR 연산
비트의 XOR 연산은 다음과 같은 법칙이 있죠
0 + 0 = 0
1 + 1 = 0
...
1 + 0 = 1
0 + 1 = 1
🔒 Cryptography
XOR 연산
다음과 같은 수를 XOR 연산하면 어떻게 될까요?
10110010
⊕ 10110010
?
🔒 Cryptography
XOR 연산
A: 10110010
B: 11001110
A ⊕ B ⊕ B = ?
B ⊕ B = 00000000
A ⊕ 00000000 = A
앗 뭔가 그럴싸하네요?
🔒 Cryptography
XOR 연산
A 👉🏻 Plaintext, B 👉🏻 Key 라고 가정하면
C=Eʙ(A), P=Dк(C) 와 같이 암복호화를 할 수 있네요
🔒 Cryptography
XOR 연산
흑백 그림의 각 점을 0, 1로 생각한다면 아래와 같은 마스킹이 되겠네요
원본
AND 연산
OR 연산
XOR 연산
🔒 Cryptography
One-Time Pad
XOR 을 활용한 절대 해독 불가능한 암호 맨들기
🔒 Cryptography
One-Time Pad
결과인 'ygwhmaqtn' 을 해독하려면
Brute-force 방법밖에 존재 하지 않네요
그리고 일회용 패드가 절대 해독불가한 이유가
여기에 있습니다
🔒 Cryptography
One-Time Pad
2¹¹ = 2048 가지의 패턴을 모두 도출해야 하는데
답이 'Takagisan', 'Nishitaka' 인지
또 다른 11글자인 'anniversary', 'forgiveness' 인지 알수가 없다는 점입니다 🤔
🔒 Cryptography
One-Time Pad
일회용 패드는 해독할 수 없고 무조건 안전하다는것이
1949년 섀논에 의해 수학적으로 증명되었습니다
엥? 근데 이거 왜 안씀?
🔒 Cryptography
One-Time Pad
암호문은 안전해 졌는데...
이제는 키를 지켜야 하는 상황이 생겼습니다
키가 없으면 절대 다시 복호화 할 수 없으니까요
🔒 Cryptography
One-Time Pad
키를 안전하게 보관할 수 있는 방법이 있다면
애초에 평문을 안전하게 보관할 수 있는데?
= 평문을 지킨다 👉🏻 평문과 같은 길이의 키를 지킨다
🔒 Cryptography
One-Time Pad
이래서 킹냥이를 키워야 합니다
이거 완전 주객전도...
🔒 Cryptography
One-Time Pad
실제로 컴퓨터는 완전한 난수를 생성할수는 없습니다
의사난수, 시드 등등을 찾아보시길 🙇🏻♂️
🔒 Cryptography
One-Time Pad
실제로 컴퓨터는 완전한 난수를 생성할수는 없습니다
의사난수, 시드 등등을 찾아보시길 🙇🏻♂️
🔒 Cryptography
One-Time Pad
🔒 Cryptography
암호의 역사 - 현대 암호학
🔒 Cryptography
암호의 역사 - 현대 암호학
🔒 Cryptography
DES
🔒 Cryptography
DES
64비트 평문을 64비트 암호문으로 암호화 하는 대칭 암호 알고리즘
대칭암호 알고리즘은 동일한 키를 공유해야 한다는거 이제는 아시죠?
🔒 Cryptography
DES
평문이 64비트가 넘어가면 암호화를 못하나요? 🙋🏻♀️
👉🏻 블록 암호를 사용하면 됩니다
🔒 Cryptography
DES
🔒 Cryptography
DES
Feistel Network의 1 Round
0. 첫 라운드 시작 전 Initial Permutation 을 거친다
1. 입력을 L/R로 분기한다
2. R을 그대로 R로 보낸다
3. R을 라운드 함수 F로 보낸다
4. F(R, K₁) 을 통해 랜덤 비트열을 생성 (K₁ = 서브키)
5. 4에서 생성된 비트열과 L을 XOR 연산한다. 그 결과를 L로 보낸다
6. 다음 라운드에서는 L과 R을 교환하여 라운드를 수행한다
∴ 암호화 되지 않은 R은 다음 라운드에서 암호화 된다
🔒 Cryptography
DES
암호 알고리즘 설계의 기본원칙
Confusion(혼돈) & Diffusion(확산)
Confusion: Between plain text and cipher text is obscured (or hidden)
Diffusion: The influence of one each plain text bit is spread over many cipher text bits
🔒 Cryptography
DES
S-box(Substitution), P-Box (Permutation)
비트열을 Shuffling 하는 방법으로 Diffusion 과 Confusion 을 만족하기 위한 절차
🔒 Cryptography
DES
라운드 함수 F
0. R의 입력 32비트를 48비트로 확장(Expansion)한다
1. 키 스케쥴러에서 생성된 라운드별 Subkey(48bits) 와 XOR 연산 수행
2. S-box 를 거쳐 다시 32비트로 돌아옴
👉🏻 이 때 값의 48비트와 32비트간의 연관성이 없어도 됨
🤔 지금 끄덕이시면 됩니다...
🔒 Cryptography
DES
Scheduled Key Generator
0. Initial Key 를 기준으로 PC1 (Permute Choice 1, 64bit) 을 생성
1. 8bit 의 Parity bits 를 제거하고 28bit 로 양분
2. 각 라운드별로 지정된 만큼 좌측으로 Shift (우리가 아는 비트 시프트 연산입니다)
3. 다음 라운드는 다시 PC2 를 생성하고 1~2를 반복
🤔 지금 끄덕이시면 됩니다...
🔒 Cryptography
DES
Initial Permutation
초기 평문을 순열치환하는 과정. 비트열을 셔플링하여 Diff/Conf 를 만족시키기 위함
모든 라운드가 끝난 마지막에도 수행 (Final Permutation, FP는 IP⁻¹ (IP의 역치환))
🔒 Cryptography
DES
DES 의 전체적인 흐름
🔒 Cryptography
DES
이렇게만 보면 어떻게 해독하나 싶은데... 이미 다털림
97년 DES Challenge: 96일
98년 DES Challenge: 41일
98년 DES Challenge: 56시간
99년 DES Challenge: 22시간 15분
🔒 Cryptography
DES
DES 알고리즘 대한 공격
차분 해독법: 평문과 암호문관계를 조사 (RSA 만든 사람이...)
선형 해독법: 평문과 암호문 비트를 몇 개 정도 XOR 해서 0이 되는 확률을 조사하는 해독 방법
차분 공격에 대한 글 (40분 읽고 5%도 이해 못한 제가 레전드)
🔒 Cryptography
DES
그래서 이거 말고 대안은...?
3-DES: DES 를 3번 수행함 (키의 길이를 156bits 로 늘려 전수조사를 힘들게 함)
DES 를 3번 수행하는 만큼, 암/복호화 속도가 느림
AES: 128bits 블록 암호. DES의 대안으로 현재도 널리 사용 중
🔒 Cryptography
DES
3번 해도 똑같은 취약점...
🔒 Cryptography
DES
그럼에도 얼마전에 TDES 인증키를 처리했었죠
아직 일부 금융권에서는 사용 중
🔒 Cryptography
AES
🔒 Cryptography
AES
나아지지 않으면 발전할 수 없다고 생각합니다
🔒 Cryptography
AES
DES를 Brute Force로 해독 가능해지면서
새로운 표준 암호 알고리즘이 필요
🔒 Cryptography
AES
미국 표준화 기구 NIST 에서 공모
다음의 조건을 만족하는 대칭 암호 알고리즘일 것
🔒 Cryptography
AES
🔒 Cryptography
AES
🔒 Cryptography
AES
???: 만들었는데요
🔒 Cryptography
AES
사실 레인달 알고리즘 말고도 후보는 총 15개 였는데, 4년간 여러번의 학회를 거쳐 Rijndael 알고리즘이 채택됨
🔒 Cryptography
AES
🔒 Cryptography
AES
Substitution - Permutation Network
128 bit 를 4x4 행렬로 나타내어 암호화
병렬 연산이 가능
별도의 복호화 모듈이 필요함 (역함수)
🔒 Cryptography
AES
하나의 블럭의 상태를 4x4 행렬로 표현
AES 연산 단위는 8비트(1바이트)
🔒 Cryptography
AES
1. SubByes
최초의 상태를 S-Box를 통해 치환한다
하나의 원소를 전/후 4bit로 나누어 처리
전방향/역방향 S-Box가 존재
Confusion 증가의 역할
🔒 Cryptography
AES
2. Shift Rows
각 Row 별로 0~3바이트 만큼 Left Shift 한다
decryption 시에는 거꾸로 shift 한다
🔒 Cryptography
AES
3. Mix Columns
그냥 섞는다는것만 알아주세요...
행렬곱/역행렬곱을 사용합니다
곱셈 법칙은 GF(2^8)에서 이루어집니다
🔒 Cryptography
AES
4. Add Round Key
AES Key Schedule 알고리즘으로 생성된
SubKey와 XOR 연산한다
🔒 Cryptography
AES
1. 128bit의 Key를 4개의 32비트 워드로 치환
2. 마지막 워드는 1바이트 Left Shift
3. 2의 결과를 전방향 S-box로 치환
4. 라운드상수(n) 과 XOR 연산
5. 2~4를 수행한 결과로 첫 워드 생성
6. 다음 워드는 2~4 반복
7. 2~6을 키 길이만큼의 라운드를 반복하여 키 생성
🔒 Cryptography
AES
Decryption
역방향 S-box
XOR의 역원
역행렬
역함수
...
등을 사용하여 복호화 모듈을 구현한다
🔒 Cryptography
AES
AES 및 암호 알고리즘을 이해하는 수학적 배경지식
Galois Field (Finite Field)
https://www.youtube.com/watch?v=x1v2tX4_dkQ&t=1982s
https://freshrimpsushi.tistory.com/820
...
🔒 Cryptography
AES
AES 암호화 알고리즘은 다양한 분야에서 사용됩니다
👉🏻 MacOS FileVault
👉🏻 TLS
👉🏻 VPN
👉🏻 마스터 패스워드
👉🏻 사용자 간 메시지 암호화
... 등등
🔒 Cryptography
Modulo
드디어 비대칭키 를! 하기 전에 Modulo 연산부터 알아봐요
합동과 동치관계
모듈로 덧셈/뺄셈
모듈로 곱셈
모듈로 거듭제곱
모듈로 역수
🔒 Cryptography
Modulo - 합동/동치
두 a, b의 숫자가 n을 modular한 결과 값이 같다면, 이를 모듈러 합동관계라고 한다
🔒 Cryptography
Modulo - 합동/동치
따라서 다음의 식은 동등하다는 것을 이해해야 합니다
🔒 Cryptography
Modulo - 합동/동치
동치관계가 중요한것은 다음의 특성 때문입니다
반사성: A와 B가 관계가 있음
대칭성: A와 B가 관계있다면, B도 A와 관계가 있음
추이성: A와 B가 관계있다면, A와 C도 관계가 있음
🔒 Cryptography
공개키 암호화
대칭암호 알고리즘은 다음의 문제가 발생합니다
1. 앨리스와 밥 사이를 도청하는 이브가 존재
2. 앨리스는 키로 암호화된 암호문을 밥에게 전송
3. 이브는 중간에서 암호문을 도청
4. 앨리스는 밥에게 복호화 할 수 있는 키를 보내야 함
5. 키를 보내면, 이브가 도청하여 복호화 가능
🔒 Cryptography
공개키 암호화
키 배송의 문제를 해결하기 위해서는...
1. 키를 사전에 배포한다
2. 키 배포 센터를 운영한다
3. Diffie-Hellman 키 교환을 사용한다
3. 공개 키 암호를 사용한다
🔒 Cryptography
공개키 암호화
🔒 Cryptography
공개키 암호화
이 방법을 수학적으로 적용할 수 있으면 좋겠다!
이산로그 문제
🔒 Cryptography
공개키 암호화
🔒 Cryptography
RSA 암호화
색을 통한 암호화를 이해하셨다면
이 방법을 계산으로 옮겼다고 볼 수 있습니다
🔒 Cryptography
RSA 암호화
🔒 Cryptography
RSA 암호화
🔒 Cryptography
RSA 암호화
🔒 Cryptography
RSA 암호화
🔒 Cryptography
RSA 암호화
🔒 Cryptography
RSA 암호화
🔒 Cryptography
RSA 암호화
암호화할 때에는 마음대로
해독할 때는 안됨을 기본으로 하는 공개키 암호체계
Ron Rivest, Adi Shamir, Leonard Adleman
🔒 Cryptography
RSA 암호화
양자 컴퓨터 시대가 오면 소인수 분해를 납득가능한 시간내에 풀이할 수 있겠지만... (쇼어 알고리즘)
https://www.ibs.re.kr/cop/bbs/BBSMSTR_000000000901/selectBoardArticle.do?nttId=14100&pageIndex=1
🔒 Cryptography
RSA 암호화
그렇다고 엄청나게 안정적인 것은 아닙니다
RSA-768bit 까지는 Cracked 된 상태
🔒 Cryptography
RSA 암호화
용두사미로 끝났네요... 감사합니다