가장 많이 혼동하는 개념 : 인코딩, 해싱, 암호화
The Most Confused Concepts in Engineering by Monis Yousuf
이 영상은 데이터를 변환하는 세 가지 핵심 기술인 인코딩, 해싱, 암호화의 정의와 작동 원리, 그리고 각각의 차이점을 구체적인 예시와 함께 상세히 설명합니다.
-
인코딩(Encoding)
- 개념과 필요성
- 구글 검색창에 문장을 입력하고 브라우저 주소창을 확인하면 입력한 내용이 변형되어 나타나는 것을 볼 수 있습니다.
- 예를 들어, 공백은 %20으로 대체되고 물음표는 %3F로 변환됩니다.
- 이러한 변환이 필요한 이유는 URL에 사용할 수 있는 문자 세트가 제한적이기 때문입니다. 공백과 같은 문자는 URL에서 유효하지 않지만 데이터로서 전송되어야 하므로, 허용된 문자 세트 내의 다른 형태로 변환하는 과정이 필요합니다.
- 정의
- 데이터를 저장하거나 전송할 목적으로 한 형식에서 다른 형식으로 변환하는 것을 의미합니다.
- 다양한 형식과 활용 예시
- 텍스트 데이터의 변환: 'Hello'라는 텍스트는 이진법(Binary) , 16진수(Hexadecimal) , Base64 등 다양한 형태로 인코딩될 수 있습니다.
- 웹 개발(CSS) : 웹 페이지의 배경색을 지정할 때 사용하는 컬러 코드는 보통 16진수 형태를 가집니다. 이는 동일한 값을 가지는 10진수 형태보다 훨씬 간결하기 때문입니다.
- 이미지 임베딩: HTML의 이미지 태그는 보통 이미지 파일이 저장된 위치의 URL을 참조합니다. 하지만 용량이 작은 이미지의 경우 네트워크 호출 횟수를 줄이기 위해 Base64 형식으로 인코딩하여 HTML이나 CSS 코드 안에 직접 포함시키기도 합니다.
- 핵심 특징
- 가역성: 인코딩은 되돌릴 수 있습니다. %20이라는 코드를 본 사람은 누구나 이를 다시 공백으로 복구(디코딩)할 수 있습니다.
- 목적: 인코딩의 주된 목적은 데이터의 표현이지 보안이 아닙니다.
- 개념과 필요성
-
해싱(Hashing)
- 작동 원리와 보안성
- 온라인 사이트에서 계정을 생성할 때 입력하는 비밀번호는 절대 평문 그대로 저장되지 않습니다.
- 대신 비밀번호는 해싱 알고리즘을 거쳐 고정된 길이의 복잡한 문자열로 변환됩니다.
- 이 해시 문자열만 봐서는 원래의 비밀번호를 알아내는 것이 물리적으로 불가능합니다.
- 로그인 검증 과정
- 사용자가 로그인을 시도할 때 입력한 비밀번호를 다시 해싱합니다.
- 새로 생성된 해시값과 시스템 데이터베이스에 저장된 기존 해시값을 비교합니다.
- 두 값이 일치하면 로그인이 성공적으로 처리됩니다.
- 해싱의 3대 주요 특징
- 비가역성: 해싱은 일방향 과정입니다. 결과물인 해시값을 역으로 계산하여 원래의 입력값을 찾아낼 수 없습니다.
- 결정론적 특성: 동일한 입력값에 대해서는 항상 같은 해시값이 생성됩니다.
- 고정된 길이: 입력 데이터의 길이가 아무리 길거나 짧아도, 출력되는 해시값의 길이는 항상 일정합니다.
- 기타 활용 사례
- 파일 무결성 검사: 파일을 다운로드할 때 파일이 손상되었는지 확인하는 용도로 사용됩니다.
- 다운로드된 파일이 조금이라도 손상(오염)되었다면 해시값이 원본과 다르게 나타납니다.
- 반대로 파일이 완벽한 상태로 다운로드되었다면 원본 파일의 해시값과 일치합니다.
- 알고리즘 종류: SHA-256, BCrypt, Argon2 등이 대표적입니다.
- 작동 원리와 보안성
-
암호화(Encryption)
- 개념과 목적
- 해싱처럼 데이터를 알아볼 수 없는 형태로 변환하지만, 특정한 대상(사람이나 시스템)만 다시 원래의 내용을 볼 수 있게 하려는 목적을 가집니다.
- 컴퓨터에 저장된 일급 비밀 문서를 예로 들면, 암호화되지 않은 문서는 누구나 열어볼 수 있습니다.
- 암호화를 거치면 데이터는 암호문으로 변형되며, 이를 해독하기 위해서는 반드시 암호화 키(Key) 가 필요합니다.
- 키가 없는 사람이 문서를 열면 의미를 알 수 없는 문자들의 나열(지브리시)만 보게 됩니다.
- 역사적 사례: 카이사르 암호(시프트 암호)
- 약 2,000년 전 줄리어스 카이사르가 군사적 메시지를 보호하기 위해 사용한 기법입니다.
- 작동 방식: 알파벳의 각 글자를 미리 정해둔 일정한 숫자만큼 뒤로 밀어서 변환합니다.
- 예를 들어, 이동 숫자를 '3'으로 정하면 'HELLO'라는 단어의 'H'는 'K'가 되고, 'E'는 'H'가 되는 식으로 변하여 **'KHOOR'**라는 암호문이 됩니다.
- 메시지를 가로챈 사람은 이동 숫자(키)를 모르면 내용을 알 수 없지만, 수신자는 알파벳을 다시 3칸씩 앞으로 당겨서 원래의 단어로 복구(복호화)할 수 있습니다.
- 현대 암호화 기술
- 현대의 컴퓨터 환경에서는 단순히 글자를 미는 방식이 아니라 매우 복잡한 수학적 알고리즘을 사용합니다.
- 현재의 컴퓨팅 성능으로는 무차별 대입 공격(브루트 포스)으로도 깨뜨릴 수 없도록 설계되었습니다.
- 대표적인 예시: 왓츠앱(WhatsApp) 과 같은 보안 메시징 앱은 종단간 암호화를 사용합니다. 메시지가 사용자의 기기를 떠나기 전에 암호화되므로, 네트워크 상의 해커는 물론 앱 서비스 제공업체의 서버에서도 원래의 대화 내용을 읽을 수 없습니다. 오직 메시지를 받는 상대방만이 일치하는 복호화 키를 통해 내용을 확인할 수 있습니다.
- 알고리즘 종류: AES, RSA 등이 있습니다.
- 개념과 목적
-
최종 요약 비교
- 인코딩: 데이터의 형식을 바꾸는 과정입니다. 보안과는 무관하며, 시스템 간의 원활한 데이터 통신과 가독성을 위해 사용됩니다. 완전히 가역적입니다.
- 해싱: 데이터를 고정된 길이의 코드로 요약하는 과정입니다. 절대 복구할 수 없는 비가역적인 특징을 가지며, 비밀번호 보호나 데이터의 위변조 여부를 확인하는 무결성 검사에 사용됩니다.
- 암호화: 데이터의 기밀성을 유지하는 과정입니다. 해싱과 달리 암호화 키를 통해 원래의 데이터로 복구가 가능합니다. 승인된 사용자만 정보에 접근할 수 있도록 보호하는 모든 통신 보안의 핵심입니다.
토픽:
컴퓨터 과학