[암호학] 암호학의 기본 CheckSum 과 Hash
😀공부하게 된 이유
최근 사내에서 개발 업무를 진행하게 되었을 때,
보안과 검증 로직이 아주 중요하다는 것을 알게 되었습니다.(유출하게 되었을 때 많은 고객을 잃을 수 있습니다..!)
따라서, 이러한 개념을 한번 정리 해야겠다는 생각을 하게 되었습니다.
이 내용은 인프런에 있는 강의 널널한 개발자 님의 외워서 끝내는 SSL과 최소한의 암호기술를 정리한 것이며 자신이 보안 암호화 기술에 대한 개념이 "아주" 부족하다고 생각 되는 분은 꼭 수강하시는 것을 추천 드립니다!
만약에 정리 내용중 잘못된 내용이 존재한다면 댓글로 알려주시면 감사드리겠습니다!
그럼 정리해보겠습니다.
😀Checksum 과 Hash
- checksum
checksum(체크썸) 은 이라는 개념은 CS(computer science) 에서 전반적으로 많이 사용되는 개념입니다.
네트워크를 학습하게 되었을 때 데이터에 대한 정확성과 오류를 체크하기 위해 많이 사용되는 내용입니다.
많이 사용되는 예시로 보게 되었을 때,
아래에 있는 이미지는 우리가 알고 있는 TCP 전송 프레임의 구조입니다.
그럼 여기서 checksum(검사합)의 개념을 정리해보면
- 데이터의 오류 여부 확인 방법으로 널리 사용된다. (가장 중요한 기본 개념)
- 데이터의 무결성 보장하지는 않는다.
- 보안성을 보장하는 개념은 아니다.
- 일정 자릿수를 정하고 범위를 넘는 자리 올림은 버려서 자릿수를 유지한다.(checksum계산 방식입니다.)
일단 개념은 머리에 넣어두고 그럼? 어떤 방식으로 데이터의 데이터의 오류 여부를 확인하는지 생각해봅시다.
checksum은 위의 경우처럼 두 데이터가 일치하는지 판단하는 방법론 중 하나입니다.
아래의 이미지를 보게 되었을 때, checksum 이라는 것을 함께 보내게 되는데요.
이때 보낸 데이터(데이터 원본)의 checksum 과 받은 데이터(데이터 복사본) 의 checksum 을 비교해서 데이터에 대한 변경이 이루어 졌는지 판단합니다.
이때 checksum 이 일치하게 된다면, 데이터의 변경이 이루어지지 않았다고 판단합니다.
(여기서 checksum 계산 방법은 다루지 않겠습니다.)
하지만, checksum 은 데이터의 유효성은 따질수 있지만 보안성은 없습니다.
이유는 아래와 같이 데이터의 복사본을 변경 후 checksum 만 재계산해서 보내면 되기 때문입니다.
따라서 데이터를 수신한 쪽에서는 이 데이터가 올바른 데이터인지 판단을 할수 없게 됩니다.
checksum은 데이터의 손상(변경)이 이루어졌는 지만 판단할 수 있을 뿐 입니다.
이러한 문제를 보완하기 위해 나온 개념이 바로 HASH 입니다.
따라서 정보 보안에서 무결이라는 개념은 HASH 를 통해 보장할 수 있게 됩니다.
- HASH
위의 checksum 의 문제를 보완할 수 있는 것은 Hash 입니다.
Hash 는 아래와 같은 특성을 가지고 있습니다.
- 단방향성 (가장 중요한 특징)
- 단방향성이라는 개념은 우리가 아는 일반적인 함수와 유사합니다.
- 결과를 기반으로 들어온 값에 대한 예측이 어렵다는 것 입니다.
- 예를 들어, f(x) = y 라고 했을때 y 를 기반으로 x 를 찾을 수 없다는 이야기 입니다.
- 입력 값의 크기와 상관 없이 결과 값의 길이(혹은 크기)가 일정
- 입력 데이터의 크기에 상관없이 항상 고정된 크기의 해시 값을 출력합니다.
- 예를 들어, SHA-256 해시 함수는 항상 256비트(32바이트) 해시 값을 생성합니다.
- 실제 서비스에서 회원의 비밀번호 관리에 아주 많이 사용됩니다.
- 데이터 무결성 확보와 관련해 IT기술 전 반에서 사용된다.
- 따라서 해시는 데이터에 대한 위조, 변조가 되지 않았다는 것을 검증하는 것에 사용됩니다.
위와 같은 특징을 가진 Hash 는 checksum의 일을 대신하기도 하지만,
연산이라는 작업이 더 들어가게 되면서 비효율?적인 경우가 될 수도 있습니다.
이러한 해시 알고리즘의 특징으로는 원본(데이터)의 변경이 이루어지게 되었을 때, 결과 값이 항상 달라야 합니다.
따라서 넓은 범위(많은 경우의 수)를 가져야 하는 특징을 가져야 합니다.
- 해시 대표 알고리즘
- MD-5 패스워드 (경우의 수가 매우 적으므로 비밀번호 암호화에 사용하는 것 비추천 )
- 단방향 암호화에 사용금지
- SHA-1
- SHA-128, 256, 384, 512(숫자가 클수록 경우의 수가 증가하면서 보안성이 올라가지만 연산이 증가)
- MD-5 패스워드 (경우의 수가 매우 적으므로 비밀번호 암호화에 사용하는 것 비추천 )
- MD 5 예시
- md 5 결과는 당연한 이야기지만 해시의 특징을 가지며, 일정한 크기를 가지고 해시의 결과로는 원본 문자를 알수는 없습니다.
- (번외) 사용자 인증 방식 종류(참고, 여러가지 조합 가능)
- 소지 기반(열쇠)
- 지식 기반(암기, 패스워드) -> 가장 일반적 단방향 암호화(해시 필요)
- 생체 기반(지문, 애플 페이스뭐시기)
- 위치 기반(토스에서 사용하는거 봄 -> 돈나눠주기)
- 이러한 MD5 가 안전하지 않은 이유
- 브루드포스(노가다 해킹) 방식으로 모든 암호 문자열을 구한 뒤 해커들이 해커 가능 -> MD 5 는 너무 짧고 경우의 수가 적다 것이 단점인 이유입니다.
- 따라서 SHA-256 많이 사용
- 예시
- 아래의 예시로 MD 5 를 볼 수 있습니다.
- 일반적으로 해시에는 SALT(소금) 값을 부여하여 암호화에 더 안정성을 부여 가능합니다.
- 이 secretkey 값은 내부 개발자 정도 알수 있는 값입니다.
- 자바 개발자라면 알수 있는 spring에서 application.properties 에 설정한 secretkey이 여기에 사용됩니다.
- 다음 사이트에서 한번 만들어 보시는 것도 좋은 경험 입니다. MD5 인코딩 사이트
따라서 이러한 해시는 다음과 같은 예시에 사용됩니다.
- 해시 사용 예시
- 무결성 확보
- 인증서 검증
- 디지털 포렌식
- 디지털 서명 (Hash + PKI)
- 패스워드 단방향 암호화
- 블록체인(비트코인 등 과 같은 암호화폐는 f(x) = y 처럼 해시를 사용하며 모든 암호화폐가 체인처럼 연결 되어 있다는 점에서 블록 체인이라고 합니다. 만약에 변조를 하게 되었을 때도 모든 체인의 값을 변경해야하기 때문에 보안에 대한 안정성을 보장한다는 것입니다. 따라서 모든 암호화폐를 변경해야하기 때문에 화폐의 가치를 한다는 것입니다.)
- 무결성 확보
이번 포스팅에서는 암호학의 가장 기본인 checksum 과 Hash 에 대하여 학습해봤습니다.
그럼 다음 장에서는 PKI 와 SSL 에 대하여 알아보겠습니다.