대칭 암호화 방식
대칭키(Symmetric Key) 암호화 방식
암호화 키 = 복호화 키
인 암호화 방식
- 암복호화에 걸리는 시간이 짧고 비교적 간단한 방식으로 구현 가능
- 비대칭 암호화보다 보안상 안전은 DOWN
- 하지만 비대칭은 시간, cost, 구현 UP
- 현대에 가장 많이 사용되는 암호 방식 중 하나
KEY
암호화, MAC, 전자서명 등 암호 기술에 반드시 필요한 숫자
- 키의 bit길이가 길수록 brute force 공격에 강함
- brute force 공격 : 전수조사 공격 -> 다 해 보는 거
- 키는 평문(암호화 되지 않은 데이터)과 같은 가치를 지닌다고 할 수 있음
- 그만큼 키가 중요하다!
- key가 오픈되면 평문을 그냥 보내는 것과 다르지 않음
종류
재사용 여부
세션키
: 통신 때마다 한 번만 사용되는 키 (SSL/TLS 암호화 통신)
마스터키
: 반복적으로 사용되는 키
암호화 대상
CEK
Contents Encrypting Key
- TEK와 같음(Traffic Encrypting Key)
- 암호화 대상 : data
KEK
Key Encrytping Key
- 암호화 대상 : key
- 키 쉐어 시 key를 암호화할 때 쓰여, 비대칭키를 많이 사용한다.
의사난수생성기(PRNG)
pseudo random number generator
- 키 생성에 필요한 난수 값을 만들어 낸다.
- pseudo : 진짜 random 값은 아니지만(컴퓨터는 규칙이 있어야 작동하므로) random에 가까운 수를 생성해준다는 의미
대칭 암호화 알고리즘
DES
Data Encryption Standard
1997
년, 미국의 연방정보처리의 표준 암호로 채택
permutation
주로 사용
- 64bit 평문을 64bit 암호문으로 암호화
- DES는 64bit의
블록 암호화 알고리즘
(전형적인 feistel)
- 키의 크기 : 56bit
- 이 중 8bit는 오류 검출을 위해 사용 -> 48bit의 길이로 64bit 블록 암호화
- Brute force 공격으로 DES가 해독이 가능해져 1998년 11월 이후 공식 사용 중단, but 아직도 여러 응용프로그램에서 많이 사용되고 이후에 기본 알고리즘의 토대가 된다.
암호화 과정

1. Pre-Processing
- input : 64bit 단위로 나눈 평문의 조각
initial-permutation
: 각 평문(64bit)의 비트 위치를 규칙에 의해 바꿈
- 왼쪽 L과 오른쪽 R로 나눔(각 32bit)

- 1~16 Round
- input : 이전 라운드에서 만들어진 L과 R
- 꼬아가는 것처럼 16번의 중간 라운드를 수행
- 수학적 식 : 이전 단계 R과 현재 key를 함수 적용 -> 이를 이전 단계 L과 XOR 연산한 것 = 현재 단계 R

- ⊕ 배타적 논리합, XOR
- 두 비트가 다른 값이면 1, 같은 값이면 0
- 비트 패턴 일치 확인 가능 -> 암호화에서 많이 사용
- 같은 값 두번 XOR 거치면 처음 값으로 회귀
- bit by bit 연산이라 매우 빠름
- Post-processing
- input : 이전 라운드에서 만들어진 L과 R
- 최종적으로 계산된 L과 R을 합쳐서 하나의 블록으로 만듦
final-permutation
: 초기치환의 역치환 IP−1적용(최종 치환)
트리플 DES
- DES의 대안으로, DES의 암호화 강도를 높인 대칭키 암호 방식
- DES를 3번 연속 실행 -> 3DES
- 2번의 DES 암호화 중간에 DES 복호화가 1번 실행(암-복-암)
- 2개의 키 or 3개의 키 사용
- 기존 DES와의 호환성 유지 목적
- 모든 키를 동일하게 하는 경우 DES와 같아짐
- DES보다 2배의 암호화 강도를 갖지만 충분하지 않아 AES가 권장됨

AES
Advanced Encryption Standard
- 1997년 미국 NIST의 암호공모에서 새로운 대칭 암호의 표준으로 채택된 대칭키 암호 방식(Rijndael) = AES암호 공모에서 Rijndael 채택
- 암호 공모 조건
- 안정성 Security
- 비용 Cost
- 구현 효율성 Implementation
- 특징
- 128bit 평문을 128bit 암호문으로 암호화
- 키의 길이 : 128, 192, 256 bit(키 길이 종류 3개)
- 라운드 횟수 : 10, 12, 14 (라운드 횟수 종류 3개)

