Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 오블완
- 겨울 부산
- VARCHAR (1)
- PersistenceContext
- taint
- 코루틴 컨텍스트
- 코루틴 빌더
- tolerated
- 달인막창
- JanusWebRTCGateway
- 자원부족
- JanusWebRTC
- mp4fpsmod
- 깡돼후
- PytestPluginManager
- Value too long for column
- vfr video
- table not found
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- python
- preemption #
- terminal
- 티스토리챌린지
- JanusGateway
- kotlin
- pytest
- Spring Batch
- JanusWebRTCServer
- addhooks
- 개성국밥
Archives
너와 나의 스토리
[컴퓨터 보안] Message Authentication Code / HMAC(Hash MAC) / CMAC(Cipher-based MAC) / Authenticated Encryption(CCM/GCM) 본문
Computer Security
[컴퓨터 보안] Message Authentication Code / HMAC(Hash MAC) / CMAC(Cipher-based MAC) / Authenticated Encryption(CCM/GCM)
노는게제일좋아! 2020. 12. 4. 18:23반응형
Message Authentication Code
- 다음의 공격들을 예방한다.
- Masquerade(다른 사람으로 가장해서 작업) -> Authentication 필요
- 내용 변조, 순서 변경, 시간 값 변조 -> Integrity 필요
- MAC(Message Authentication Code): Authentication과 Integrity를 동시에 제공하는 것
- 메시지와 key가 함수에 들어감.
- MAC = Keyed Hash
MAC 사용 - 3가지 방법
- 목적: Message Authentication
- M: 메시지 원본, K: Key
- 송신: [M + MAC(K, M)]를 송신 -> 원본 메시지에 key를 넣은 MAC을 붙여서 전송하는 것
- 수신: 자기가 가지고 있는 key를 가지고, MAC을 생성해보고, 수신한 것과 결과가 같은지 비교함으로써 Authentication
- 목적: Message Authentication and Confidentiality
- K1: MAC용 key, K2: Encryption을 위한 key
- Plaintext에 Authentication 하는 방법
- K1을 이용해 MAC을 생성 후, M에 붙인다 (M+MAC(K1, M)) -> output 1
- output 1을 K2를 이용해 Encryption 한다. -> output2
- output2를 전송한다.
- 수신자는 K2로 먼저 Decryption 한다 -> output 1
- output 1의 M과 K1을 가지고 MAC을 생성한다.
- 이 MAC 값과 output 1에 붙여져 있는 MAC 값을 비교한다.
- Ciphertext에 Authentication 하는 방법
- M을 K2를 이용해 Encryption 한다.
- 그 결과에 K1 이용해 MAC을 생성하여 붙인다. -> output 1
- 수신자는 output 1의 E(K2, M)을 K2를 이용해 Decryption 하여 M를 얻는다.
- output 1에 붙어있는 MAC과 E(K2, M)을 기반으로 자신이 생성한 MAC과 비교한다.
MACs Based on Hash Function: HMAC
- Cryptographic hash function으로부터 MAC을 생성하는 방법
- "MD4, SHA같은 hash function이 DES같은 symmetric block cipher보다 빠르다"라는 동기로 HMAC을 사용하게 됨
- IP security의 MAC 위해서 주로 HMAC을 사용한다.
- hash를 2번 사용
- ipad, opad는 처음부터 정해진 값
Cipher-based MAC: CMAC
- DAA(Data Authentication Algorithm)으로부터 CMAC 만들어짐.
- DAC
- initial vector 없는 CBC mode라고 생각하면 된다.
- 아래 chain의 결과물을 DAC(Data Authentication Code)라고 한다.
- 문제: 공격이 가능함.
- X: plaintext
- X가 한 블록 짜리라고 하자. 그러면 initial vector를 안 넣으니까, 결국은 K(key)를 가지고 Encryption 한 번 한 것과 같다.
- 공격자가 MAC을 만드는 방법 -> MAC의 요구조건에 맞지 않음(불안전)
- 공격자가 한 블록짜리 메시지 쌍을 보고 (X, T)
- 두 블록을 만든다 -> 한 블록은 X, 다음 블록은 (X xor T)
- 이렇게 Mac을 돌리면 여전히 T가 나온다.
- MAC(K, X) = T -> MAC(K || (X xor T)) = T
- 이러한 문제를 해결하기 위해서 나온 게 CMAC이다.
- 똑같이 initial vector 없고 피드백해서 진행하다가, 마지막 block에서 또 다른 key를 넣어 xor 한다.
- DAC: $Block_{n-1}$ xor $Block_n$ 에다가 또 다른 key(K1)을 추가
- => $Block_{n-1}$ xor $Block_n$ xor K1
- 이를 통해, 앞에 언급된 공격이 불가능해진다.
- 똑같이 initial vector 없고 피드백해서 진행하다가, 마지막 block에서 또 다른 key를 넣어 xor 한다.
Authenticated Encryption(AE)
- Confidentiality와 Authenticity를 동시에 지키는 암호 시스템
- 방법:
- encryption하고 hash 하겠다 -> 안전성 보장되지 않음
- Authentication followed by encryption -> Encryption 하고 MAC 하기
- Encryption followed by authentication -> MAC하고 Encryption 하기
- Encryption 따로, MAC 따로 하기
Counter with Cipher Block Chaining-Mesage Authentication Code(CCM)
- Counter mode로 Encryption하고 CBC mode로 MAC 함. -> Encryption과 MAC을 독립적으로 연산 (counter로 연관관계 줌)
- 무선 랜에 보안을 추가하기 위해 나온 NIST 표준
- Key algorithmic ingredients:
- AES encryption algorithm
- CTR mode of operation
- CMAC authentication alogirthm
- 하나의 Key로 encryption과 MAC 알고리즘 둘 다에서 사용함.
CCM encryption (Encryption & MAC)
- Authentication -> CMAC
- Encryption -> Counter
- CMAC, CTR 각각 plaintext를 받아 독립적으로 연산을 수행 후, 나중에 합친다.
- CMAC을 거쳐서 나온 결과와 Encryption 한 결과는 XOR 함.
- 그리고 CTR mode와 두 연산 합치는 부분에서 각각 counter 값이 사용되는데, 이것들의 연관관계를 통해 의존성을 부여한다.
- 어떤 내용을 숨기면서 Integirty와 Authentication을 보장할 것.
- Authentication 하면서 Encryption 할 데이터
- 예: payload 할 데이터
- Encryption 안 하고 없고 Authentication만 할 데이터 -> Associated data
- 예: Header의 IP address
- 데이터가 어디서 왔는지 알아야 하니까 암호화할 필요는 없지만, 변조되면 안 되니 인증이 필요한 데이터
- 예: Header의 IP address
- nonce
- replay 공격을 막아야 하는 데이터
- 매번 nonce 값을 바꿔서 보냄 -> 데이터가 복제돼도 nonce 값이 과거와 같으면 잘못된 데이터임을 확인할 수 있음.
Galois/Counter Mode (GCM)
- CCM의 성능상 문제
- 병렬화가 불가능
- CTR modes는 병렬화 가능하지만 CCM은 못 함. -> CMAC 결과받아서 연산해야 해서
- 병렬화가 불가능
- Galois/Counter Mode에서는 병렬화가 가능하다.
- Encyption은 똑같이 CTR mode 사용함.
- 이렇게 해서 나온 Ciphertext에다가 key material을 이용해 authenticator tag를 만듦
- CCM은 Encryption과 Authentication을 따로 진행하지만, Galois는 Encryption을 먼저 하고 거기에 tag 붙이는 방식.
- Encryption 빼고 MAC만 하도록 쓸 수도 있다. -> GMAC
- Authentciation에서 Galois field(GF) 사용한다.
- GCM은 두 가지 함수를 사용한다:
- MAC: GHASH - keyed hash function 사용
- Encryption: GCTR - CTR mode를 약간 바꾼 것. 연산을 한 번씩 할 때마다, 값이 하나씩 증가하는 값을 사용
GHASH
- H = E(K, $O^{128}$) -> key가 정해지면 hash 값 정해짐
- GF($2^{128}$ 사용함 -> plaintext 표현할 때, 127차까지 사용 가능함
- 아래 그림 (a)를 보면, tag($Y_m$)를 출력하기 위해, feedback을 계속 받아가며 연산을 해나간다. -> 그럼 병렬화가 안 되는 거 아닌가?
- CBC mode에서는 매번 feedback을 받은 것과 key를 입력받아 encryption algorithm을 돌렸는데, GHASH는 단순히 key의 hash 값과 곱하기 연산을 수행한다.
- 곱하기 연산이기 때문에, 그림에 작성된 식처럼 풀어서 식을 작성할 수 있다. -> $GHASH_H$(x)
- 이렇게 따로 연산할 수 있으므로, 병렬화 가능!
- Figure 12.11에서 GCTR이 Figure 12.10 전체를 말하는 것.
출처:
- [Cryptography and Network Security: Principles and Practices]
반응형
'Computer Security' 카테고리의 다른 글
[컴퓨터 보안] Key Management and Distribution (0) | 2020.12.07 |
---|---|
[컴퓨터 보안] Digital Signature - Schnorr Identification/Schnorr signature (0) | 2020.12.07 |
Public-Key Cryptosystems - Diffie-Hellman/Elgamal cryptographic system/Elliptic curve cryptography (0) | 2020.12.03 |
[컴퓨터 보안] Attack against RSA(RSA 공격하기) (0) | 2020.12.02 |
[컴퓨터 보안] Public Key Cryptography(공개키 암호) and RSA (0) | 2020.12.01 |
Comments