본문 바로가기
이론/네트워크

파일의 무결성 검증하기 (일방향 해시 함수)

by 유세지 2023. 4. 30.

 

들어가며

지난 포스트에서는 데이터를 안전하게 암호화하여 보내는 방법에 대해 알아보았습니다. 통신 중간에 누군가가 민감한 정보를 열람하는 것을 방지하기 위해 원본 데이터를 제 3자가 알아볼 수 없게 만드는 암호화를 사용했고, 이러한 방법을 통해 기밀성을 지킬 수 있었습니다.

 

그러나 기밀성을 지키는 것만으로는 충분하지 않았습니다. 적절한 암호화는 중간자가 내용을 알아보지 못하게 만들수는 있었지만, 중간자가 내용을 바꿔서 보내거나 아예 엉뚱한 응답을 보내는걸 막을 수는 없었습니다. 이에 처음 보냈던 내용과 다른 내용을 수신하는 것을 방지할 필요가 있었고, 이는 곧 기밀성에 이어 또 다른 요소인 무결성(integrity)을 검증하는 여러 방법을 탄생시키는 배경이 되었습니다.

 

 

 

일방향 해시 함수

검증을 진행하는 개념 자체는 간단합니다. 전송하는 메시지를 다른 방식으로 암호화 시켜서 원본 메시지를 암호화 시킨 데이터와 함께 보내고, 수신측에서는 두 가지 방법으로 암호화 된 메시지를 각각의 방법으로 복호화 시켜 대조해보면 중간자의 변조가 있었는지 확인할 수 있습니다.

 

하지만 이 방법에는 단점이 있습니다. 보내야 하는 데이터의 크기가 큰 경우에는, 암호화를 진행하는 데에도 많은 시간이 필요합니다. 이런 경우 검증만을 위해 일일히 전체 데이터를 한 번 더 암호화 하는 것은 리소스 낭비입니다.

 

기밀성을 유지하려는 것이 목적이 아닌, 무결성을 검증하려는 데에만 목적이 있다는 것을 생각하여 아래와 같은 일방향 해시 함수 방법을 적용할 수 있습니다.

 

 

일방향 해시 함수의 적용

 

일방향 해시 함수는 우리가 아는 기본적인 암호화와 비슷하게 진행됩니다. 다만 몇 가지 특징이 있습니다.

 

 

일방향 해시 함수의 특징

  • 일방향(단방향)으로 진행된다.
  • 입력받는 길이에 상관없이, 고정된 길이의 출력을 가진다.
  • 고속으로 계산이 가능하다.

 

 

일방향(단방향)으로 진행된다 의 경우, 일방향 해시함수라는 단어에서부터 알 수 있듯이 역방향(복호화)으로 진행이 불가능하다는 의미입니다. 기밀성을 위해 암호문을 만든것이 아니므로, 더 이상 복호화를 고려할 필요가 없습니다. 그저 같은 연산을 진행했을때, 동일한 값이 나오는지 여부만 판단하면 충분합니다.

 

입력받는 길이에 상관없이, 고정된 길이의 출력을 가진다 의 경우, 충돌이 일어날 수 있다는 것을 나타냅니다. 고정된 길이의 출력을 가지므로 산술적으로 생각했을때 입력으로 들어올 수 있는 문자열의 종류는 출력 문자열이 가질 수 있는 경우의 수보다 항상 많습니다. (무한 > 유한) 따라서 다른 메시지에 대해 동일한 해시 값을 가지는 충돌은 반드시 일어날 수 밖에 없습니다.

 

여기서 중요한 것은 이렇게 동일한 해시 값을 제 3자가 임의로 찾아내기 어렵게 만들수록 더 높은 수준의 무결성을 보장할 수 있다는 것입니다. 이러한 특성을 충돌 내성(Preimage Resistance)이라고 부르며, 같은 해시값을 갖는 다른 메시지를 찾기 어려운 성질을 약한 충돌 내성, 해시 값이 일치할 것 같은 다른 2개의 메시지를 찾기 어려운 성질을 강한 충돌 내성이라고 부릅니다.

 

고속으로 계산이 가능하다 또한 메시지의 크기가 아무리 커도, 고정된 길이의 출력을 보장하기 때문에 연산 속도가 빠릅니다. 또한 대부분의 해시 함수가 복잡한 연산을 하지 않는 것도 빠른 계산 속도의 원인이 되는 요소 중 하나입니다.

 

 

일방향 해시 함수는 이러한 특징들로 인해 다양한 응용이 가능합니다.

 

일방향 해시 함수의 응용 예시

  • 패스워드를 기초로 한 암호화 (PBE: Password Based Encryption)
  • 메시지 인증 코드 (MAC: Message Authentication Code)
  • 디지털 서명 (Digital Signature)
  • 의사난수 생성기 (PRNG: Pseudo Random Number Generator)
  • 일회용 패스워드 (OTP: One-Time Password)

 

 

현재 가장 널리 사용되고 있는 일방향 해시 함수는 SHA 시리즈 (SHA-1, SHA-256, SHA-384, SHA-512, SHA-3(KECCAK))입니다. 이전에는 MD4, MD5 등이 사용되었으나 MD구조에 효과적인 충돌 방법이 고안되어 현재는 잘 사용되지 않습니다. 현재 사용되는 해시 함수 중 SHA-3의 경우 MD구조가 아닌 스펀지 구조를 사용하여 이전의 충돌 방법들이 적용되지 않아, 상당히 높은 수준의 보안성을 가졌다고 할 수 있겠습니다.

 

 

 

문제점

이러한 해시 함수를 이용하여 중간에 데이터가 변경되거나 조작되는 검증할 수 있었으나, 이러한 해시 함수로도 아직 해결하지 못한 문제가 여전히 남아 있습니다. 바로 수신자가 받은 데이터가 정말 송신자로부터 온게 맞는지 확인하지 못한다는 점입니다.

 

예시로, 분명 수신자의 입장에서는 A라는 송신자에게 받은 데이터이지만 중간에 누군가가 A인척 거짓 행세를 하여 데이터를 보내는 경우를 생각해 볼 수 있습니다.

 

다음 포스팅에서는 이러한 거짓 행세를 방지할 수 있는 방법인 디지털 서명에 대해 알아보겠습니다.

 

 

반응형

댓글