컴퓨터 보안

암호화 기법, AES, RSA, 해시함수

Aidengoldkr 2026. 2. 5. 00:38

1. 시저 암호

알파벳을 왼쪽으로 3칸 씩 밀어서 구현한 암호법

2. 스키테일 암호

굵기와 길이가 같은 원통 모양의 막대기에 긴 양피지 리본을 위에서 아래로 나선형으로 감으면 암호문이 나온다

암호화의 5가지 요소

1. 평문

대칭 암호화 알고리즘의 입력값으로, 수신자가 전달호자하는 메세지 원문

2. 암호화 알고리즘

입력값 평문에 대한 치환, 변환, 대치등 암호문을 생성하는 방법

3. 키

암호화 알고리즘에서 특정 형태로 치환하기 위해 사용되는 값

4. 암호문

암호화 알고리즘을 통해 생성된 숨겨진 데이터

5. 복호화 알고리즘

암호화 알고리즘의 역과정으로 송신자 측에서 암호문을 입력값으로 본래의 평문으로 출력

대칭암호화 기법 : 암호문을 받은 송신자가 동일한 키를 활용한 복호화 알고리즘으로 평문을 생성해낼 경우

  • 블록암호 : 평문의 블록에 비트를 혼합하는 함수를 반복하는 방식 -> 이러한 혼합과 반복의 절차를 나타낸것이 블록 암호의 틀 = "Feistel"
  1. 평문의 블록을 좌/우로 나눈다.
  2. L1 = R1
  • 키 길이가 길어질 수록 공격신호도 강해짐
  • DES
    평문의 길이를 64비트로 나누고 라운드는 16번 반복한다. 7비트마다 오류 검출을 위한 패리트 비트가 있어 실질적으로 56비트 사용

    하지만 56비트의 KEY는 전수조사 공격에 취약 -> 3중 DES

AES는 Non-Feistel 구조이다.

State = X;
AddRoundKey(State, Key0);

for (i = 1; i < r; i++) {
    SubBytes(State, S_box);
    ShiftRows(State);
    MixColumns(State);
    AddRoundKey(State, Keyi);
}

SubBytes(State, S_box);
ShiftRows(State);
AddRoundKey(State, Keyr);

Y = State;
  1. AddRoundKey : State와 Key를 XOR 계산한다
  2. SubBytes - 1 : 문자를 대치 시킨다.
  3. SubBytes - 2 : S-box 기반 문자를 대치 시킨다.
  4. ShiftRows : 일정 칸 만큼 옆으로 이동시킨다.
  5. MixColumns : 다시 한번 XOR 계산을 하여 섞는다.

대칭암호화의 한계점
① 상대방에게 키를 비밀리에 전달하는데에 한계
② N명의 상대와 1:1 통신 시 너무 많은 수의 대칭키가 필요 n(n-1)/2
③ 송신자와 수신자가 서로 속일 가능성 △


비대칭 암호화의 원리

송신자와 수신자 모두 자신의 공개키와 개인키 한 쌍을 가지고 있어야 함

① 암호화 (기밀성 보장)

  • Alice는 Bob의 공개키(PU_Bob)로 암호화
  • Bob은 자신의 개인키(PR_Bob)로 복호화하여 해독

② 전자서명 (인증 보장)

  • Alice는 자신의 개인키(PR_Alice)로 암호화 → 서명(sign)
  • 수신자는 Alice의 공개키(PU_Alice)로 Alice의 서명임을 증명/확인

RSA

정수의 소인수분해 원리 활용

p와 q가 아주 큰 소수일 때

  • n = p × q 계산은 쉽지만
  • n에서 p와 q를 찾는 것은 매우 어렵다

비대칭성이 RSA의 보안성 기반


RSA 키 생성 알고리즘

단계 내용
서로 다른 큰 소수 p와 q를 선택
n = p × q 계산
φ(n) = (p-1) × (q-1) 계산 (오일러 파이 함수)
1 < e < φ(n) 범위에서 gcd(e, φ(n)) = 1을 만족하는 e 선택
e · d ≡ 1 (mod φ(n))을 만족하는 d 계산

