개요
암호화는 정보를 읽을 수 없는 형태로 변환하여, 허가되지 않은 접근으로부터 보호하는 기술이다.
즉, 평문(plaintext)을 암호문(ciphertext)으로 바꿔서 제3자가 내용을 볼 수 없게 하는 것이 목적이다.
암호화는 보안의 핵심 중 하나로, 데이터의 **기밀성(Confidentiality)**을 보장하는 데 사용된다.
암호화
암호화의 필요성
소프트웨어 프로그램은 사용자의 정보, 결제 정보, 인증 토큰 등 민감하고 중요한 정보를 다루게 되는데 이 데이터들을 평문으로 저장하거나 전송한다면
•
DB 유출 시 데이터 그대로 노출
•
네트워크 스니핑을 통한 도청
•
내부 직원의 악의적인 접근
등의 위협이 발생할 수 있다. 따라서 암호화는 선택이 아닌 필수가 되었다.
암호화의 기본 구성 요소
구성 요소 | 설명 |
평문 (Plaintext) | 암호화 이전의 원래 데이터 |
암호문 (Ciphertext) | 암호화된 결과물, 사람이 읽을 수 없음 |
키 (Key) | 암호화와 복호화에 사용되는 비밀 값 |
알고리즘 (Algorithm) | 암호화/복호화 규칙 (예: AES, RSA 등) |
IV (Initialization Vector) | 암호화에 무작위성을 부여하는 초기 값 (대칭키 방식에서 사용됨) |
암호화의 종류
암호화는 먼저 가장 크게 복호화가 불가능한 단방향 암호화와 복호화가 가능한 양방향 암호화가 존재한다.
양방향 암호화
암호화된 데이터를 원래 상태(평문)으로 복호화할 수 있는 암호화 방식
데이터를 다시 사용할 수 있어야 하는 경우에 사용이 된다.
양방향 암호화는 다시 대칭키 암호화와 비대칭키 암호화로 나뉜다.
1.
대칭키 암호화
•
하나의 키로 암호화, 복호화 모두 수행
•
속도가 빠르게 효율적이지만 키가 노출되는 경우 치명적임
•
대표 알고리즘 : AES, DES 등
[키] --> 암호화(평문 → 암호문)
[같은 키] --> 복호화(암호문 → 평문)
TypeScript
복사
2.
비대칭키 암호화
•
공개키(Public Key)와 개인키 (Private Key)로 구성된다.
•
한쪽 키로 암호화한 데이터는 반대 키로만 복호화가 가능하다
•
키 공유 문제에 있어서 안전하나 대칭키 암호화방식보다 속도가 느리다.
•
대표 알고리즘 : RSA, ECC
[공개키] --> 암호화
[개인키] --> 복호화
TypeScript
복사
단방향 암호화
•
복호화가 불가능한 암호화 방식
•
입력값을 고정된 길이의 암호문으로 변환
•
주로 비밀번호 저장, 무결성 검증, 디지털 서명 등에 사용된다.
•
대표 알고리즘 : SHA-256, SHA-512, bcrypt
[입력값] -> 해시함수 -> [해시값]
복호화 ❌ (원래 데이터 복원 불가)
TypeScript
복사
•