블록 암호의 암호화 외 용도
- 암호화 외 용도
- 의사 난수 생성기의 생성
- 스트림 암호화 실현
- 해시 함수 구성
- 키 구축 프로토콜의 구축
- 메시지 인증 코드의 생성
- 암호화 하는 방법에 따라 기밀성 외 진본성, 무결성을 추가로 제공
운영 모드
ECB(Electronic Code Book) mode
- 가장 기본적인 암호화 방법 16비트씩 짤라서 암호
단점
- 평문의 길이 != 블록의 길이
- 맨 마지막 블록은 남으면 안됨 → 평문의 길이가 동일하지 않음 암호문은 무조건 16의 배수 바이트
- 가장 명백하지만 심각한 약점 : 같은 블록들을 동일한 키로
- 평문의 통계적 특성이 그대로 드러남
- Cut and Paste(잘라서 붙이는 공격) 위험 : 중간거 때서 다르게 순서 바꾸기
- 알려진 평문-암호문 쌍을 이용 -> 암호문 조작
- ex) 밥은 '엘리스'를 사랑한다고 '트루디'에게 말했다.
-> 밥은 '트루디'를 사랑한다고 '엘리스'에게 말했다.
- ex) 전자 금융 전송문 : 공격자는 반복 전송문을 보내 암호문 블록 분석 -> 공격
장점
- 블록이 각각 독립적 -> 병렬처리 가능 -> 고속 구현 가능
- ㄴ-> 오류 퍼짐이 없음.
- 송/수신자 사이 블록 동기화 필요 X
암/복호화 과정
- 암호화 : C=E(Pi,K)
- 복호화
C0 = E(P0,K), P0 = D(C0,K)
C1 = E(P1,K), P1 = D(C1,K)
C2 = E(P2, K) P2 = D(C2, K)
...
CBC(Cipher Block Chaining) mode
- 범용적 용도로 가장 많이 사용
- ECB 모드의 약점 보완
- 블록이 "chain"으로 연결
장점 : 동일 내용이라도 앞 블록의 내용에 따라 암호문이 달라짐
단점
- 평문 길이 != 암호문 길이
- 랜덤 액세스 불가 -> 특정 부분만 암복호화 불가 → 병렬처리 불가, 순서 섞임 불가능
- IV 재사용 안됨 -> 재사용하면 평문 첫 블록 유추 가능
- CBC 모드를 초기화하려면 랜덤 초기화 벡터 (IV, 비밀X, nonce)가 필요
암/복호화 과정
- Encryption
C0 = E(IV ⨁ P0, K),
C1 = E(C0 ⨁ P1, K),
C2 = E(C1 ⨁ P2, K),…
- Decryption
P0 = IV ⨁ D(C0, K),
P1 = C0 ⨁ D(C1, K),
P2 = C1 ⨁ D(C2, K),…
- 맨끝값만 사용하면 해싱(MAC 매시지인증코드) K에 키값이들어가면 메시지 인증 코드
아래 그림 출처
스트림 암호를 사용하는 구조 3개
- 아래 3개(OFB,CFB,CTR)은 CBC에서 나오는 암호문을 키스트림 제너레이터로 사용하여 스트림 암호처럼 사용하는 모드임.
- 암호화하는 식에서 E는 AES와 같은 블록 암호임
- 이 키스트림을 만들 때 키 값과 iv값을 넣어서 키를 재생성 함.
OFB(Output Feedback) mode
- : 이전 블록 암호의 출력이 다시 블록암호의 입력으로들어가서 키스트림 만들기
- 동기식(피드백) 스트림 암호 구성에 활용
- 블록 단위로 key stream 생성
- 암/복호화 과정
- 블록 암호의 암호문이 피드백 되는구조
- key stream chiper 구조와 동일
- 생성된 ki가 feedback 됨

CFB(Cipher Feedback) mode
- 비동기식 스트림 암호 구성에 이용
- 블록 단위로 key stream 생성
- 암/복호화 과정
- 최종 암호문이 피드백 되는 구조

