Search
moon
sun
🔒

보안 목표와 대칭키 암호화

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
보안
암호
Scrap
태그
9 more properties

보안 목표와 서비스

보안 목표

1. 기밀성(Confidentiality)

민감한 정보가 외부에 노출되는 것을 방지

2. 무결성(Integrity)

나의 정보를 다른사람이 수정 하지 못하게

3. 가용성(Availability)

생산한 정보를 사용할 수 있어야 한다.

공격

1. 기밀성 위협 (정보 접근)

•
Snooping : 데이터에 대한 비인가 접근 또는 탈취
•
Traffic Analysis : 트래픽 분석 후 메세지 특성 파악

2. 무결성 위협 (정보 조작)

•
Spoofing : 격자가 다른 사람으로 위장 → 정보 조작

3. 가용성 위협 (정보 훼손)

•
Denial of Service(Dos) : 시스템의 서비스를 느리게 하거나 완전히 차단

보안 서비스와 메커니즘

1. 기밀성 보안

•
암호화
•
라우팅 제어

2. 무결성 보안

•
암호화
•
디지털 서명
•
인증 교환

전통적인 대칭 키 암호

대칭 키 암호 알고리즘의 개념

💡
암호화 키와 복호화 키가 동일하다.
•
장점
◦
빠르다
◦
효율적이다
•
단점
◦
n명이 m명과 통신을 하려면 n * m 개의 키가 필요해진다(공개키 암호화를 활용해 문제 해결)
암호화 과정에서 알고리즘을 숨기는 것은 어렵다. 키를 숨겨야 한다!
이미 유명한 암호화 알고리즘들은 코드가 다 노출되어 있다. 결국 중요한 것은 키를 숨기고, 키를 추론하는 것을 어렵게 만들어야 한다.

암호 해독 공격

암호 해독공격은 다양한 방식으로 가능하다. 알고리즘은 이미 알고있다는 가정 하에 아래 공격들이 가능하다.
•
단독 공격
◦
brute-force attack - 모든 키를 다 넣어보는 공격
◦
statistical attack - 통계적으로 많이 쓰는 문장 넣어보는 공격(ex. 가장 많이 쓰이는 알파벳은 E)
◦
pattern attack - 암호문에 존재하는 패턴을 이용
•
알려진 평문 공격
•
선택 평문 공격
•
선택 암호문 공격

대치 암호 (Substitution Cipher)

하나의 기호를 다른 기호로 대체하는 것(ex. A를 D로 대체하고 T는 Z로 대체)
•
단일 문자 암호
◦
평문 기호와 암호문 기호가 1:1 대응 관계를 갖는다
◦
덧셈암호 - C=(P+K)mod  26C = (P + K) \mod {26} and P=(C−K)mod  26P = (C - K) \mod {26}
◦
곱셈암호 - C=(P∗K)mod  26C = (P * K) \mod {26} and P=(C∗K−1)mod  26P = (C * K^{-1}) \mod {26}
◦
아핀암호 - C=(P∗K1+K2)mod  26C = (P * K_1 + K_2) \mod {26} and P=((C−K2)∗K1−1)mod  26P = ((C - K_2) * K_1^-1) \mod {26}
→ 피피티 내용 참고
💡
Z26Z_{26} 이란? Plaintext와 Ciphertext에 각각 1:1로 매칭되는 Value들의 집합. 26은 Value의 size
💡
Z26∗Z_{26}^* 이란? Z26Z_{26}의 원소에서 역원이 존재하는 원소들의 집합

Z26∗Z_{26}^* 추가 설명

•
다중 문자 암호
◦
평문 기호와 암호문 기호가 1:m 대응 관계를 갖는다
◦
자동 키 암호
◦
Vigenere 암호
◦
전치 암호
→ 피피티 내용 참고

AES (Advanced Encryption Standard)

AES 란?

•
2001년 미국 국립기술표준원(NIST)에서 공표한 대칭 키 암호 알고리즘
•
128 비트 평문을 128 비트 암호문으로 출력
•
128, 192, 256비트키를 사용하고 키크기에 따라 각각 10, 12, 14라운드를 갖는 3가지 버전이 존재
•
AES는 128비트의 데이터를 4 x 4 행렬로 만들어서 사용한다. 행렬의 각 원소는 1byte단위이다.
◦
insertion
BlockiBlock_i = S ( i % 4, i / 4)
◦
extraction
Si,j=Blocki+4jS_{i,j} = Block_{i+4j}

Substitution - SubBytes

변환 표를 활용해서 각각의 Byte들을 대칭되는 값으로 변환한다. 4 x 4 행렬의 각 원소가 1byte단위이기 때문에 각 원소가 표현 가능한 범위는 282^8개이다. 변환 표에는 표현 가능한 모든 수에 대한 대칭값들이 적혀있다.

Permutation - ShiftRows

위 과정에서 나온 행렬의 행을 각각 다른 수치만큼 left shift한다(바이트 단위로)

Mixing - MixColumns

행렬곱을 활용해서 각 열을 새로운 열로 변환한다.
•
Byte들의 곱셈 : GF(28)에서x8 +x4 +x3 +x+1의나머지
•
Byte들의 덧셈 : 8-bit 단위의 XOR 연산
•
행렬곱에 사용하는 상수 행렬
•
예시
→ 실습해보면 좋을 것 같음

Key Adding - AddRoundKey

각 state의 열에 round key를 더한다. 라운드 키는 대칭키를 확장하여 생성한다.
→ 질문! state의 열이 62 cf 0c 99 이고 대칭키가 01 23 45 67 일 때, xor 연산하는지? → 맞는듯! 하나의 암호키로부터 NrN_r +1 개의 128비트 round key를 생성(NrN_r : round의 수) round 시작 전 pre-round 단계에 Key Adding 과정을 거치므로 NrN_r +1 개수의 키가 생성된다.
아래 사진에서 보듯이 1bit 만 달라져도 round가 지날 수록 round key는 극심하게 달라진다
→ AES 192, AES 256 키 확장은 PASS

AES의 분석

보안

•
Brute-Force Attack의 경우, 경우의 수가 2128 (AES-128)
•
수많은 테스트들이 AES 암호문의 통계적인 분석에 실패

구현의 용이성

•
AES는 소프트웨어, 하드웨어, 펌웨어로 구현 가능
•
Table lookup 또는 대수적 구조를 사용하는 루틴을 사용하여 구현 가능

단순성과 비용

•
AES에 사용하는 알고리즘은 매우 단순
•
싼프로세서와최소메모리를이용하여쉽게구현가능

Python Cryptography

pip install cryptography
Shell
복사

Python Cryptography 모듈 구성

•
The Recipes Layer
◦
Fernet → AES 구현
▪
과제 1 - 2 에서 사용
◦
X.509
•
The Hazardous Materials Layer
◦
Low Level의 암호 함수로 구성
◦
정확한 지식없이 사용할 경우 보안상 문제 발생 가능
→ Fernet 모듈을 이용한 대칭 키 암호화 연습해보기