티스토리 뷰
DES와 AES 암호화 방법 총 정리
📌 암호화의 등장배경
20세기 후반 사회는 빠르게 전자화되었습니다.
은행에서는 종이 장부 대신 컴퓨터로 거래를 기록하기 시작했고, 정부와 군대 역시 무선 통신과 위성을 이용해 중요한 지시와 정보를 주고받게 되었습니다.
하지만 이러한 변화는 심각한 보안 문제를 발생시켰습니다.
🔷 전자 신호는 쉽게 가로챌 수 있었습니다.
전화선에 간단한 장비를 달거나 무선 전파를 수신하기만 하면, 상대방 몰래 데이터가 유출되었습니다.
이로 인해 거래 정보와 군사 기밀이 노출되면 사회 혼란과 경제적 피해가 발생할 수 있었습니다.
또한 기관마다 서로 다른 암호화 방식을 사용하여 일관성이 없고 수준도 제각각이었습니다.
이로 인해 국가 차원에서 누구나 안전하게 사용할 수 있는 표준 암호화 기술의 필요성이 대두되었습니다.
🔷 DES란?
DES의 정의
DES(Data Encryption Standard)는 하나의 대칭키를 사용해 고정된 크기의 데이터 블록을 암호화하고 복호화하는 블록 암호화 표준입니다.
DES는 데이터를 숨기기 위한 계산 방식입니다.
여기서 ‘대칭키’란 데이터를 숨길 때와 풀 때 모두 같은 비밀번호를 사용한다는 뜻입니다.
보내는 사람과 받는 사람은 미리 약속한 비밀번호를 사용하여 데이터를 처리합니다.
📌 예시
은행이 고객에게 송금 정보를 전송할 때 DES를 사용하면, 계좌번호와 금액이 복잡한 숫자로 바뀌어 전송됩니다.
고객은 은행과 약속한 같은 비밀번호로 계산해 원래 정보를 확인합니다.
DES의 구조: Feistel 구조
DES는 Feistel 구조라는 방식을 사용합니다.
Feistel 구조는 데이터를 두 부분으로 나누고, 오른쪽 부분에 비밀번호(대칭키)를 XOR한 계산 결과를 왼쪽과 XOR하고, 마지막으로 두 부분을 교환하는 방식을 반복하는 구조입니다.
이 과정을 여러 번 반복하면서 데이터의 패턴을 완전히 깨뜨립니다.
Feistel 구조의 장점은 암호화와 복호화가 거의 동일한 계산을 거꾸로 하면 되기 때문에 구현이 단순하고 효율적이라는 점입니다.
📌 Feistel 구조 요약:
왼쪽 / 오른쪽 → 오른쪽 ⊕ 키 → 왼쪽과 XOR → 교환 → 16회 반복
DES의 암호화 과정
📌 예시 데이터
원본 데이터 블록: 10020030
대칭키: 1111
📌 단계별 암호화
✅ 1️⃣ 데이터를 왼쪽과 오른쪽으로 나눔
데이터를 두 부분으로 나누어야 각각 별도로 계산이 가능하고, Feistel 구조에 따라 서로를 교환하면서 패턴을 숨길 수 있습니다.
1002 / 0030
✅ 2️⃣ 오른쪽에 대칭키를 XOR
오른쪽 부분에 키를 XOR하는 이유는 패턴을 깨뜨려 왼쪽 데이터에 혼란을 주기 위해서입니다.
0030 ⊕ 1111 → 1121
✅ 3️⃣ 계산 결과를 왼쪽과 XOR
왼쪽 데이터와 오른쪽 계산 결과를 XOR하여 서로 얽히게 합니다. 이렇게 하면 입력과 출력의 상관관계가 더 복잡해집니다.
1002 ⊕ 1121 → 2123
✅ 4️⃣ 왼쪽과 오른쪽을 교환
이제 계산된 두 부분을 교환해 다음 라운드에서 새로운 데이터 조합으로 연산이 진행되도록 합니다.
2123 / 1121 → 1121 / 2123
✅ 5️⃣ 16번 반복
위의 과정을 16회 반복하면, 데이터는 완전히 새로운 형태의 암호문으로 변환됩니다.
예를 들어, 최종 암호문은 다음과 같습니다:
암호문: 7F4B / 29C8 → 최종 암호문: 7F4B29C8
DES의 복호화 과정
DES 복호화는 암호화의 과정을 역순으로 수행합니다.
중요한 점은 반드시 암호화와 동일한 대칭키를 사용해야만 원래 데이터를 복원할 수 있다는 점입니다.
📌 암호문과 키
암호문: 7F4B29C8 대칭키: 1111
📌 단계별 복호화
✅ 1️⃣ 암호문을 왼쪽과 오른쪽으로 나눔
암호문을 원래처럼 두 부분으로 나눕니다.
7F4B / 29C8
✅ 2️⃣ 왼쪽과 오른쪽을 교환
교환하여 역순 연산을 준비합니다.
29C8 / 7F4B
✅ 3️⃣ 오른쪽에서 대칭키를 XOR해 계산
대칭키를 XOR하여 이전 라운드의 오른쪽 데이터를 복원합니다.
7F4B ⊕ 1111 → 6E5A
✅ 4️⃣ 계산 결과를 왼쪽과 XOR
왼쪽 데이터와 XOR해 이전 라운드의 왼쪽 데이터를 복원합니다.
29C8 ⊕ 6E5A → 1002
✅ 5️⃣ 왼쪽과 오른쪽을 교환
6E5A / 1002
✅ 6️⃣ 16번 반복
이 과정을 거꾸로 16회 반복하면, 최종적으로 다음과 같이 원래 데이터가 복원됩니다:
복원된 데이터: 10020030
🔷 DES의 한계
DES는 시간이 지나면서 56비트 비밀번호가 너무 짧아졌고, Feistel 구조도 현대의 공격 기법에 취약해졌습니다.
1998년에는 DES를 몇 시간 만에 깨는 전용 장치가 등장하며, 더 이상 충분히 안전하지 않게 되었습니다.
이로 인해 더 긴 키와 더 강력한 구조를 갖춘 새로운 표준이 필요해졌습니다.
🔷 AES란?
AES의 정의
AES(Advanced Encryption Standard)는 더 긴 대칭키와 더 복잡한 계산으로 데이터를 안전하게 숨기고 복원하는 블록 암호화 표준입니다.
AES는 DES의 한계를 극복하기 위해 개발된 방식으로, 더 긴 비밀번호를 사용하고 더 정교한 계산을 통해 보안성을 강화했습니다.
역시 보내는 사람과 받는 사람은 같은 대칭키를 공유하여 데이터를 처리합니다.
AES의 구조: Substitution-Permutation 네트워크
AES는 Substitution-Permutation 네트워크(SPN)라는 구조를 사용합니다.
SPN은 데이터를 표 형태로 배열한 뒤, 각 자리 숫자를 S-box라는 치환표로 다른 값으로 바꾸고(Substitution),
행과 열을 회전하거나 섞어서(Permutation) 데이터 전체의 패턴을 지우는 구조입니다.
이 과정을 반복하면서 데이터의 각 비트가 전체에 고르게 퍼지도록 하고, 공격자가 패턴을 찾기 어렵게 만듭니다.
📌 SPN 요약:
비밀번호 적용 → 바이트 치환(S-box) → 행 회전 → 열 혼합 → 10~14회 반복
AES의 암호화 과정
📌 원본 데이터
1 0 0 2 0 0 3 0 0 0 0 0 0 0 0 0
📌 대칭키
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
📌 단계별 암호화
✅ 1️⃣ 비밀번호 적용 (AddRoundKey)
비밀번호를 데이터에 XOR하여 초기 패턴을 깨뜨립니다.
이렇게 하면 데이터와 키가 섞여 단순한 패턴이 사라집니다.
1 0 0 2 → 0 1 1 3 0 0 3 0 → 1 1 2 1 0 0 0 0 → 1 1 1 1 0 0 0 0 → 1 1 1 1
✅ 2️⃣ 바이트 치환 (S-box)
각 칸을 S-box를 참고해 치환합니다.
S-box는 입력값을 다른 값으로 치환해 패턴을 숨기는 암호학적 표입니다.
예시 S-box 일부:
| 입력 | 출력 |
|---|---|
| 0 | 63 |
| 1 | 7C |
| 2 | 77 |
| 3 | 7B |
적용 결과:
0 1 1 3 → 63 7C 7C 7B 1 1 2 1 → 7C 7C 77 7C 1 1 1 1 → 7C 7C 7C 7C 1 1 1 1 → 7C 7C 7C 7C
✅ 3️⃣ 행 회전 (ShiftRows)
각 행을 왼쪽으로 서로 다른 칸만큼 밀어 데이터가 섞이도록 합니다.
- 2행: 1칸
- 3행: 2칸
- 4행: 3칸
63 7C 7C 7B → 63 7C 7C 7B 7C 7C 77 7C → 7C 77 7C 7C 7C 7C 7C 7C → 7C 7C 7C 7C 7C 7C 7C 7C → 7C 7C 7C 7C
✅ 4️⃣ 열 혼합 (MixColumns)
각 열을 수학적으로 계산해 데이터가 표 전체에 퍼지도록 합니다.
작은 변화가 모든 열에 확산됩니다.
7C 77 7C 7C → A1 B2 C3 D4 7C 7C 7C 7C → E5 F6 07 89 7C 7C 7C 7C → 12 34 56 78 7C 7C 7C 7C → 9A BC DE F0
✅ 5️⃣ 10~14회 반복
이 과정을 10~14회 반복해 데이터는 점점 더 복잡해집니다.
📌 최종 암호문
A1 B2 C3 D4 E5 F6 07 89 12 34 56 78 9A BC DE F0
🔷 AES의 복호화 과정
복호화는 암호화 과정을 역순으로 진행합니다.
중요한 점은 암호화 때 사용한 대칭키를 반드시 사용해야 한다는 것입니다.
📌 암호문
A1 B2 C3 D4 E5 F6 07 89 12 34 56 78 9A BC DE F0
📌 대칭키
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
📌 단계별 복호화
✅ 1️⃣ 마지막 라운드 키 제거
A1 B2 C3 D4 → A0 B3 C2 D5 E5 F6 07 89 → E4 F7 16 98 12 34 56 78 → 13 35 57 79 9A BC DE F0 → 9B BD DF F1
✅ 2️⃣ 열 혼합 역연산 (MixColumns⁻¹)
A0 B3 C2 D5 → 7C 6B 7B 9F E4 F7 16 98 → 7B 7B 76 7B 13 35 57 79 → 7B 7B 7B 7B 9B BD DF F1 → 7B 7B 7B 7B
✅ 3️⃣ 행 오른쪽 회전 (ShiftRows⁻¹)
7C 6B 7B 9F → 7C 7C 77 7C 7B 7B 76 7B → 7C 7C 7C 7C 7B 7B 7B 7B → 7C 7C 7C 7C 7B 7B 7B 7B → 7C 7C 7C 7C
✅ 4️⃣ 바이트 치환 역연산 (Inv S-box)
7C 7C 77 7C → 1 0 0 2 7C 7C 7C 7C → 0 0 3 0 7C 7C 7C 7C → 0 0 0 0 7C 7C 7C 7C → 0 0 0 0
✅ 5️⃣ 10~14회 반복
이 과정을 역순으로 10~14회 반복하면, 원래 데이터가 완전히 복원됩니다.
📌 복원된 데이터
1 0 0 2 0 0 3 0 0 0 0 0 0 0 0 0
🔷 DES와 AES 비교 정리
| 항목 | DES | AES |
|---|---|---|
| 표준화 시기 | 1977년 | 2001년 |
| 비밀번호(키) 길이 | 56비트 | 128비트, 192비트, 256비트 선택 가능 |
| 데이터 블록 크기 | 64비트 | 128비트 |
| 구조 | Feistel 구조 | Substitution-Permutation 네트워크(SPN) |
| 반복 횟수 | 16회 | 10회~14회 (키 길이에 따라 다름) |
| 보안성 | 현재 기준으로 취약 | 현재까지 안전성 검증됨 |
| 처리 속도 | 빠름 | 더 빠르고 효율적임 |
| 사용 분야 | 과거 금융, 군사, 정부에서 주로 사용 | 현재 금융, 군사, 인터넷 등 전반에 사용 |
🔷 결론
- ✅ DES는 1977년 채택된 최초의 표준 대칭키 암호화 방식으로, 당시에는 충분히 안전하고 효율적이었지만, 현대의 컴퓨터 성능 앞에서는 더 이상 안전하지 않게 되었습니다.
- ✅ AES는 DES의 짧은 키 길이와 구조적 취약점을 극복하기 위해 설계된 후속 표준으로, 더 긴 키와 더 정교한 SPN 구조 덕분에 지금까지도 안전성과 효율성을 인정받고 있습니다.
- ✅ 두 방식 모두 대칭키 방식을 기반으로 하며, 블록 단위로 데이터를 처리하지만, AES가 더 긴 키 길이, 더 복잡한 계산, 더 나은 보안성을 제공합니다.
- ✅ 오늘날 금융 거래, 군사 통신, 정부 데이터 보호, 인터넷 보안 프로토콜 등 거의 모든 분야에서 AES가 표준으로 자리잡고 있습니다.
'정보처리기사' 카테고리의 다른 글
| RIP와 OSPF — 링크 상태와 다익스트라로 보는 두 가지 길 찾기 방식 (5) | 2025.07.12 |
|---|---|
| 서브넷 마스크란? (0) | 2025.07.12 |
| 데이터그램 방식과 가상 회선 방식: 자세한 설명 (0) | 2025.07.08 |
| 소프트웨어 설계의 응집도: 기능적 응집, 순차적 응집, 교환적 응집, 절차적 응집, 시간적 응집, 논리적 응집, 우연적 응집 (0) | 2025.07.07 |
| UML의 관계: 의존, 연관, 일반화 (0) | 2025.07.06 |
- Total
- Today
- Yesterday
- HTML
- Python
- 프로그래밍
- 코딩 테스트
- 문제 풀이
- 그리디
- 알고리즘
- 문제풀이
- 그래프 탐색
- 알고리즘문제풀이
- 문자열처리
- 상속
- 백준
- 알고리즘기초
- 객체지향
- dfs
- 파이썬코딩
- 알고리즘 문제풀이
- C++
- python 알고리즘
- 브루트포스
- 코딩
- 파이썬
- 그리디알고리즘
- 코딩테스트
- DP
- 프로그래머스
- 동적계획법
- 동적 계획법
- c언어
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
