사자자리
[암호학] 블록 암호: 운영 모드 본문
운영 모드(Mode of Operation)
- 블록 암호로 다양한 크기의 평문을 처리할 수 있도록 고안된 블록 암호의 사용 방법
- UTF-8로 인코딩할 때, DES는 8글자(64비트), AES는 16글자(128비트)를 한 번에 암호화할 수 있지만, 평문은 이 길이를 넘는 경우가 많기 때문이다.
- 운영 모드에는 여러 종류가 있으며, 블록 암호 서비스는 각각의 장단점을 고려하여 운영모드를 선택한다.
패딩(Padding)
- 평문에 데이터를 붙여서 평문의 크기가 블록 크기의 배수가 되도록 만드는 과정
- 블록 암호는 블록 단위로 암호화를 하므로 입력(평문)의 길이가 정확하게 블록 크기의 배수여야 하기 때문이다.
- 복호화된 평문에서 패딩을 제거해야 평문을 얻을 수 있으므로, 수신자는 어떤 패딩이 적용됐는지 알아야 한다.
비트 패딩(Bit Padding)
- 마지막 블록에서 평문이 채우지 못하는 비트 중 최상위 비트를 1로 설정하고, 나머지는 모두 0으로 채우는 패딩 기법
- 평문의 마지막 비트부터 왼쪽으로 이동하며 처음으로 값이 1인 비트가 나올 때까지를 패딩으로 인식하고, 이를 제거하여 평문을 복구할 수 있다.
- 평문의 크기가 블록 크기의 배수일 때, 평문의 일부를 패딩으로 오인하는 문제가 생길 수 있다.
- 이를 막기 위해 평문의 크기가 블록 크기의 배수일 때, 마지막에 패딩으로 한 블록을 추가한다.
바이트 패딩(Byte Padding) - ANSI X.923
- 바이트 패딩: 바이트 단위로 패딩을 수행하는 패딩 기법
- ANSI X.923: 마지막 블록의 남는 바이트를 임의의 값(일반적으로 0)으로 채우고, 마지막 바이트에 패딩의 길이를 기록하는 기법
- 평문의 크기가 블록 크기의 배수일 때, 평문의 일부를 패딩으로 오인하는 문제가 생길 수 있다.
- 이를 막기 위해 평문의 크기가 블록 크기의 배수일 때, 마지막에 패딩으로 한 블록을 추가한다.
바이트 패딩(Byte Padding) - PKCS#7
- PKCS(Public-Key Cryptography Standard): 공개키 암호의 표준 문서
- PKCS#7: PKCS의 7번째 문서. 추가할 패딩의 바이트 크기로 마지막 블록을 채우는 블록 암호의 패딩 기법.
- 평문의 크기가 블록 크기의 배수일 때, 평문의 일부를 패딩으로 오인하는 문제가 생길 수 있다.
- 이를 막기 위해 평문의 크기가 블록 크기의 배수일 때, 마지막에 패딩으로 한 블록을 추가한다.
운영 모드의 종류
ECB(Electronic Code Book) 모드
- 가장 간단한 운영모드
- 블록들은 모두 같은 키로 암호화된다.
- 장점: 각 블록이 독립적으로 암호화되므로 여러 블록을 병렬적으로 암호화할 수 있다.
- 단점: 다른 운영모드에 비해 암호학적 안전성이 부족하다.
ECB 모드의 취약점
- 같은 블록은 같은 암호문으로 암호화된다. → 약한 혼돈 성질
- 공격자는 암호문에서 평문의 정보를 습득하거나, 재전송 공격(Replay Attack)을 수행하는 것이 가능하다.
- 이미지의 한 픽셀을 한 블록으로 하여 ECB 암호화하면 같은 픽셀들은 모두 같은 픽셀로 암호화되므로, 원본 이미지의 패턴이 암호화된 이미지에도 그대로 나타난다. 이는 암호문으로부터 평문의 정보를 유추하기 어려워야 한다는 혼돈 성질이 약함을 의미한다.
재전송 공격(Replay Attack)
- 어떤 데이터를 재전송하여 시스템이 의도치 않은 행동을 하게 하는 것
- ECB 모드는 다음과 같은 방식으로 재전송 공격을 당할 수 있다.
1. Alice가 평문을 암호화해서 은행에 전송하고, 은행이 이를 해석해서 10000$를 Bob의 계좌로 송금한다.
2. 만약 Bob이 평문과 암호문을 알게 되면, Bob은 암호문의 '0d1v'가 평문의 '0000'을 암호화한 결과임을 알 수 있다.
3. Bob은 이를 이용하여 새로운 암호문을 생성하고 은행에 전송한다.
4. 은행은 Alice의 계좌에서 100000000$를 Bob의 계좌로 송금한다.
CBC(Cipher Block Chaining) 모드
- 어떤 블록을 암호화하기 전에, 이 블록을 직전 블록의 암호문과 XOR한다.
- 평문의 첫 번째 블록은 이전 블록이 존재하지 않으므로, 초기 벡터(Initialization Vector, IV)라고 불리는 임의의 데이터와 XOR한다.
- 각 블록이 서로의 암호화에 영향을 주므로, 같은 블록도 전체 평문 및 초기 벡터에 따라 암호화 결과가 달라진다.
- 암호화: 한 블록을 암호화할 때, 직전 블록의 암호화 결과를 사용하므로 병렬 처리 불가능
- 복호화: 모든 암호문 블록을 알고 있으므로 병렬 처리 가능
- 장점: 재전송 공격(Reply Attack)에 강하다. 높은 혼돈 성질. → 블록 암호의 운영 모드로 널리 사용된다.
초기 벡터(Initialization Vector, IV)
- 일반적으로 논스(Nonce, number used only once)라는 무작위 값을 사용
- 공격자가 초기 벡터를 알아도 안전성에 영향을 끼치지 않는다.
- 그러나 공격자가 암호문을 중간에 가로채서 이를 조작할 수 있으면, 복호화 결과의 첫 번째 블록을 조작할 수 있다.
- 따라서 CBC 모드를 사용할 때는 초기 벡터의 무결성을 함께 보장해야 한다.
CBC Bit-Flipping Attack
- 공격자가 초기 벡터를 원하는 값으로 조작하여 복호화된 평문의 첫 번째 블록을 조작하는 공격
CTR(Counter)모드
- 블록 암호에 임의의 난수(nonce)와 평문 블록의 인덱스(counter)를 결합한 값을 입력한다.
- 암호문은 블록 암호의 출력과 평문 블록을 XOR하여 생성한다.
- 장점: 블록을 순서대로 암복호화하지 않아도 되므로 병렬로 암복호화할 수 있으며, 구현이 간단하다.
|| : 두 바이트 배열을 결합하는 기호
마치며
- 위에서는 대표적인 운영 모드로 ECB, CBC, CTR만을 소개했다.
- 이 외에도 CTR과 유사한 CFB, OFB, 그리고 현재 네트워크 통신에서 많이 사용되고 있는 GCM 등 다양한 모드가 있다.
Q1. PKCS#7은 공개 키 암호의 패딩 표준을 정의하고 있다. [X]
Q2. CBC 모드를 사용하면 병렬적으로 암호화할 수 있으므로, 성능상 이점이 있다.[X]
Q3. CTR 모드에서 난수는 공개돼도 암호의 기밀성에 문제가 없다. [O]
Q4. CBC 모드에서 각 블록을 암호화할 때 사용되는 키는 이전 블록의 암호화 결과에 따라 달라진다. [X]
'Dreamhack > 암호학 Cryptography' 카테고리의 다른 글
[암호학] Diffie-Hellman 키 교환 알고리즘 (0) | 2022.08.13 |
---|---|
[암호학] 블록 암호: AES (0) | 2022.08.06 |
[암호학] 블록 암호: DES (0) | 2022.08.06 |
[암호학] 현대 암호 (0) | 2022.07.31 |
[암호학] 고전 암호 (0) | 2022.07.31 |