Worth spreading

[암호학]MAC 파헤치기 본문

Computer science/Cryptography

[암호학]MAC 파헤치기

annual 2018. 12. 25. 12:52
Medium에 게시한 글입니다. Medium에서 읽으시면 좀 더 좋은 환경에서 보실 수 있습니다.


Message Authentication Code

MAC은 메세지가 외부에 노출돼도 상관없을 때 사용할 수 있는 인증(authentication) 기법이다. 무조건은 아니지만 MAC 자체는 기밀성을 제공하지 않기 때문에 그렇다고 말한다. 

MAC을 쓰는 이유는 메세지인증만 필요한경우 대칭키/공개키 같은 암호화 알고리즘보다 빠르기 때문이다🏃‍♀️


MAC

은 간단히 말해 메세지의 내용을 인증할 수 있는 어떤 값이다. 이 MAC을 메세지에 덧붙여서 전송함으로 현재 메세지가 진짜임을 인증하는 것이다.

M: 메세지

C: MAC

K: 송신자, 수신자가 공유하는 Key🗝

송신자 A는 수신자 B에게 메세지 M을 보내려고 한다. 이 때 메세지 인증을 위해 자신의 메세지 M을 압축한 결과인 C를 메세지 M에 덧붙여서 (M, C)를 B에게 보낸다. B는 이를 받아서 A와 같은 방법으로 M을 압축해서 자신이 받은 C의 값과 비교해본다. 두 값이 같다면 B는 메세지가 변경되지 않았다고 확신할 수 있다.

만약 메세지에 순서가 적혀있다면 순서인증도 가능하다.

이것이 가능한 이유는 압축과정인 C에서 송,수신자만 알고 있는 비밀키(Key)를 사용하기 때문이다. 그러므로 비밀키가 외부에 노출되면 MAC은 무쓸모.

이게 MAC의 기본 개념이다!


MAC은 reversible하지 않다는 것만 제외하면 암호화 알고리즘과 아주 유사하다!

복호화(decryption)이라는 개념이 없기 때문에 reversible할 필요가 없다.

그래서 MAC은 주로 여러 개의 인풋을 받아 하나의 아웃풋을 내는 Many-to-one function이다.

길이가 다른 메세지에 대해서도 같은 길이(예를 들어 10bit)의 MAC 코드를 만들어 낸다는 뜻이다.

아까 위에서 외부에 노출돼도 상관 없을 때 사용하는 기법이라 했는데 엄밀하게는 말하면 그렇지는 않다.(죄송)

방법은 간단하다. 아까 했던 것처럼 MAC 코드를 메세지에 덧붙인 이후에 (M, C)전체를 암호화(encryption)해주면 된다! 이렇게 하면 기밀성(confidentiality)와 인증(authentication) 모두 완성😄

다만 이렇게 되면 두 개의 비밀키(Key)가 필요하다🗝🗝 물론 둘 다 송수신자끼리만 알아야 한다.

아까처럼 그림을 보여주자면 이렇다.

두 개의 그래프 중 위의 것이 내가 말한 경우이다. MAC을 덧붙인 다음에 Encryption을 진행한다!

그런데 밑에 있는 그래프는 모냐? Encryption을 먼저 한 다음에 Encryption 값에 대한 MAC을 생성해서 덧붙인 것이다.

물론 이렇게 해도 된다. 그런데 저기 주황색 글씨로 휘갈겨 놓은 것 처럼 plain text를 인증하는 것이 좀 더 의미가 분명하다(Make sense) . 밑의 것은 암호문을 인증한다…? 라는 의미가 되니깐.

물론 기능에는 큰 차이가 없다. 다만 convention정도라고 알아두면 되겠다.


하지만 MAC과 encryption을 둘 다 진행하게 되면 글 초반에 말했던 ‘MAC을 이용하는 이유는 속도!’ 라는 주장이 무색해진다. 그러니까 기밀성(confidentiality, 김일성아님)이 굳이 필요하지 않을 때 MAC만 써라!

