송신자-수신자 공동의 비밀 키 공유
대칭키 종류
1️⃣ Block cipher 블록 암호: 메세지를 일정 단위 block으로 나누어서 각 block마다 암호화 (단위 안맞으면 padding 추가)
2️⃣ Streaming cipher 스트링 암호: 비트 단위 암호화. 메시지 길이만큼 랜덤 숫자 생성하여 XOR
특정 문자를 다른 문자로 1:1 대체
⚠️ 한계: brute force search로 해독 가능(문자의 모든 이동을 시도)
ex)
암호화
복호화
➕ Mangler Function 치환박스 Si
: 데이터를 섞어주는 역할. 입력값 6bit와 출력값 4bit를 갖는 8개의 S박스 사용
동일한 키 사용하여 각각의 블록 독립적으로 암호화
→ 각각의 블록이 안전하게 암호화되었더라도, 전체는 안전하게 암호화x (블록이 동일하다면, 암호화된 블록도 동일)
→ ⚠️ 문제점: 원본에 대한 힌트 가능
ECB 문제점 해결 방법. 현재 블록을 암호화할 때 이전 블록의 암호화된 결과를 이용. 무결성 제공
→ ⚠️ 문제점: 암호활 내용과 키가 동일하다면, 암호문 동일. 예측 가능
암호화된 별도의 랜덤 블록. 최초 XOR연산에 Initialization Vector(초기화 벡터) 사용
→ 암호화할 내용과 키가 동일하더라도, 매번 IV가 다르기 때문에 다른 형태로 암호화됨
➡️ Message Authentication Code(MAC)
: MAC 값은 모든 메시지 블록과 해당 순서에 따라 다름
암호화하려는 데이터가 블록의 배수가 아닐 경우 부족한 길이만큼 패딩
비트 단위 암호화. 난수 생성기인 스트림 암호에 의해 생성된 일회용 패드