0. 전통방식의 암호화
카이사르 암호 : k 번째 뒤의 수나 문자로 바꾸는 것
단일 문자 암호화 : 한 문자를 다른 문자로 바꾸는 것
다중 문자 암호화 : 한 문자를 여러 문자로 바꾸는 것
1. 블록 암호화 - 현대
k개의 비트로 문자를 쪼개서 암호화하는 방식이다 → k 블록단위의 암호화
완전 테이블 기반 암호화
특정 사상 테이블대로 하는 암호화이다
실제로 사용은 불가능
블록 암호화
입출력 블록의 순열 테이블을 임의로 모방 생성하는 함수
k=8일때의 예시
8bit의 8개의 청크(
$T_i$
)로 이뤄진 테이블로 처리가되는 예시이다.
예를 들어 입력된 것들 중 처음으로 쪼개진 8비트는
$T_1$의 청크
로 처리된다.
그렇게 처리된 출력을 더 좋은 암호화를 위해 n회 순회한다. ⇒ 라운드를 여러번 반복하는 이유는 각 입력 비트가 대부분의 최종 출력 비트들에 영향을 미치게 하기 위해서이다.
오늘날 널리 쓰이는 것들
DES(Data Encryption Standard) : 56비트의 키를 64비트의 블록과 함께 사용
AES(Advanced Encryption Standard): 128비트의 블럭을 사용, 128, 192, 256 비트의 길이의 키를 사용
2. 암호 블록 체이닝
다른 평서문 블록이 같은 암호문 블록이 될 수 있다.
위의 경우와 같은 평서문이라도 달라지게 하기위해 임의성을 추가한 것
k비트의 r(i) 임의문을 XOR 을 이용해 암호화 하는 예가 있다 전송방식 : 평문1, r(1), 평문2, r(2)….
이럴 경우 r(i)에 따라 달라지기 때문에 같아지는 경우 방지가 가능하다
문제점
임의의 수를 넣어서 푸는 것이 가능
전송시 하나의 평문에 하나의 임의문을 넣어야 해서 대역폭을 두 배로 써야한다.
위의 문제점을 해결한 암호 블록 체이닝
순서
임의의 평서문 k비트열 초기화 백터(Initial Vector)를 c(0) 생성 후 수신자에게 보낸다.
첫 번째 블록 : c(1) = m(1) XOR c(0)
두 번째 블록: c(2) = m(2) XOR c(1)
처음 보낸 초기화 백터를 이용하여 계속적으로 암호화시키는 것이다
장점
수신자는 c(i)를 받는 다면 복호화가 가능하다
$K_s$ 알고리즘을 통해 복호화가 가능(비밀키 S를 이용), 이렇게 되면 c(i-1)도 알 수 있어 원문도 확인이 가능해진다.
앞에 암호문에따라 계속 바뀌기에 더욱더 변칙적이다
IV를 암호화하지 않아도 S 키를 모르면 알 수가 없음
원문마다 하나씩 더 임의문을 보내 많은 대역폭을 썼던 것과 다르게 하나의 초기화 백터만 보내서 미미한 대역폭 증가량을 볼 수 있다.