암호학적 기본 요소
암호학에서 두 가지 주요 범주로 나눠볼 수 있다:
- 대칭 암호(Symmetric Cryptography): 하나의 키를 사용하는 방식.
- 비대칭 암호(Asymmetric Cryptography): 공개키와 비밀키 두 개의 키를 사용하는 방식.
1. 기밀성 (Confidentiality):
- 데이터를 보호하여 허가되지 않은 사용자가 접근하지 못하게 보장하는 기능.
- 대칭 암호:
- 프라이빗 키 암호화 (Private-key encryption).
- 예: AES(Advanced Encryption Standard).
- 비대칭 암호:
- 공개키 암호화 (Public-key encryption).
- 예: RSA-OAEP(RSA Optimal Asymmetric Encryption Padding).
2. 무결성 (Integrity):
- 데이터가 전송 중에 변조되지 않았음을 보장하는 기능.
- 대칭 암호:
- 메시지 인증 코드(MAC):
- 특정 알고리즘으로 데이터와 키를 조합하여 인증 태그 생성.
- 메시지 인증 코드(MAC):
- 비대칭 암호:
- 디지털 서명 (Digital Signature):
- 송신자가 보낸 데이터의 신뢰성을 보장.
- 예: RSA-PSS(RSA Probabilistic Signature Scheme).
- 디지털 서명 (Digital Signature):
메시지 인증 코드 (MAC)
1. MAC 정의:
- 암호학에서 메시지 인증 코드(MAC)는 메시지를 인증하고 무결성 및 진위 여부를 보장하기 위해 사용되는 짧은 정보 조각이다.
- 무결성 보장(integrity):
- 메시지의 우발적 또는 의도적 변경을 감지.
- 진위성 보장:
- 메시지가 올바른 출처에서 왔는지 확인.
2. MAC 기능 (MAC Functionality):
- MAC 알고리즘:
- 키 기반 암호 해시 함수(keyed cryptographic hash function)를 사용하거나 이를 포함한 다양한 방식으로 MAC을 생성할 수 있음.
- 입력값:
- 비밀 키(secret key).
- 인증할 임의 길이의 메시지.
- 출력값:
- MAC 값(tag): 메시지와 연결된 인증 코드.
- 보호 기능:
- 데이터 무결성: 메시지가 수정되지 않았음을 보장.
- 진위 확인:
- 비밀 키를 가진 검증자가 메시지의 변경 여부를 확인 가능.
3. MAC의 주요 역할:
- 메시지 전달 중 데이터 변조를 방지.
- 키를 알고 있는 송신자와 수신자만 메시지의 진위 여부를 확인 가능.
MAC
1. 알고리즘 (Algorithms)
MAC은 세 가지 주요 단계로 구성됩니다:
- 키 생성 알고리즘 (Key Generation Algorithm):
- 비밀 키 를 생성하여 송신자와 수신자 간에 공유한다.
- 태그 생성 알고리즘 (Tag-Generation Algorithm):
- 메시지 M과 키 K를 입력으로 받아 MAC 태그 T를 생성한다.
- 수식: T=MAC(K,M)
- 검증 알고리즘 (Verification Algorithm):
- 수신자가 K, M, T를 사용하여 태그 T가 유효한지 확인한다.
- 수식: Vrfy(K,M,T)=1/0
2. 보안 (Security)
MAC 함수가 안전하려면 다음 조건을 충족해야 한다:
- 선택 평문 공격(Chosen-Plaintext Attacks)에 대한 내성:
- 공격자가 비밀 키를 보유한 오라클(검증자)에게 접근해 자신이 선택한 메시지로부터 MAC 값을 생성했다고 하더라도, 다른 메시지의 MAC 값을 예측할 수 없어야 한다.
- 즉, 공격자가 무차별 대입(brute force) 없이 유효한 MAC을 위조할 수 없어야 한다.
3. 구현 (Implementation)
MAC 알고리즘은 다양한 암호학적 원리를 기반으로 구현할 수 있다:
- 암호 해시 함수(Cryptographic Hash Functions):
- 예: HMAC(Hash-based Message Authentication Code).
- 블록 암호(Block Ciphers):
- 예: CMAC(Cipher-based Message Authentication Code).
Length Extension Attack (길이 확장 공격)
1. 정의:
- 길이 확장 공격은 암호학 및 컴퓨터 보안에서 발생하는 공격 유형으로, 공격자가 Hash(message₁) 값과 message₁의 길이를 사용하여, 실제로 message₁의 내용을 알지 못하더라도 Hash(message₁ ‖ message₂) 값을 계산할 수 있는 공격.
- 여기서 ‖는 문자열 연결(Concatenation)을 의미.
- 공격자는 자신이 제어할 수 있는 message2를 추가로 연결해 해시 값을 계산.
2. 취약성:
- Merkle–Damgård 구조를 기반으로 설계된 해시 알고리즘들은 이러한 공격에 취약하다.
- 예: MD5, SHA-1, SHA-2.
- 이들 해시 함수는 내부적으로 초기 값(initial value)와 메시지 블록을 반복적으로 처리하는 방식으로 동작하기 때문에, 해시 값과 메시지 길이 정보만으로 새로운 연결된 메시지의 해시를 계산할 수 있다.
3. 안전한 알고리즘:
- SHA-3 알고리즘은 이 공격에 안전하다!!!
- SHA-3는 Merkle–Damgård 구조를 사용하지 않고, 대신 Sponge 구조를 사용하여 설계되었다.
- 따라서 길이 확장 공격이 불가능하다.
4. 작동 방식 (그림 설명):
- 그림은 Merkle–Damgård 구조의 작동 방식을 나타낸다:
- 초기 값 IV를 시작으로 첫 메시지 블록을 처리.
- 이전 출력 값(CV)을 다음 메시지 블록에 입력으로 사용.
- 마지막 메시지 블록까지 이 과정을 반복하여 최종 해시 값을 생성.
- 공격자는 CVL를 사용해 추가된 message2를 포함한 새로운 해시 값을 계산할 수 있다.
5. 대응 방법:
- 길이 확장 공격을 방지하려면 다음을 고려해야 한다:
- HMAC(Hash-based Message Authentication Code)를 사용:
- 키를 추가하여 해시 계산에 포함시키므로 공격자가 이를 악용하지 못하도록 함.
- SHA-3 또는 Sponge 구조 기반의 최신 해시 알고리즘 사용.
- HMAC(Hash-based Message Authentication Code)를 사용:
HMAC (Hash-based Message Authentication Code)
1. 정의:
- HMAC은 암호 해시 함수(예: SHA-2, SHA-3)를 기반으로 메시지의 인증 코드(MAC)를 생성하는 방식.
- 사용된 해시 함수에 따라 HMAC-X로 표현된다.
- 예: HMAC-SHA256, HMAC-SHA3-256 등.
2. 작동 방식:
HMAC은 두 단계의 해시 과정을 통해 동작:
- 첫 번째 단계:
- 비밀 키(secret key)를 사용하여 두 개의 키(inner와 outer)를 생성.
- 메시지와 inner 키를 결합한 내부 해시 값을 생성.
- 두 번째 단계:
- 첫 번째 단계에서 생성된 내부 해시 값과 outer 키를 결합하여 최종 HMAC 값을 생성.
3. 특징:
- 길이 확장 공격(Length Extension Attack)에 대한 내성을 제공합니다.
- HMAC 알고리즘은 키를 해시 과정에 포함시키기 때문에 공격자가 단순히 기존 해시 값을 확장하여 새로운 값을 계산할 수 없습니다.
4. 사용 예:
- HMAC-SHA256:
- SHA-256 해시 함수를 기반으로 HMAC을 구현.
- HMAC-SHA3-256:
- SHA-3 해시 함수를 기반으로 HMAC을 구현.
5. 장점:
- 데이터 무결성과 인증을 보장.
- 해시 함수의 강점과 키 기반 인증의 조합으로 높은 보안을 제공.
HMAC의 정의 (RFC 2104)
1. 공식 정의:
HMAC 계산은 다음 수식을 기반으로 한다:
HMAC(K,M)=H((K′⊕opad)∥H((K′⊕ipad)∥M))
- H: 암호 해시 함수(예: SHA-256, MD5).
- K: 비밀 키.
- K′: 블록 크기에 맞게 조정된 키.
- K가 블록 크기보다 짧으면 0으로 패딩(padding).
- K가 블록 크기보다 길면 H(K)를 사용.
- M: 인증할 메시지.
- ∥: 연결(Concatenation).
- : XOR 연산.
2. 패딩 정의:
- K′:
- K를 블록 크기에 맞게 오른쪽에 0을 추가하여 패딩하거나,
- K가 블록 크기보다 길면 K의 해시 를 사용.
- :
- 외부 패딩 상수(0x5c5c…5c, 블록 크기만큼의 값).
- :
- 내부 패딩 상수(0x3636…36, 블록 크기만큼의 값).
3. 비고 (예시 블록 크기):
- MD5, SHA-1, SHA-224, SHA-256:
- 블록 크기 = 64 바이트 (512 비트)
4. HMAC-SHA1
SHA-3 vs. HMAC
- SHA-3 (Keccak 해시 함수):
- Keccak 해시 함수는 NIST의 SHA-3 대회에서 선정된 알고리즘.
- SHA-3는 HMAC에서 사용하는 중첩 접근 방식(nested approach)이 필요하지 않는다.
- 키를 메시지 앞에 단순히 추가(prepending)하는 것만으로 MAC(Message Authentication Code)을 생성할 수 있다.
- HMAC:
- HMAC은 기존의 SHA-1, SHA-2 등 Merkle-Damgård 구조 기반 해시 함수의 안전성을 강화하기 위해 설계된 MAC 알고리즘.
- SHA-3는 자체적으로 Sponge 구조를 사용하기 때문에 별도의 보강(HMAC 구조)이 필요하지 않는다.
주요 차이점:
- 구조적 차이:
- HMAC은 내부 및 외부 패딩(IPAD/OPAD)을 사용하여 두 번의 해시 연산이 필요.
- SHA-3는 Sponge 구조를 사용하므로 간단한 방식으로 MAC을 생성할 수 있다.
- 복잡성:
- HMAC은 추가 연산이 필요하므로 SHA-3에 비해 다소 복잡.
CBC-MAC (Cipher Block Chaining MAC)
1. 정의:
- CBC-MAC은 메시지 MM의 인증 코드를 계산하는 방법으로, 메시지를 CBC 모드로 암호화하여 최종 블록을 MAC으로 사용.
- 초기 벡터(IV)는 항상 0으로 설정.
2. 보안 특성:
- 고정된 길이 메시지:
- CBC-MAC은 고정된 길이의 메시지에 대해서는 안전.
- 블록 암호가 안전(예: 의사 난수 순열)하다면 CBC-MAC도 안전.
- 가변 길이 메시지:
- CBC-MAC은 가변 길이 메시지에 대해 안전하지 않다.
- 공격자가 길이를 조작해 MAC을 위조할 가능성이 있다
CMAC (Cipher-based MAC)
1. 정의:
- CMAC은 CBC-MAC의 변형된 알고리즘으로, CBC-MAC의 보안 결함(특히 가변 길이 메시지에 대한 취약성)을 해결하기 위해 설계되었다.
- 이 알고리즘은 Black과 Rogaway가 XCBC라는 이름으로 제안하고 분석한 뒤, NIST에 제출되었다.
2. 특징:
- CBC-MAC은 고정 길이 메시지에 대해서만 안전하지만, CMAC은 가변 길이 메시지에서도 안전성을 제공한다.
- CMAC은 CBC-MAC의 구조를 기반으로 하지만, 추가적인 키와 처리를 통해 보안 강화를 구현한다.
3. 작동 방식:
CMAC은 두 개의 키를 추가로 사용하여 가변 길이 메시지를 처리할 때 발생할 수 있는 보안 문제를 방지한다:
- 마지막 메시지 블록 처리:
- 메시지의 마지막 블록이 완전한 경우(블록 크기와 동일), 첫 번째 키 K1을 사용한다.
- 그렇지 않다면(블록이 부족하면), 패딩 후 두 번째 키 K2를 사용합니다.
- CBC-MAC 연산:
- 나머지 과정은 CBC-MAC와 유사.
4. 장점:
- CBC-MAC의 단점인 가변 길이 메시지에 대한 취약성을 해결.
- 간단한 방식으로 보안성을 유지하면서 기존 CBC-MAC 알고리즘과 호환성을 제공.
2. 구성 요소 설명
- T: 메시지 인증 코드 (MAC, 태그).
- Tlen: MAC TT의 비트 길이.
- MSBs(X): 비트 문자열 X의 상위 ss 비트.
- K1:
- 메시지의 마지막 블록이 블록 크기와 일치하는지 여부에 따라 또는 사용.
3. 패딩 규칙
- 메시지 M의 마지막 블록이 블록 크기의 배수가 아닐 경우:
- 마지막 블록의 오른쪽에 1 비트를 추가하고, 블록 크기가 될 때까지 0으로 채움.
- 이후, K1 대신 를 사용하여 처리.
주요 특징
- CMAC은 CBC-MAC의 보안 결함을 해결하며, 가변 길이 메시지에서도 안전하게 동작한다.
- 마지막 블록에서 또는 를 사용하는 추가 XOR 연산을 통해 위조 공격을 방지한다.
CMAC 키 생성
1. 두 개의 키 (K1,) 생성 공식
- 1단계: L 계산
- L=E(K,0n)
- 여기서:
- K: 암호화 키.
- 0^n: nn-비트 길이의 0으로만 구성된 입력.
- E: 블록 암호화 함수.
- 은 를 사용해 암호화된 0^n의 출력 값.
- 2단계: K1, 계산
- K1=L⋅x
- K2=L⋅x2=(L⋅x)⋅x
- 여기서:
- ⋅\cdot: GF(2n)GF(2^n)에서의 곱셈.
- :GF(2^n)에서 정의된 일차 다항식.
2. 유한체 GF(2^n)에서의 곱셈
- GF(2^n)에서 곱셈은 다항식 곱셈으로 정의되며, 필요한 경우 선택된 불가약 다항식(irreduciable polynomial*을 사용해 결과를 축소.
- 의 이진 표현:
- x: n−2개의 0 뒤에 10.
- x^2: n−3개의 0 뒤에 .
3. 사용되는 불가약 다항식
- 블록 크기에 따라 다른 불가약 다항식을 사용:
- n=64n :
- 다항식: x^64+x^4+x^3+x+1.
- n=128:
- 다항식: x^{128} + x^7 + x^2 + x + 1
- n=64n :
4. 요약
- K1,K2는 GF(2^n)의 연산을 기반으로 하며, 이를 통해 CMAC이 메시지 길이와 상관없이 안정적인 인증 코드를 생성할 수 있다.
Authenticated Encryption (AE)
1. 정의
- Authenticated Encryption은 기밀성(confidentiality)과 무결성(integrity), 그리고 진위(authenticity)를 동시에 제공하는 암호화 시스템.
- 기밀성: 메시지가 암호화되어 내용이 보호됨.
- 무결성 및 진위: 데이터가 변조되지 않았으며, 출처가 신뢰할 수 있음을 확인.
2. 작동 모드 (Mode of Operation)
AE를 구현하기 위해 두 가지 주요 모드가 사용됩니다:
- CCM (Counter with CBC-MAC):
- CTR(Counter) 모드를 사용하여 데이터를 암호화.
- CBC-MAC를 사용하여 데이터의 무결성과 인증을 보장.
- 주로 성능과 보안을 모두 고려한 환경에서 사용됨.
- GCM (Galois/Counter Mode):
- CTR 모드로 데이터를 암호화.
- Galois 필드를 사용하여 인증 태그를 생성.
- 매우 빠른 처리 속도로 네트워크 및 고성능 애플리케이션에서 자주 사용.
주요 특징
- AE는 전송 중인 데이터의 기밀성과 무결성을 동시에 보장하므로, 단순한 암호화보다 더 높은 보안성을 제공.
- 일반적으로 네트워크 보안 프로토콜(예: TLS/HTTPS) 및 데이터 저장에 사용.
CCM (Counter with CBC-MAC)
1. 작동 방식
- CCM은 CBC-MAC와 CTR(카운터) 모드 암호화를 결합한 방식입니다.
- 작동 과정:
- 메시지에 대해 CBC-MAC을 계산하여 인증 태그(tag)를 생성합니다.
- 생성된 태그와 메시지를 CTR 모드를 사용하여 암호화합니다.
2. 활용 분야
- CCM 모드는 다음과 같은 표준에서 사용됩니다:
- IEEE 802.11i (CCMP: WPA2 암호화 알고리즘).
- IPsec.
- Bluetooth Low Energy.
- TLS.
GCM (Galois/Counter Mode)
1. 작동 방식
- GCM은 CTR(카운터) 모드와 Galois 필드 기반 인증을 결합한 방식입니다.
- 주요 특징:
- 병렬 처리에 최적화되어 높은 성능을 제공합니다.
- 암호화와 인증을 효율적으로 수행합니다.
2. 활용 분야
- GCM 모드는 다음과 같은 표준에서 사용됩니다:
- IEEE 802.1AE (MACsec: 이더넷 보안).
- IEEE 802.11ad (WiGig: 고속 무선 통신).
- IPsec, SSH, TLS 1.2.
- Fibre Channel Security Protocols (FC-SP).
- IEEE P1619.1 (테이프 저장소).
차이점 요약
특성CCMGCM
처리 성능 | 병렬 처리가 어려움 | 병렬 처리에 최적화 |
구조 | CBC-MAC + CTR 모드 | CTR 모드 + Galois 인증 |
활용 분야 | WPA2, IPsec, Bluetooth 등 | TLS 1.2, SSH, MACsec 등 |
CCM