Search
Duplicate
🔒

보안 목표와 대칭키 암호화

간단소개
팔만코딩경 컨트리뷰터
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)mod26C = (P + K) \mod {26} and P=(CK)mod26P = (C - K) \mod {26}
곱셈암호 - C=(PK)mod26C = (P * K) \mod {26} and P=(CK1)mod26P = (C * K^{-1}) \mod {26}
아핀암호 - C=(PK1+K2)mod26C = (P * K_1 + K_2) \mod {26} and P=((CK2)K11)mod26P = ((C - K_2) * K_1^-1) \mod {26}
→ 피피티 내용 참고
Z26Z_{26} 이란? Plaintext와 Ciphertext에 각각 1:1로 매칭되는 Value들의 집합. 26은 Value의 size
Z26Z_{26}^* 이란? Z26Z_{26}의 원소에서 역원이 존재하는 원소들의 집합

Z26Z_{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 모듈을 이용한 대칭 키 암호화 연습해보기