암호화는 정보를 인가되지 않은 접근으로부터 보호하기 위해 데이터를 특정 알고리즘을 이용해 알아볼 수 없게 변환하는 기술이다.
암호화된 데이터는 복호화를 통해 다시 원래의 데이터로 되돌릴 수 있다.
웹 서비스에서는 사용자의 비밀번호, 주민등록번호, 카드 정보 같은 민감한 데이터들을 다룬다.
이런 정보들이 유출되면 큰 사고로 이어질 수 있기 때문에 다음과 같은 목적을 위해 암호화를 사용한다.

암호화 방식은 복호화 가능 여부에 따라 단방향/양방향 암호화로 나누고, 양방향 암호화 내에서 암호화/복호화를 위해 사용되는 키에 따라 비밀키(대칭키)암호화와 공개키(비대칭키)암호화로 분류할 수 있다.
양방향 암호화란 암호화된 데이터를 복호화할 수 있는 암호화 방식이다.
대칭키 암호화는 암호화와 복호화에 같은 암호키(대칭키)를 사용한다.
암호문을 생성(암호화)할 때 사용하는 키와 암호문으로부터 평문을 복원(복호화)할 때 사용하는 키가 동일한 암호 시스템이다.
암호 시스템의 안전성은 키의 길이, 키의 안전한 관리에 의존성에 높다.
대칭키 암호 시스템의 가장 큰 약점은 키관리의 어려움에 있다.
한 사용자가 관리해야할 키의 수가 너무 많아지기 때문이다.
이러한 약점을 보완하기 위해 나타난 암호 시스템이 공개키(비대칭키) 암호 시스템이다.
비대칭키 암호 시스템에서 각 사용자는 두 개의 키를 부여 받으며, 키 중 하나는 공개되고(공개키) 다른하나는 사용자에 의해 비밀리에 관리 되어야 한다.(비밀키)
비대칭키 암호화 시스템에서 각 사용자는 자신의 비밀키만 관리하면 되므로 키 관리의 어려움을 줄일 수 있다.
비대칭키 암호화는 서로 다른 두개의 키(공개키, 개인키)를 사용한다.
공개키로 암호화한 데이터는 개인키로만 복호화 할 수 있고, 반대로 개인키로 서명한 데이터는 공개키로만 검증할 수 있다.
해시 함수는 어떤 입력값이든 받아서 고정된 길이의 해시값으로 변환해주는 함수이다.
암호화는 가능하지만 복호화는 불가능하며, 같은 입력값에서는 항상 같은 출력이 나오지만, 조금이라도 다른 입력이면 전혀 다른 값이 나온다.
| 구분 | 양방향 암호화 | 단방향 암호화 (해시) |
|---|---|---|
| 복호화 가능 | 가능 | 불가능 |
| 사용 목적 | 저장 후 다시 꺼내쓰기 | 비교만 하기 (복원 불필요) |
| 대표 기술 | 대칭키(AES), 비대칭키(RSA) | 해시(SHA, BCrypt) |
| 사용 예 | 주민번호, JWT, 설정 암호화 | 비밀번호 저장, 무결성 검증 |
실제 보안 시스템에서는 이 세가지 방식이 상황에 따라 조합되어 사용한다.
- 사용자의 비밀번호는 해시로 단방향 암호화해 저장하고,
- 서비스 설정 파일이나 민감 정보는 대칭키로 양방향 암호화해서 복호화 가능하게 하며,
- 로그인 후 발급되는 JWT 토큰은 비대칭키로 서명과 검증을 수행한다.