각 라운드 구성 연산
- SubBytes : byte 단위 substitution
- ShiftRows : row 단위로 cyclic shift 수행
- MixColumns : 높은 diffusion을 위해 column 단위로 mixing
- AddRoundkey(마지막 연산) : Round key와 state를 XOR
=> 원본을 막 섞음 -> 되돌아가면 원본 나와야 함
그 밖의 대칭 암호
SEED
- 국산 128bit 블록 암호 알고리즘
- 한국인터넷진흥원과 국내 암호 전문가들이 순수 국내 기술로 개발
- 전자상거래, 금융, 무선통신 등에서 전송되는 중요 정보 보호 목적
- SEED 128, SEED 256 (숫자는 각각 key의 길이를 의미)
ARIA
- 국산 128bit 블록 암호화 알고리즘
- 경량 환경 및 하드웨어에서의 효율성 향상을 목적
- AES와 마찬가지로 3가지 종류의 길이의 암호화 키 지원(128/192/256bit)
IDEA
- 유럽에서 많이 사용
- 128bit key 사용해서 64bit 평문을 8라운드를 거쳐 64bit 암호문으로 만듦
- 모든 연산이 16bit단위로 이루어지도록 하여 16bit 프로세서에서 구현이 용이 & 주로 키 교환에 사용됨
RC5
- 미국 RSA 연구소에서 개발
- RC5(Ron's Code 5) 알고리즘
- 간단한 연산, 빠른 암복호화 기능, 모든 하드웨어에 적합
- 입출력, 키, 라운드수가 가변인 블록 알고리즘
- 키 길이 : 32, 64, 128bit
- 속도 : DES의 약 10배
Skipjack
- 미국 국가안보국(NSA)에서 개발한 클리퍼 칩에 내장된 블록 알고리즘
- 비밀로 유지되던 알고리즘의 형태와 구조가 1998년에 공개됨
- 64bit 입출력, 80bit 키, 32라운드의 암호화 과정
LEA
- 고속 환경 및 모바일 기기 등의 경량환경에서 confidentiality 제공하기 위한 목적
- 국내 개발
- AES 대비 1.5~2배 빠름
- 128bit 데이터 블록으로 128, 192, 256bit 비밀 키 사용 가능
블록암호 vs 스트림 암호
블록암호(Block Cipher)
- 특정 비트수의 집합(블록단위로 암호 처리)을 한번에 처리하는 암호 알고리즘
- 블록의 비트 수 : 블록길이 - 8비트 혹은 16비트에 비례 -> 8 or 16의 배수로 블록 사이즈 지정
- 라운드를 사용하고 반복적으로 암호화 과정 수행하여 암호화 강도 높임
- 사용 : 일반 데이터 전송, storage 저장
스트림암호(Stream Cipher)
- 한번에 1비트 혹은 1바이트의 데이터 스트림을 순차적으로 처리하는 암호 알고리즘
- plain text와 key stream을 XOR하는 방식
- 사용
- 군사 및 외교용으로 주로 사용
- 음성, 오디오/비디오 스트리밍, 이동통신 등 무선 데이터 전송
블록 암호 모드
- 대칭 암호화 방식은 하나의 평문을 블록 단위로 나눠서 암복호화 수행
- 패딩 : 블록의 남은 부분에 데이터 채워 넣는 것(짜투리가 남으면 패딩으로 블록 사이즈가 되도록 사이즈 채움)
ECB(Electric CodeBook)모드
CBC(Cipher Block Chaining) 모드
- 암호문 블록을 마치 체인처럼 연결하는 모드
- 현재의 평문 블록과 바로 직전에 암호화된 암호 블록을 XOR연산한 후 암호화
초기화벡터(IV, Initial Vector)
: 최초 블록을 암호화할 때 XOR 연산에 사용되는 블록, 송수신자가 사전에 알고있어야 하며 예측이 어려워야 한다.
-> 1st block에도 같은 로직을 적용하기 위해 사용
- 장점 : 변조가 불가능하므로 보안적으로 안전하다
- 단점 : 계산 다소 복잡
-> 제약사항 : 중간에 있는 블록을 복호화하기 위해선 반드시 첫 블록부터 복호화해야 함(왜냐하면 서로 체인처럼 연결되어 있기 때문)

ECB vs CBC
구분 | 장점 | 단점 | 비고 |
---|
ECB | 간단 병렬처리 가능(암복호화 모두) | 평문의 반복이 암호문에 반영 암호문 블록의 삭제 혹은 교체에 의해 평문 변조가 가능 | 보안상 취약하여 사용을 권장하지 않음 |
CBC | 평문의 반복이 암호문에 반영되지 않음 암호문 블록의 삭제 혹은 교체에 의해 평문 변조가 불가능 | 암호화에서는 병렬처리를 할 수 없음 | 권장 |
블록 암호 구조
현대 블록 암호
- S-box(Substitution), P-box(Permutation), XOR연산의 조합으로 구성
- 암호화 설계 원칙 : confusion & diffusion
S-box
- Substitution box
- confusion(혼돈) 제공
- 평문과 암호문의 상관관계를 감추어 평문의 내용을 짐작하기 어렵게 함
P-box
- Permutation box
- diffusion(확산) 제공
- 평문의 통계적 특성을 암호문 전반에 확산 시켜 알고리즘 패턴을 추론하기 어렵게 함
Feistel
- 구조
- 암호화 방식이 특정 계산 함수의 반복으로 구성
- 각 과정에 Round 함수 적용
- 구성도가 그물을 짜는 것과 같이 교환되는 방식
ex) DES, SEED 등
- 강도 결정 요소
- 충분한 안정성을 보장받기 위한 조건
- 평문 블록 길이 64bit 이상
- 키의 길이 64bit 내외(최근에는 128bit 권장)
- 라운드 16회 이상
- 특성
- 복호화 과정 = 암호화 과정
- 복호화 과정 Input : Cipher text, Ki(보조키)
- 복호화 과정의 보조키의 입력 순서는 암호화 과정의 입력순서와 반대

SPN
Substitution-Permutation Network
- 구조
- substitution cipher와 permutation cipher 중첩
- Input을 여러 작은 블록으로 나누고 / 각 블록을 S-box로 이력하여 substitution 시키고 / S-box 출력을 P-box로 permutation 하는 과정 반복
ex) AES(Rijndael), IDEA, ARIA 등
- 특성
- 암복호화 함수가 다름
- 복호화를 위해 라운드 함수가 역변환되어야 함
- 하드웨어 구현 용이하지만 구현 비용이 높음
