양방향 암호화

최준병·2026년 4월 29일

양방향 암호화

복호화가 가능한 암호화 방식

대칭키 VS 비대칭키

  • 대칭키: 암/복호화시 사용하는 키가 동일한 방식
  • 비대칭키: 암호화 -> 공개키, 복호화 -> 비밀(개인)키를 사용하는 방식

AES

대표적인 대칭키 양방향 암호화 방식

블록 암호

평문을 고정된 크기의 블록으로 잘라서 한 블록씩 암호화 하는방식
AES의 블록크기는 16바이트로 고정되어있다.

예를들어, 평문의 길이가 32바이트라면 2개의 암호화블록으로 구성된 암호가 생성된다.
만약, 평문의 길이가 16의 배수가 아니라면 마지막 블록은 빈 자리를 채워넣어 16바이트로 맞춘다.
이것을 패딩 이라고 부른다.

운영모드

암호화하는 여러가지 방식이 있다.

ECB모드

가장 직관적인 방법으로

블록1 → AES(키) → 암호화 블록1
블록2 → AES(키) → 암호화 블록2
블록3 → AES(키) → 암호화 블록3

문제는, 같은 평문 블록은 항상 같은 암호문 블록이 되니, 암호안에서 동일한 암호문 블록이 반복될 수 있다.
이러한 패턴이 읽혀 암호가 풀릴 수 있기에 사용하면 안되는 방식으로 분류된다.

CBC모드

IV를 이용해 암호화블록을 한번더 꼬는 방식

IV란? 암호화에 사용되는 랜덤한 초기값이다.
같은 평문이 매번 다른 암호문이 되도록 보장해준다.
해시의 Salt와 동일한 역할이다.

암호화 프로세스

블록1: 평문블록1 XOR IV       → AES(키) → 암호문블록1
블록2: 평문블록2 XOR 암호문블록1 → AES(키) → 암호문블록2
블록3: 평문블록3 XOR 암호문블록2 → AES(키) → 암호문블록3
저장형식: [IV(16바이트)] [암호문] //Salt처럼 공개되어도 상관이없다. 

실제로 IV가 사용되는건 첫번째 평문블록을 암호화할때만이다.
매 암호화마다 IV를 수정해서 암호화해줘야 한다. 동일한 IV를 지속적으로 사용하면, 동일한 입력에 동일한 암호가 생성되어진다.

복호화 프로세스

평문블록1 = AES_decrypt(암호문블록1, 키) XOR IV
평문블록2 = AES_decrypt(암호문블록2, 키) XOR 암호문블록1
평문블록3 = AES_decrypt(암호문블록3, 키) XOR 암호문블록2

AES는 암호화보다 복호화가 더 빠르다.
왜냐하면 복호화는 병렬로 실행이 가능하기때문이다.
평문블록으로 복호화하는데 필요한건 자기 블록과 이전 블록뿐이기때문이다.
이러한 이유로, 특정 블록이 손상되어도 손상이 전파되지않는다.
필요한건 자기 자신과 이전 블록 뿐이기때문이다.

profile
나의 기록

0개의 댓글