
암호화와 복호화에 동일한 키를 사용하는 방식이다. 비대칭키에 비해 연산 속도가 빠르고 구현이 간단하다는 장점이 있지만, 키를 안전하게 주고받는 키 교환 과정이 필수적이며 키가 유출되면 보안에 취약해진다.
특징
대표 알고리즘: AES, DES 등
분류
스트림 (Stream): 데이터의 비트/바이트 단위로 연속적으로 암호화하는 방식. 블록 방식보다 빠르며 하드웨어 복잡성이 낮지만, 평문의 패턴이 노출될 수 있어 보안에 취약할 수 있다.
블록 (Block): 데이터를 일정한 크기의 블록으로 나누어 암호화하는 방식. 블록 크기에 따라 속도 차이가 발생하며, 데이터가 블록 크기 미만일 경우 패딩이 필요하다.
Notion에 정리하기 좋게 대칭키와 비대칭키, 그리고 대표적인 알고리즘인 AES와 RSA에 대해 명확하게 구분하여 정리해 드릴게요.
암호화와 복호화에 서로 다른 키를 사용하는 방식이다. 공개키(Public Key)와 개인키(Private Key) 한 쌍으로 구성된다. 공개키는 누구나 가질 수 있으며, 개인키는 소유자만 가질 수 있다.
특징
대표 알고리즘: RSA, ECC 등
활용
AES는 대칭키 블록 암호화 알고리즘의 대표적인 표준이다. 암호화와 복호화에 동일한 키를 사용하며, 데이터를 일정한 크기의 블록으로 나누어 처리한다.
AES는 암호화 과정에서 각 라운드마다 동일한 4개의 함수를 반복적으로 수행한다.

SubBytes (바이트 치환)
상태 행렬의 각 바이트를 S-box(Substitution-box)라는 고정된 치환 테이블을 이용해 다른 값으로 바꾼다. 이 과정은 다음과 같이 진행된다.
이 과정을 통해 AES는 비선형성을 강화하여 암호의 보안을 높인다. 예를 들어, 0x19는 S-box를 통해 0xD4로 변환된다.

ShiftRows (행 이동)
상태 행렬의 각 행을 정해진 규칙에 따라 왼쪽으로 순환 이동(Circular Shift)한다.

MixColumns (열 섞기)
상태 행렬의 각 열에 대해 고정된 4×4 행렬을 곱하여 값을 섞는다.
이 과정은 갈루아 필드(Galois Field, 상에서 연산되며, 열 단위의 확산(Diffusion)을 일으켜 보안성을 높인다.
AddRoundKey (라운드 키 추가)
키 스케줄을 통해 생성된 라운드 키를 현재 상태 행렬과 XOR 연산한다. 이는 암호화 키를 연산에 직접적으로 섞는 단계이다.
RSA(Rivest-Shamir-Adleman) 알고리즘은 큰 정수의 소인수분해가 어렵다는 수학적 원리를 기반으로 한 비대칭키 암호화 방식이다. 공개키와 개인키를 한 쌍으로 사용하며, 공개키로 암호화한 메시지는 개인키로만 복호화할 수 있다.
예시를 통해서 RSA의 키 설정 및 암/복호화에 대해 알아보자.
두 개의 서로 다른 소수 p와 q를 선택한다.
예시: p=7, q=13
모듈러 n을 계산한다. n은 공개키와 개인키의 일부가 된다.
예시: n=7×13=91
오일러 피 함수 ϕ(n) 값을 계산한다.
예시: ϕ(91)=(7−1)×(13−1)=6×12=72
보다 작고 과 서로소(coprime)인 정수 e를 선택한다. e는 공개키의 지수가 된다.
예시: e=5
개인키의 지수 d를 계산한다. d는 을 만족하는 값이다. 이 값은 확장 유클리드 호제법으로 구할 수 있다.
예시: 를 만족하는 d=29
최종 키:
공개키 (Public Key): (n,e) → (91,5)
개인키 (Private Key): (n,d) → (91,29)
평문(Plaintext): m
공개키: (n,e)
개인키: (n,d)
암호화 (Encryption)
평문 m을 공개키 를 이용해 암호화하여 암호문 c를 만든다.
예시: 평문 m=9를 암호화하면
복호화 (Decryption)
암호문 c를 개인키 를 이용해 복호화하여 평문 m을 언는다.
예시: 암호문 c=81을 복호화하면
복호화가 성공적으로 이루어지는 이유는 오일러 정리(Euler's Theorem)를 통해 증명할 수 있다. 오일러 정리는 a와 m이 서로소일 때 임을 밝혀진다.
RSA의 복호화 과정은 다음과 같습니다.
키 생성 과정에서 ed≡1(modϕ(n)) 이므로, ed는 1+kϕ(n) 형태로 표현할 수 있습니다. 이를 복호화 식에 대입하면:
여기서 오일러 정리에 따라 이므로,
따라서 개인키 d를 사용하여 암호문 c를 복호화하면 원래 평문 m이 올바르게 복원된다.