Shine's dev log

메세지 인증 (Message Authentication) 본문

보안

메세지 인증 (Message Authentication)

dong1 2020. 5. 15. 20:51

1. 메세지 인증의 필요성

 

만약 당신이 상대방에게 "사랑해" 라는 메세지를 보낸다고 가정해보자. 중간에 어떤 사람이 그 메세지를 변조시켜서 "싫어해"로 바꾼다면, 그 메세지를 받는 사람은 마상을 입을 것이다..(?)

 

위와같은 예시는 귀여운 수준이고, 실제로 메세지가 굉장히 중요한 역할을 하는경우에, 그 메세지가 변조된다면 굉장히 큰일이 날 것이다.

 

이러한 큰일을 방지해주는것이 바로 메세지 인증 (Message Authentication)이다.

 

메세지 인증은 다음과 같이 세가지를 다룬다.

 

1) 메세지의 무결성 보호 2) 메세지 송신자의 검증 3) 부인방지

 

 

또한 위와 같은 기능을 수행하기 위해서는 두가지방법이 있다.

 

1) 메시지 암호화를 이용한방법

2) 메시지 암호화를 이용하지 않는 방법

 

이제 이 두가지 방법에 대하여 자세히 살펴보도록 하자.

 

 

 

2. 암호화를 이용한 메시지 인증

 

메시지 인증에 암호화를 이용하는 방법은 간단하다. 그냥 메시지 전체를 통채로 대칭키로 암호화시키면 된다.

 

하지만, 이 방법은 block re-ordering 공격에 취약하고, 느리다는 단점이 있다.

 

그래서 기밀성이 필요하지 않은경우 (Broadcast하는경우, 무결성만 확인하려는 경우)를 제외하고는 잘 쓰이지 않는 방법이다.

 

 

3. 암호화를 이용하지 않는 메시지 인증1 (MAC)

 

메시지 인증에 암호화를 이용하지 않는 대표적인 것이 바로 메시지 인증코드 (Message Authentication Code ; MAC)이다.

 

MAC은 메시지에 덧붙여지는 작은 블록이다. MAC을 이용한 메시지 전달 방법은 아래 그림과 같다.

 

MAC

 

- Sender는 MAC을 계산하여 메시지와 같이 보낸다.

- Receiver는 받은 메시지에서 MAC을 계산한 뒤, 자신이 받은 MAC과 같은지 확인한다.

 

하지만 이렇게 MAC을 생성한 경우, 누군가가 중간에서 메시지와 MAC을 가로채서, 메시지를 변조시키고, MAC도 다시 새롭게 만들어서 보낼 수 있다. 이런 경우에 수신자는 메시지의 MAC과 받은 MAC이 일치하므로 메시지가 변조된지 알 길이 없다.

 

이런 문제점을해결하기위해 CMAC이 나왔다. (Cipher-based Message Authentication Code)

 

CMAC에서는 메시지 암호화 과정에서 나온 결과물을 MAC으로 사용한다. CMAC의 과정을 나타낸 그림은 아래와 같다.

 

CMAC

 

하지만 위와같은 방법들은 어쨌든, 암호화를 사용해야한다는 단점이 있다. 그렇다면, 암호화를 사용하지 않는 메시지 인증방법이 있을까? 있다. 답은 바로 해쉬함수이다.

 

 

 

3. 암호화를 이용하지 않는 메시지 인증2 (Hash Function)

 

해시함수는, 메시지를 고정된 길이의 숫자로 바꾸어주는 함수이다.

 

또한, 해시함수는 fingerprints(=message digest)를 만들어준다. 메시지 다이제스트의 정의는 다음과 같다.

데이터의 무결성을 위해, 임의 크기의 메시지를 특정한 고정 크기의 블럭으로 만드는 일

 

이러한 해시함수를 이용하면 보다 빠르게 메시지 인증을 할 수 있다는 장점이 있지만, 보안적으로는 안전하지 못하다. 

 

그래서 도입된 개념이 일방향 해시함수 (One-way Hash function) 이다.

 

  • 일방향 해시함수의 특징

1) 해시값으로 원래의 메시지를 역산할 수 없어야 한다.

2) 다른 메시지가 같은 해시값을 가지는 충돌(Collision)이 일어나지 않아야 한다.

 

대표적인 일방향 해시함수로는 MD5와 SHA시리즈가 있다.

 

 

이런 일방향 해시함수를 MAC으로 사용할 수있다. -> HMAC (Hash-based Authentication Function)

 

HMAC은 다음과 같은 과정으로 진행된다.

 

1) 송신자 해시 생성 : 송신자는 key + message를 가지고 해시값을 만들어낸다. 

2) 수신자 해시 생성 : 수신자는 받은 메시지와 본인이 가지고있던 key를 조합하여 해시값을 생성한다.

3) 비교 : 수신자는 받은 해시와 생성한 해시값을 비교한다. 동일하면 인증 성공이다.

 

중요한 것은, HMAC에서는 송,수신자 사이에 공유된 비밀키가 필요하다는 점이다.

 

 

오늘 배운 내용을 정리해보면,

 

1. 메시지 인증은 1) 메시지 무결성 2) 송신자 확인 3) 부인방지를 위해 사용한다.

 

2) 암호화를 사용하는 메시지 인증은 그냥 메시지를 암호화 시키면 된다.

 

3) 암호화를 사용하지 않는 메시지 인증은 MAC을 이용하는 방법과 해시함수를 이용하는 방법(HMAC)이 있다.

 

 

본 내용은 공부하며 정리한 것으로, 오류가 있을 수 있습니다.

'보안' 카테고리의 다른 글

Diffie-Hellman 알고리즘  (0) 2020.05.28
공개키 암호 (Public key Cryptography)  (0) 2020.05.27
블록 암호 운용방식 (Modes of operation)  (0) 2020.05.14
RC4 암호 알고리즘  (0) 2020.05.14
AES 암호화  (0) 2020.05.08