결과

  • 공개키: (n, e)
  • 개인키: (n, d)

RSA 암호화/복호화 공식

암호화: C = M^e mod n
복호화: M = C^d mod n


예시: p=11, q=3

키 생성

p = 11, q = 3
n = 11 × 3 = 33
φ(n) = (11-1) × (3-1) = 10 × 2 = 20
e = 3 (20과 서로소)
d = 7 (3 × 7 = 21 ≡ 1 mod 20)

공개키: (33, 3)
개인키: (33, 7)

Alice가 Bob에게 메시지 "8" 전송

① Alice의 암호화 (Bob의 공개키 사용)

C = 8³ mod 33 = 512 mod 33 = 17

② Bob의 복호화 (자신의 개인키 사용)

M = 17⁷ mod 33 = 8

RSA의 특징

장점

  • 높은 보안성: 소인수분해의 어려움 기반
  • 키 배송 문제 해결
  • 전자서명 가능 (인증 및 부인방지)

단점

  • DES, AES 등 대칭키 암호보다 속도 느림
  • 복호화가 암호화보다 더 오래 걸림

해시 함수

해시 함수의 목적

입력값보다 작은 길이의 출력값 도출

  • 메시지 압축: 출력값은 짧은 길이의 고정된 값
  • 계산의 효율: 임의의 x에서 h = H(x)는 쉽게 도출
  • 단방향성: 임의의 h에서 H(x) = h를 만족시키는 x를 찾는 것은 거의 불가능
  • 충돌방지: H(x) = H(x')이고 x ≠ x'일 때, x와 x'을 찾는 것은 거의 불가능

단순히 길이를 줄이는 것이 아니라, 입력값의 특성을 그대로 가져야 함


해시 함수의 역할과 보안적 의미

블록체인에서의 활용

  • 블록 헤더를 해시값으로 변환하여 무결성 보장
  • 해시값이 다르면 데이터 변조를 빠르게 감지

보안 검증

  • 해시 함수 + 전자서명을 통해 기밀성과 무결성 검증
  • 해시값 비교로 데이터 변경 여부 확인

비밀번호 보안

  • 사용자 비밀번호를 해시값으로 변환하여 서버에 저장
  • 원본 비밀번호 저장 X → 해시값만으로 인증
  • 해킹 시에도 비밀번호 노출 위험 최소화

충돌(Collision)과 출력값 길이

충돌이란?

서로 다른 입력값이 같은 해시값을 가지는 현상

  • H(x) = H(x')이지만 x ≠ x'인 경우
  • 입력값의 경우의 수가 출력값보다 많아 불가피하게 발생 가능

충돌 확률 계산

Q. 충돌이 거의 불가능하게 만들려면 출력값 길이가 얼마나 되어야 할까?

A. H(x)가 n bit라면, 2ⁿ개의 해시값이 나올 수 있음 (0과 1로 만들어지기 때문)

따라서 약 2^(n/2) 번 이상 비교해야 충돌 발생

비트 수 50% 확률 90% 확률
128 bits 2⁶⁴ 2⁶⁶
160 bits 2⁸⁰ 2⁸²
256 bits 2¹²⁸ 2¹³⁰

→ 256bits가 되면, 2¹³⁰번 비교해야 90% 확률로 충돌(같은 값) 발생


Avalanche Effect (눈사태 효과)

입력값이 1bit만 다르더라도, 해시함수에 의해 만들어지는 출력값은 반 이상이 바뀌어야 함

SHA-256 예시

Input Output (SHA-256)
ABC b5d4045c3f466fa91fe2cc6abe79321a157cdf1047f7a26e716e0a1e2789df78
abc ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
ab fb8e20fc2e4c3f248c60c39bd652f3c1347298bb977b8b4d5903b85055620603

→ 입력값이 유사해도 출력값이 전혀 다름을 확인할 수 있음

이는 보안에 매우 중요한 특성으로:

  • 입력값의 작은 변화도 해시값으로 즉시 감지 가능
  • 무결성 검증의 핵심 원리
  • 역추적 방지에 기여

'컴퓨터 보안' 카테고리의 다른 글

에니그마의 암호화 내부 원리  (0) 2026.02.05