CTR(Counter) mode
- : 암호문이 입력으로 들어가서 키스트림을 만든 후, x와 xor
- 스트림 암호처럼 사용
- 암/복호화 과정(동일)
- 𝑦𝑖 = 𝑥𝑖⨁𝐸𝐾(IV ∥ counter)
- IV 과 counter는 각각 8bytes, || : 연이어 붙인다는 기호
- 각각 카운터값을 너어서 각각 다른값생성
- 맨마지막은 그냥 Ek가 크게 출력되도 일부만사용해서 암호화 → 평문길이= 암호문길이
- IV값이 매 블록마다 1씩 증가함
- 장점
- 평문 길이 = 암호문 길이 -> stream 사용하는 애들 모두의 특징임
- 암/복호화 병렬 처리 가능 -> feedback 구조가 아니니까
- 암/복호화 식이 동일하므로 AES 모듈이 암호화만 수행할 수 있도록 함.

GCM (Galois Counter Mode)
- 메시지에 대한 암호학적 체크섬(메시지 인증 코드)를 계산함 (암호화 + 체크섬)
- 인증과 무결성 제공
- 암호화와 MAC(메시지 인증 코드) 생성
- GCM의 암호화는 CTR를 사용하여 암호화
- 암호화: 𝑦𝑖 = 𝐸k(𝐶𝑇𝑅𝑖) ⨁𝑥𝑖 (𝑖 ≥ 1)
- IV에서 𝐶𝑇𝑅0 유도
- 𝐶𝑇𝑅𝑖 = 𝐶𝑇𝑅(𝑖−1) = 𝐶𝑇𝑅0 + 𝑖 (𝑖 ≥ 1)
- MAC(Message Authentication Code) 생성: 𝑇 = (𝑔𝑛 × 𝐻)⨁𝐸𝐾(𝐶𝑇𝑅0)
- 𝐻 = 𝐸𝐾(0), 𝑔0 = 𝐴𝐴𝐷 × 𝐻, 𝑔𝑖 = 𝑔𝑖−1⨁𝑦𝑖 × 𝐻 1 ≤ 𝑖 ≤ 𝑛
- H : 평문, AAD : 상수값, T : 메시지 인증 코드
무결성 : 평문이 바뀌거나, 𝑦𝑖 중 한 비트라도 수정되면 𝑔𝑖가 바뀜→ 𝑇 달라짐
인증 : 수신한 𝑇 유효 → 송신자가 키(𝐾)를 가진 사람이라는 것 확인 가능
CCM Mode(CTR Mode with CBC Message Authentication Code mode)
- 암호화/메시지 인증 표준 : 무선 표준에서 주로 채택
보안
- 암호화 & 기밀성: CTR 모드를 이용
𝑉 ∥ 𝐶 = 𝐶𝑇𝑅k^𝐴0 (𝑈 ∥ 𝑀) where 𝐴0 = 𝑡𝑎𝑔 ∥ 𝑛𝑜𝑛𝑐𝑒 ∥ 𝑐𝑜𝑢𝑛𝑡𝑒r
- 인증 & 무결성: CBC-MAC 모드 이용
𝑈 = 𝐶𝐵𝐶k(𝐵) where 𝐵 = 𝑆𝑖𝑧𝑒 ∥ 𝑁𝑜𝑛𝑐𝑒 ∥ 𝐻𝑒𝑎𝑑𝑒𝑟 ∥ M
- 결과 : 𝐶 ∥ 𝑇 where 𝑇 = 𝑉[𝑓𝑖𝑟𝑠𝑡 𝜏 𝑏𝑦𝑡𝑒𝑠]
- counter은 계속해서 증가, A0 = IV, V= U를 암호화한 한 블록, C = M을 암호화한 여러 블록,
- U: CBC에서 맨 마지막 값만 취한것, Size = 블록의 사이즈, Header : 메시지 앞에 붙이는 것,
- T : V의 첫번째의 몇 바이트, C하고 V를 보내는데 다 보낼 필요는 없음. V는 나중에 인증 코드용으로 사용하는데 일부만 쪼개어 T로 만들어서 전송
- 인증코드는 무결성 용도 -> 처음 몇 바이트만 있어도 위조여부알 수 있음
장점
- 무결성 검증만 필요할 경우 암호화를 위한 오버헤드 없이 검증 수행 가능
- GCM 같은 경우에서도 인증코드 만드는 거에 x 연산이 필요하지만, CBC-MAC,CTR 그냥 블록 암호 그대로 사용함.
ㄴ-> 곱하기 연산이딴거 없이 여러개를 구현할 필요 없으니까 가벼워짐
- 동일한 모듈을 사용하여 암호화와 인증을 모두 수행
단점
- CBC-MAC의 경우 병렬 처리 불가능(CTR 모드는 가능)