Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

정보 보안의 핵심 기술, 해싱(Hashing)이란 무엇일까?

해싱(Hashing)은 주어진 키를 코드로 변환하는 절차를 의미합니다. 해시 함수는 데이터를 새로 생성된 해시 코드로 대체하는 데 사용되며, 해시 알고리즘은 일반적으로 파일 내용의 디지털 지문(digital fingerprint)을 제공하여 파일이 침입자나 바이러스에 의해 변경되지 않았음을 입증하는 데 활용됩니다. 또한 일부 운영체제는 비밀번호를 암호화할 때도 해시 함수를 사용합니다. 요컨대 해시 함수는 파일의 무결성(integrity)을 검증하는 핵심 수단입니다.

해싱의 작동 원리

해싱은 알고리즘을 통해 파일의 정보 블록을 해당 문자열을 정의하는 고정 길이의 훨씬 짧은 값 또는 키로 변환합니다. 결과물인 해시 값은 특정 파일 내 각 문자열의 요약본과 같은 성격을 지니며, 파일 내 단 1바이트의 데이터만 변경되어도 해시 값이 완전히 달라져야 합니다. 이러한 현상을 '눈사태 효과(avalanche effect)'라고 부릅니다.

이러한 특성 덕분에 해싱은 데이터 처리 측면에서 큰 이점을 제공합니다. 해싱은 엄밀히 말해 압축 기술은 아니지만, 방대한 데이터 집합을 더 다루기 쉬운 형태로 축소한다는 점에서 파일 압축과 매우 유사하게 작동합니다.

보안을 위한 해시 함수의 조건

보안 목적에 적합한 해시 함수는 반드시 단방향(one-way) 프로세스여야 하며, 단방향 해싱 알고리즘을 필요로 합니다. 만약 해커가 해시를 역으로 분석해 원래 데이터로 되돌릴 수 있다면, 암호화의 근본적인 목적 자체가 무너지게 됩니다.

암호화된 출력값의 고유성을 높이기 위해 해시 함수의 입력값에 임의의 정보를 추가할 수도 있습니다. 이 기법을 '솔팅(salting)'이라고 하며, 동일한 입력값이 주어지더라도 항상 고유한 출력을 보장합니다.

암호학적 해시 함수의 안전성 기준

암호학적 해시 함수는 결정론적(deterministic)이면서 효율적으로 계산 가능해야 하고, 동시에 최대한 무작위 함수처럼 동작해야 합니다. 암호학적 해시 함수는 다음 중 하나라도 계산적으로 실현 가능하다면 안전하지 않다고 간주됩니다.

  • 주어진 다이제스트(digest)와 일치하는, 이전에 존재하지 않았던 메시지를 찾아낼 수 있는 경우
  • '충돌(collision)', 즉 서로 다른 두 메시지가 동일한 메시지 다이제스트를 갖는 경우를 찾아낼 수 있는 경우

이러한 공격이 가능한 공격자는 예를 들어 인가된 메시지를 허가되지 않은 메시지로 몰래 대체하는 데 이를 악용할 수 있습니다. 개념적으로, 다이제스트가 사실상 동일한 두 메시지를 발견하는 것조차 불가능해야 하며, 공격자가 다이제스트만 보고 메시지에 대한 유용한 정보를 얻어서도 안 됩니다. 공격자가 얻을 수 있는 최소한의 정보는 다이제스트 그 자체인데, 이를 통해 예컨대 동일한 메시지가 다시 등장했을 때 이를 식별할 수 있는 정도의 능력만 가질 수 있습니다.

파일 위변조 방지와 탐지

해싱은 파일 위변조를 방지하거나 분석하는 데에도 매우 유용합니다. 원본 파일은 해시 값을 생성하며, 이 값은 파일 데이터와 함께 보관됩니다. 파일과 해시 값이 함께 전송되면 수신 측은 해시 값을 검증하여 파일이 변조되었는지 여부를 확인할 수 있습니다. 문서에 어떠한 변경이라도 있었다면 해시 값이 이를 명확히 드러내 줍니다.