-
암호학 5주차 - 블록암호보안/CRYPTOGRAPHY 2024. 3. 16. 10:17
0. 서론
- DES와 AES 같은 블록 암호는 한 번에 한 블록의 평문을 암호화하기 위해 설계되었다.
- DES는 64비트. AES는 128비트의 평문을 한 블록으로 처리한다.
- UTF-8로 인코딩할 때 알파벳 한 글자는 8비트에 대응되므로 DES와 AES는 각각 8글자, 16글자를 한번에
암호화할 수 있다.
- 사용되는 평문의 길이가 이 길이를 넘는 경우 운영 모드는 블록 암호로 다양한 크기의 데이터를 처리할 수 있도록 했다.
1. 패딩
: 평문에 데이터를 붙여서 평문의 크기가 블록 크기의 배수가 되도록 만드는 과정
- 평문의 크기가 블록 크기의 배수가 되지 않을 때 사용
- 패딩한 암호문 복호화: 복호화된 평문에서 패딩을 제거한다.
패딩된 암호문의 수신자는 어떤 패딩이 적용됐는지 알아야 암호문을 제대로 복호화 가능
- 주로 사용되는 패딩 기법: 비트 패딩, 바이트 패딩, PKCS#7
- 비트 패딩(Bit Padding)
: 마지막 블록에서 평문이 채우지 못하는 비트 중 최상위 비트를 1로 설정하고 나머지는 모두 0으로 채우는 패딩 기법
- 수신자는 평문의 마지막 비트부터 처음으로 값이 1인 비트가 나올 때까지를 패딩으로 인식, 제거해서 평문 복구
- 평문의 크기가 정확하게 블록 크기의 배수일 때 수신자가 메세지의 일부를 패딩으로 오인하는 문제 발생
--> 비트 패딩 적용 시 평문의 크기가 블록 크기의 배수이면 패딩으로 한 블록을 추가한다.
ex. 평문이 1011 1011 1111 1000 이다. 수신자는 1000을 패딩이라고 생각해 제거할 수 있으므로
∣1011 1011 1111 1000 ∣ 1000 0000 0000 0000 ∣
로 수정해야 평문을 오류 없이 복호화할 수 있다.
- 바이트 패딩
: 바이트 단위로 패딩을 수행하는 패딩 기법
- 바이트 패딩: ANSI X. 923
- ANSI X. 923: 마지막 블록의 남는 바이트를 임의의 값(일반적으로 0)으로 채우고
마지막 바이트에 패딩의 길이를 기록하는 기법
- 비트 패딩과 마찬가지로 평문 크기가 블록 크기의 배수일 때 수신자가 평문을 패딩으로 오인할 수 있다.
- 평문의 크기가 블록 크기의 배수일 때 마지막에 한 블록을 패딩으로 추가한다.
- 바이트 패딩: PKCS#7
- PKCS(Public-Key Cryptography Standard): 공개키 암호의 표준 문서
- PKCS#7: PKCS의 7번째 문서로 AES와 같은 블록 암호의 패딩 기법을 제시
추가할 패딩의 바이트 크기로 마지막 블록을 채우는 패딩 기법
- 다른 패딩 기법들과 마찬가지로 평문의 크기가 블록 크기의 배수이면 0808080808080808
을 패딩으로 추가한다.
2. 운영모드
평문은 패딩을 거친 뒤 여러 블록으로 나뉘고 각각의 블록은 블록 암호의 운영 모드에 따라 암호화된다.
- ECB (Electronic Code Book) 모드
: 가장 간단한 운영모드로 블록들은 모두 같은 키로 암호화된다.
- 장점: 각 블록이 독립적으로 암호화되므로 여러 블록을 병렬적으로 암호화할 수 있다.
- 단점: 다른 운영모드에 비해 암호학적 안전성이 부족하다.
- ECB 모드의 취약점
1. 약한 혼돈 성질
- 같은 블록은 같은 암호문으로 암호화된다.
- 이를 이용해 암호문에서 평문의 정보 습득/ 리플레이 공격 수행이 가능해진다.
- 이미지의 한 픽셀을 한 블록으로 ECB암호화하면 같은 픽셀은 모두 같은 픽셀로 암호화된다.
원본 이미지의 패턴이 암호화된 이미지에도 나타니기 때문에 암호문으로부터 평문의 정보를
유추할 수 있다.
2. 재전송 공격 (Replay Attack)
: 어떤 데이터를 재전송하여 시스템이 의도치 않은 행동을 하게 하는 것
- ECB 모드에서의 재전송 공격
ex. alice 가 'alice sent 10000$ to Bob'이라는 24바이트 평문을 4바이트 블록 암호로 암호화하여
은행에 보내면 은행이 해석하고 Bob에게 송금한다고 하자.
Bob이 alice의 평문과 암호문을 안다면 더 많은 돈을 송금하게 할 수 있다.
- CBC (Cipher Block Chaining) 모드
: 어떤 블록을 암호화하기 전에 이 블록을 직전 블록의 암호문과 xor한다.
- 평문의 첫 번째 블록은 초기 벡터(Initialization Vector, IV)라고 불리는 임의의 데이터와 xor 한다.
- 초기 벡터는 논스(Nonce, number used only once)라는 무작위 값 사용한다.
--> 공격자가 알아도 안전성에 영향 X
--> 만약 공격자가 암호문을 가로채서 조작할 수 있으면 복호화 결과의 첫 번째 블록을 조작할 수 있다.
--- > CBC 모드를 사용할 때 초기 벡터의 무결성을 보장해야 한다.
- 이 모드를 사용하면 각 블록이 서로의 암호화에 영향을 주므로 같은 블록도 전체 평문 및 IV에 따라
암호화 결과가 달라진다.
- 송신자의 초기 벡터를 C_0이라 할 때
암호화: C0=IV,Ci=Ek(Pi⨁Ci−1),i≥1
복호화: C0=IV, , Pi=Dk(Ci)⨁Ci−1,i≥1
- 암호화할 때 직전 블록의 암호화 결과를 사용하므로 여러 블록을 병렬적으로 암호화할 수 없다.
- 복호화할 때 모든 암호문 블록을 알고 있어서 병렬적으로 처리할 수 있다.
- 장점: 재전송 공격에 강하고 높은 혼돈성을 가지고 있어서 블록 암호의 운영 모드로 잘 사용된다.
- CBC Bit-Flipping Attack
: 공격자가 초기 벡터를 원하는 값으로 조작하여 복호화된 평문의 첫 번째 블록을 조작하는 공격
- 첫번째 암호문 블록의 복호화 과정: P1=Dk(C1)⨁IV
- 공격자는 초기 벡터를 IV′=P1⨁P1′⨁IV로 조작해서 첫 번째 평문 블록을 P1′ 으로 조작할 수 있다.
Dk(C1)⨁IV′=(P1⨁IV)⨁IV′
=(P1⨁IV)⨁P1⨁P1′⨁IV
=P1′
- CTR모드
: 블록 암호에 nonce와 평문 블록의 인덱스(counter)를 결합한 값을 입력한다.
- 암호문은 블록 암호의 출력과 평문 블록을 xor하여 생성한다.
- CTR모드의 암호화, 복호화, || 는 두 바이트 배열을 결합하는 기호
암호화:Pi⨁Ek(nonce∣∣counter)
복호화: Ci⨁Ek(nonce∣∣counter)
- 장점: 블록을 순서대로 암복호화하지 않아도 되므로 별렬로 암복호화할 수 있고
구현이 간단하다.
'보안 > CRYPTOGRAPHY' 카테고리의 다른 글
암호학 6주차 - RSA (5) 2024.03.16 암호학 6주차 - Diffie-Hellman 알고리즘 (0) 2024.03.16 암호학 5주차 - DES (0) 2024.03.15 암호학 5주차 - AES (1) 2024.03.15 암호학 4주차 - 현대 암호 (0) 2024.03.15