아참! MAC은 전자서명을 제공하지 않는다. 않는게 아니고 못한다(Can’t). 송수신자는 같은 Key를 공유하기 때문이다.

수신자가 수신자 자신에게 보내놓고 송신자가 보냈다고 주장할 수 있는 것이다. 전자서명을 원한다면 대칭키(Symmetric Key)프로세스를 넣어야 한다.


MAC의 requirement

를 끝으로 이 포스팅을 마무리하겠다

  • 만약 해커가 M과 C(K,M)를 손에 넣었다! 그렇다 하더라도 해커가 C(K,M) == C(K, M’)을 만족하는 M’을 찾을 확률이 굉장히 굉장히 굉장히 낮아야 한다. 암호학에서는 이를 ‘Computationally infeasible’ 라는 멋진 단어로 표현한다.
  • 이것은 해커가 key를 모르더라도 일치하는 MAC 코드를 생성할 수 있도록 하는 것을 막아준다!

아 근데 끝내기 아쉽다. 이정도 하니까

HMAC(Hash-based Message Authentication Code)

에 대해서도 말해주고 싶어졌다. 재밌으니까 계속 달려보자!

모든 기술이 그러듯 MAC도 이를 발전시키고자 하는 사람들로부터 많은 괴롭힘(?)을 당했다.

이중 가장 성공적이라고 말하는 것들 중 하나가 HMAC이다!

말했듯이 일반 MAC은 기밀성이 필요 없을 때 빠른 속도를 발휘한다. 그런데 사람들이 빠르고 기밀성까지 갖춘 MAC을 만들고 싶어서 여러가지 방법을 시도! 그러던 중 MD5, SHA-1같은 해쉬 함수들이 그 기능을 제공할 수 있다는 것을 알아냈다! 해쉬함수들은 DES같은 대칭키 기법들보다 훨씬 빠르기 때문에 이를 이용해 기밀성, 속도 둘 다 갖춘 함수를 만들어 낼 수 있었다는 꿈을 가지게 됐다!

HMAC이 탄생하게 된 역사는 다음과 같다.

  • SHA, MD-5같은 해쉬함수들은 는 MAC을 위해서 만들어지지 않았다. 그냥 그 자체로 여러 분야에서 잘 쓰이던 녀석이다.
  • 해쉬함수는 알다시피 비밀키기반으로 사용되는 녀석이 아니기 때문에 MAC기법에 곧바로 적용될 수 없다.
  • 그래서 사람들이 해쉬알고리즘에 비밀키기법을 통합시키는 여러가지 방법을 제안했다.
  • 그중 가장 큰 지지를 받은 녀석이 바로 HMAC이다
  • 이제는 IP보안에서 의무로 사용되는 녀석이다
  • SSL같은 인터넷 프로토콜에서도 사용된다

HMAC의 구조

오마이갓 뭔가 어려워보인다. 하지만 그렇지 않다! Step by step으로 누구나 이해할 수 있다.

하지만… 이걸 다 설명하려면 지금 쓴 만큼 더 써야할 것 같다. 그러므로 여기서 끝.

그전에 마지막으로 HMAC의 한가지 특징만 알려주겠다. 이게 왜 빠를 수 있는지!

자 보이는가? procedure를 양쪽으로 갈라놨다. 그런데 왼쪽에 보이는 녀석들은 사전에 계산해 놓을 수 있다. 즉 계산해놨다가 HMAC을 써야할 때가 오면 그냥 바로 그 값을 적용해서 사용하면 된다. 이러면 상당히 빨라진다. 그러므로.. HMAC은 상당히 좋은 기법이다.

참고로 HMAC의 security power는 사용하는 해쉬함수의 power에 비례한다.

오늘은 여기까지! 요녀석들은 현대 암호학을 구성하는 주요 컴포넌트 들이기 때문에 나중에 더 깊히 다뤄 볼 가치가 있다~

See ya 👍


Comments