암호학적 해시
암호 해시 · Cryptographic hash · 해시 함수
는 임의 길이의 바이트열을 정해진 길이의 요약값으로 바꾸는 함수다. 입력 변화를 식별하는 데 쓰지만 해시값만으로 작성자나 원본의 신뢰성을 증명하지는 않는다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 파일과 분석 사본의 동일성을 비교한다.
- 과 이 처리하는 메시지 표현의 기반이 된다.
- 입력 바이트의 변화와 파일 전송 오류를 찾는다.
02어떤 순서로 동작하나
- 과 상태
은 512비트 입력 과 여덟 개의 32비트 상태 word를 사용해 256비트 결과를 만든다.
- 조건
원래 비트 길이를 L이라 하면 1비트와 k개의 0을 붙여 L+1+k≡448 mod 512가 되게 한다.
- 원래 길이
마지막 64비트에는 전 메시지 길이 L을 넣는다. 패딩된 총 길이나 문자 개수를 넣는 값이 아니다.
- 표현의 차이
문자열은 먼저 정해진 인코딩의 바이트가 된다. 같은 화면 글자도 정규화·인코딩·줄바꿈이 다르면 다른 입력이다.
- 출력 형식
256비트 결과는 32바이트이고 16진수로 쓰면 64문자다. 64문자를 다시 해시하면 원래 32바이트를 해시한 것과 다르다.
03먼저 알아둘 용어와 구성요소
- 주어진 출력에 맞는 입력을 찾기 어렵다는 성질.
- 주어진 입력과 같은 출력을 내는 다른 입력을 찾기 어려운 성질.
- 같은 출력을 내는 서로 다른 입력 쌍을 찾기 어려운 성질.
- 가 만든 고정 길이 출력값.
- 256비트 를 만드는 SHA-2 계열 .
- SHA-2와 내부 구조가 다른 표준 해시 계열.
- 해시 내부 처리에서 입력을 나누는 단위로 출력 길이와 다르다.
- 알고리즘이 정한 형식으로 메시지 끝과 길이를 표현하는 처리.
설치 이미지 해시 비교와 비밀번호 해시를 구분하기
파일 무결성 비교에서 문자열 처리 오류를 분리하고, 같은 해시 도구를 비밀번호 저장에 그대로 쓰면 안 되는 이유를 설명한다.
실습 구성과 전제
- 검증할 설치 이미지의 작업 사본과 배포자가 신뢰 가능한 경로로 제공한 값을 준비한다.
- 사진의 파일 경로·해시를 복사하지 말고 자신의 파일과 공식 배포 값으로 비교한다.
파일 바이트의 SHA-256을 계산한다
- Get-FileHash는 경로 문자열이 아니라 파일 내용을 읽어 를 만든다. 다운로드 파일이 다르거나 일부 바이트가 변경되면 비교가 실패한다.
- 알고리즘과 배포 파일 종류를 먼저 맞춘다. 같은 제품의 boot ISO와 DVD ISO는 다른 파일이다.
powershell$actual = (Get-FileHash -Algorithm SHA256 -LiteralPath .\lab.iso).Hash $expected = '배포자가 제공한 SHA-256 문자열' $actual -eq $expected파일을 변경하지 않는 조회 예시. expected에는 신뢰 가능한 공식 값을 넣는다.
원본 크기로 보기 ↗- Algorithm 열이 SHA256이며 Get-FileHash 결과와 비교식의 True가 함께 보인다.
- 따옴표 없이 해시를 대입한 줄에는 명령으로 인식할 수 없다는 오류가 있다. 이는 해시 불일치가 아니라 PowerShell 구문 처리 문제다.
확인 기준비교 전에 계산 오류·다른 파일·다른 알고리즘을 각각 배제한다.
비교 결과가 증명하는 범위를 제한한다
- True는 선택한 두 문자열이 같다는 뜻이다. 기대 해시를 파일과 같은 위조 경로에서 받았다면 공급자 진정성까지 증명되지 않는다.
- 대소문자가 다른 16진수 표기는 같은 를 표현할 수 있다. 공백·개행·알고리즘 표시를 제거할 때도 원래 64자리 값을 손상시키지 않는다.
확인 기준일치·불일치와 별도로 기대 값의 출처를 기록한다.
파일 해시와 비밀번호 저장 목적을 비교한다
- 과제의 unsalted hash는 후보 문자열을 같은 함수에 넣어 결과가 같은지 비교하는 대상이다. 출력 길이는 알고리즘 후보의 단서일 뿐 확정 근거가 아니다.
- 실제 비밀번호 저장에는 고유 salt와 비용을 조절하는 전용 함수가 필요하다. 빠른 파일 검사는 이 목적을 대신하지 않는다.
원본 크기로 보기 ↗- 과제는 plain (unsalted) hashes라고 명시하며 서로 길이가 다른 두 출력을 제시한다.
- 화면에는 해시에서 원문을 복호화하는 키가 없다. 가능한 입력을 해시해 비교하는 문제다.
확인 기준해시·인코딩·암호화를 각각 비교·표현·기밀성 기능으로 구분한다.
실습에서 확인한 동작 원리
- 파일 무결성은 계산값과 신뢰 가능한 기대값의 비교다.
- 빠른 파일 해시와 느리게 설계하는 은 목적이 다르다.
04예제로 따라가기
- 55바이트 입력: 가상 메시지의 길이는 55×8=440비트다. 1비트 뒤 0을 7개 넣으면 448비트가 된다.
- 길이 붙이기: 64비트 길이 필드를 붙이면 총 512비트, 즉 한 이 된다.
- 56바이트 입력: 448비트 입력에 1비트를 붙이면 마지막 길이 필드를 같은 에 넣을 수 없다.
- 두 완성: 0을 511개 붙여 960비트로 만든 뒤 64비트 길이를 넣으면 1024비트, 두 이다.
- 해석: 입력이 한 바이트 늘어도 내부 처리 이 늘 수 있다. 두 경우 모두 최종 해시 출력은 32바이트다.
05혼동하기 쉬운 점과 확인 기준
- 줄바꿈: LF 한 바이트와 CRLF 두 바이트, 마지막 개행 유무를 구분한다. 화면의 문장만 비교하면 차이를 놓친다.
- 텍스트 변환: BOM·문자 정규화·공백 제거가 어느 단계에 적용되었는지 확인하고 변환 전후 길이를 기록한다.
- 표현 혼동: 16진수 문자열· 문자열·디코딩된 원시 바이트 중 실제 함수에 들어간 자료형을 확인한다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.