This article has been translated from English to Korean.

해싱의 목적은 무엇인가요?

해싱의 주된 목적은 데이터의 무결성을 검증하는 것입니다.

생성된 해시는 입력 데이터에 고유하기 때문에 입력 데이터의 고유한"지문" 역할을 합니다.

이 때문에 해시는 인터넷과 같은 안전하지 않은 통신 채널을 통해 전송된 데이터의 무결성을 검증하는 데 유용합니다. 데이터 무결성이란 데이터가 승인되지 않은 방식으로 변경되지 않았음을 의미합니다.

수신된 데이터의 해시값을 전송 전 데이터의 해시값과 비교하여 데이터가 변경되었는지 여부를 확인할 수 있습니다.

메시지와 그 메시지에서 생성된 해시값을 모두 게시하면, 여러분은 받은 메시지에서 해시값을 생성하고 해시값을 비교할 수 있습니다.

아주 간단한 예를 들어 보겠습니다. 점심 약속을 잡으려고 하는데, 문 밖으로 나가기 직전에 지난번에 함께 했던 일이 생각났습니다.

Body odor

당신의 성격은 정말 좋았지만, 냄새는 전혀 좋지 않았습니다. 😬

그래서 저는 여러분에게"데오드란트를 꼭 바르세요"라는 메시지를 보내고 싶습니다.

하지만 이것을 보내기 전에 해시 함수(SHA-256)를 통해 실행합니다. 해시는 다음과 같습니다.

33ebb528eab107766343d0ac591952bb68ee959d45b7a8b399628e662f3bc1ef

먼저 이 해시를 보내겠습니다.*

그러면 실제 문자 메시지를 보내드립니다.

내 메시지를 받은 후, 여러분은 이렇게 생각할 것입니다. "도대체 무슨 소리야? 그가 정말 나에게 그런 말을 했어? 아니면 메시지가 전송되는 도중에 가로채서 원래 메시지를 변경한 거야?"

Armpit stinks

그래서 메시지를 동일한 해시 함수를 통해 실행합니다.

33ebb528eab107766343d0ac591952bb68ee959d45b7a8b399628e662f3bc1ef

그런 다음 해시를 문자 메시지 앞에 있던 해시와 비교합니다.

두 해시값이 모두 같다면, 다음을 증명합니다:

  1. 메시지가 올바르게 전송되었습니다.
  2. 그쪽 겨드랑이에서 정말 냄새가 나요!
  3. 메시지는 제가 여러분에게 보내는 순간부터 여러분이 받는 순간까지 누군가에 의해 의도적으로 변경되지 않았습니다.

물론 현실 세계에서는 컴퓨터가 이 모든 것을 대신해 줍니다.

그리고 겨드랑이 냄새가 계속 신선하게 유지되기를 바랍니다. 😅

*기술적으로 해시를 보내기 전에 어떤 방식으로든 보호해야 하지만, 예시를 간단하게 유지하고 싶었습니다. 전송 중에 해시가 어떻게 보호되는지는 다음 강의에서 다룰 것입니다.

해싱의 실제 사례: 온라인 비밀번호

놀랍겠지만, 여러분은 일상생활에서 해싱을 접할 수 있습니다. 이메일을 확인하기 위해 로그인할 때마다 해싱을 접하게 됩니다. 📧

Email uses hashing

이메일 주소와 비밀번호를 만들 때, 이메일 제공업체는 실제 비밀번호를 저장하지 않을 가능성이 큽니다.

대신, 이메일 제공업체는 해시 함수를 통해 비밀번호를 실행하고 비밀번호의 해시를 저장합니다.

이메일 계정에 로그인하려고 할 때마다, 이메일 제공업체는 사용자가 입력한 비밀번호를 해시화 하고 이 해시값을 저장된 해시값 과 비교합니다.

두 해시가 일치해야만 이메일에 접근할 수 있는 권한이 부여됩니다.

왜 실제 비밀번호를 저장하지 않는지 알아봅시다…

Password in Plaintext

실제 비밀번호가 저장되어 있다면, 해커가 시스템에 침입하면 비밀번호를 훔칠 수 있습니다. 여러 웹사이트에 동일한 비밀번호를 사용하는 사용자에게는 좋지 않은 일입니다!

해결책은 암호를 해시하는 것입니다…

Hash Pasword

해시값을 이용함으로써, 회사는 사용자 정보를 보호합니다. 해커가 시스템에 침입하더라도 실제 비밀번호에 접근할 수 없고, 해시값만 접근할 수 있습니다.

해시는 되돌릴 수 없 으므로 해시만 보고 실제 비밀번호가 무엇인지 알아내는 것은 불가능합니다. 해싱은 데이터가 섞인 상태로 저장되도록 보장하므로, 해킹이 더 어렵습니다.
Password Hashed and Protected

로그인할 때마다 이메일 제공업체는 일반 텍스트로 된 비밀번호를 저장하지 않고 해시만 저장합니다.

비밀번호를 입력하면 해시 함수를 통해 실행됩니다.

출력 결과는 데이터베이스에 저장된 해시와 비교됩니다.

해시값이 같으면 비밀번호가 맞습니다.

잘못된 비밀번호를 입력하면 저장된것과 다른 해시가 생성됩니다. 해시가 일치하지 않으므로 로그인 시도가 실패합니다.

보시다시피 해시 함수는 데이터를 왜곡하여 읽을 수 없게 만듭니다. 해커가 이메일 제공 업체의 서버에 액세스하더라도 저장된 세부 정보를 해독할 수 없습니다.