패딩과 운영모드
패딩 : 평문에 데이터를 붙여서 평문의 크기가 블록 크기의 배수가 되도록 만드는 과정
1. 비트패딩
- 마지막 블록에서 평문이 채우지 못하는 비트 중 쵱상위 비트를 1로 설정하고 나머지는 모두 0으로 채우는 패딩 기법
∣ 1011 1011 1111 0111 ∣ 1011 0110 1000 0000∣
**평문의 크기가 블록 크기의 배수일 때: 1000 0000 0000 0000 를 패딩으로 추가.
2. 바이트 패딩
-바이트 단위로 패딩을 수행하는 패딩 기법
대표적: ASNI X.923 : 마지막 블록의 남는 바이트를 임의의 값 (0)으로 채우고 마지막 바이트에 패딩의 길이를 기록하는 기법)
A3 B2 91 81 50 23 00 00 ∣ 14 50 00 00 00 00 00 04
--> 마지막 바이트가 4라서 맨 뒤의 4 바이트가 패딩이 된 것을 알 수 있음.
**평문의 크기가 블록 크기의 배수일 때: 00 00 00 00 00 00 00 0F 를 패딩으로 추가.
3. PKCS#7패딩
추가할 패딩의 바이트 크리고 마지막 블록을 채우는 패딩 기법
A3 B2 91 81 50 23 00 00 ∣ 14 50 00 00 04 04 04 04
**평문의 크기가 블록 크기의 배수일 때: 08 08 08 08 08 08 08 08 를 패딩으로 추가.
평문은 패딩을 거친 뒤 여러 블록으로 나뉜 후 각각의 블록은 블록암호의 운영 모드에 따라 암호화됨.
1. ECB(Electronic Code Book)
블록들은 모두 같은 키로 암호화됨 --> 다른 운영모드에 비해 암호학적 안전성이 부족함.
패턴이 보임 --> 혼돈 성질이 약함
2. CBC(Cipher Block Chaining)
어떤 블록을 아호화하기 전에, 이 블록을 직전 블록의 암호문과 XOR한다.
첫 번째 블록은 이전 블록이 존재하지 않아서 초기벡터를 필요로 함
초기 벡터는 일반적으로 논스(Nonce, number used only once)라는 무작위 값을 사용하며, 이는 공격자가 알아도 안전성에 영향을 끼치지 않음.
그러나 만약 공격자가 암호문을 중간에 가로채서 이를 조작할 수 있으면, 복호화 결과의 첫 번째 블록을 조작할 수 있습니다. -->따라서 CBC 모드를 사용할 때는 초기 벡터의 무결성을 함께 보장해야 함.
3. CTR모드(counter)
블록 암호에 nonce와 평문 블록의 인덱스(counter)를 결합한 값을 입력
암호문은 블록 암호의 출력과 평문 블록을 XOR하여 생성