본문 바로가기
컴퓨터/Windows

Windows에서 파일 해시(Hash)값 검사

by Spring13 2023. 4. 16.

해시 함수는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수로, 컴퓨터 소프트웨어에서 매우 빠른 데이터 검색을 위해 널리 사용된다.

해시 함수는 결정론적으로 작동하기 때문에, 해시 값이 다르다면 그 해시값에 대한 원래 데이터도 달라야 한다.

이러한 성질 때문에, 해시 함수는 파일이 원본과 비교하여 변조되었는지 여부를 확인하는 데 사용된다.

 

따라서 몇몇 프로그램 개발자들은 자신의 가지고 있는 원본의 해시값을 같이 제공하는 경우가 있는데, 간혹 설명이 부족하여 해시값 검출을 위해 별도의 프로그램을 반드시 설치해야 하는 것으로 알고 있는 사람들이 있다.

그러나 많은 운영체제에서는 해시 검사 도구를 내장하고 있다.

Windows의 경우, 내장된 툴인 Certutil과, PowerShell의 'Get-Filehash' cmdlet을 이용하여 파일 해시값을 검사할 수 있다.

이 글에서는 이에 대한 간단한 설명과, 이것들을 이용한 해시값 검사 방법에 대해 소개하겠다.


"Certutil -hashfile"과 "PowerShell Get-Filehash"


상술하였듯이 Certutil 유틸리티는 Windows에 내장된 인증서 서비스 유틸리티로, CMD 및 PowerShell에서 사용할 수 있다.

 

아래 접은 글은 Certutil의 인수를 나열한 것이다.

더보기
>certutil

동사:
  -dump             -- 구성 정보 또는 파일 덤프
  -dumpPFX          -- PFX 구조 덤프
  -asn              -- ASN.1 파일 구문 분석

  -decodehex        -- 16진수로 인코딩된 파일 디코딩
  -decode           -- Base 64로 인코딩된 파일 디코딩
  -encode           -- Base 64로 파일 인코딩

  -deny             -- 대기 중인 요청 거부
  -resubmit         -- 대기 중인 요청 다시 제출
  -setattributes    -- 대기 중인 요청에 대한 특성을 설정합니다.
  -setextension     -- 대기 중인 요청에 대한 확장을 설정합니다.
  -revoke           -- 인증서 해지
  -isvalid          -- 현재 인증서 처리 표시

  -getconfig        -- 기본 구성 문자열 가져오기
  -ping             -- Active Directory 인증서 서비스 요청 인터페이스를 Ping합니다.
  -pingadmin        -- Active Directory 인증서 서비스 관리 인터페이스를 Ping합니다.
  -CAInfo           -- CA 정보 표시
  -ca.cert          -- CA의 인증서를 검색합니다.
  -ca.chain         -- CA의 인증서 체인을 검색합니다.
  -GetCRL           -- CRL 얻기
  -CRL              -- 새 CRL 게시 [또는 델타 CRL만]
  -shutdown         -- Active Directory 인증서 서비스를 종료합니다.

  -installCert      -- 인증 기관 인증서 설치
  -renewCert        -- 인증 기관 인증서 갱신

  -schema           -- 인증서 스키마를 덤프합니다.
  -view             -- 인증서 보기를 덤프합니다.
  -db               -- 원시 데이터베이스를 덤프합니다.
  -deleterow        -- 서버 데이터베이스 열 삭제

  -backup           -- Active Directory 인증서 서비스를 백업합니다.
  -backupDB         -- Active Directory 인증서 서비스 데이터베이스를 백업합니다.
  -backupKey        -- Active Directory 인증서 서비스 인증서 및 개인 키를 백업합니다.
  -restore          -- Active Directory 인증서 서비스를 복원합니다.
  -restoreDB        -- Active Directory 인증서 서비스 데이터베이스를 복원합니다.
  -restoreKey       -- Active Directory 인증서 서비스 인증서 및 개인 키를 복원합니다.
  -importPFX        -- 인증서 및 개인 키 가져오기
  -dynamicfilelist  -- 동적 파일 목록을 표시합니다.
  -databaselocations -- 데이터베이스 위치 표시
  -hashfile         -- 파일에 암호화 해시 생성 및 표시

  -store            -- 인증서 저장소를 덤프합니다.
  -enumstore        -- 인증서 저장소 열거
  -addstore         -- 인증서를 저장소에 추가합니다.
  -delstore         -- 저장소에서 인증서를 제거합니다.
  -verifystore      -- 저장소의 인증서를 확인합니다.
  -repairstore      -- 키 연결 복구 또는 인증서 속성 또는 키 보안 설명자 업데이트
  -viewstore        -- 인증서 저장소를 덤프합니다.
  -viewdelstore     -- 저장소에서 인증서를 제거합니다.
  -UI               -- CryptUI 호출
  -attest           -- 키 증명 요청 확인

  -dsPublish        -- Active Directory에 인증서 또는 CRL 게시

  -ADTemplate       -- AD 템플릿 표시
  -Template         -- 등록 정책 템플릿 표시
  -TemplateCAs      -- 템플릿의 CA 표시
  -CATemplates      -- CA의 템플릿 표시
  -SetCASites       -- CA의 사이트 이름 관리
  -enrollmentServerURL -- CA에 연결된 등록 서버 URL을 표시, 추가 또는 삭제합니다.
  -ADCA             -- AD CA 표시
  -CA               -- 등록 정책 CA 표시
  -Policy           -- 등록 정책 표시
  -PolicyCache      -- 등록 정책 캐시 항목을 표시하거나 삭제합니다.
  -CredStore        -- 자격 증명 저장소 항목을 표시하거나 추가하거나 삭제합니다.
  -InstallDefaultTemplates -- 기본 인증서 템플릿 설치
  -URLCache         -- URL 캐시 항목을 표시 또는 삭제
  -pulse            -- 펄스 자동 등록 이벤트 또는 NGC 작업
  -MachineInfo      -- Active Directory 컴퓨터 개체 정보 표시
  -DCInfo           -- 도메인 컨트롤러 정보 표시
  -EntInfo          -- 엔터프라이즈 정보 표시
  -TCAInfo          -- CA 정보 표시
  -SCInfo           -- 스마트 카드 정보 표시

  -SCRoots          -- 스마트 카드 루트 인증서 관리

  -DeleteHelloContainer -- Hello 로그온 컨테이너를 삭제합니다.
     ** 완료하려면 이 옵션을 사용한 후 로그아웃해야 합니다. **
  -verifykeys       -- 공개 및 개인 키 집합을 확인합니다.
  -verify           -- 인증서, CRL, 또는 체인을 확인합니다.
  -verifyCTL        -- AuthRoot 또는 허용되지 않은 인증서 CTL 확인
  -syncWithWU       -- Windows 업데이트와 동기화
  -generateSSTFromWU -- Windows 업데이트에서 SST 생성
  -generatePinRulesCTL -- 고정 규칙 CTL 생성
  -downloadOcsp     -- OCSP 응답 다운로드 및 디렉터리에 쓰기
  -generateHpkpHeader -- 지정한 파일 또는 디렉터리에 있는 인증서를 사용하여 HPKP 헤더 생성
  -flushCache       -- 선택한 프로세스(예: lsass.exe)에 지정된 캐시 플러시
  -addEccCurve      -- ECC 곡선 추가
  -deleteEccCurve   -- ECC 곡선 삭제
  -displayEccCurve  -- ECC 곡선 표시
  -sign             -- CRL 또는 인증서를 다시 서명

  -vroot            -- 웹 가상 루트 및 파일 공유를 만들거나 삭제합니다.
  -vocsproot        -- OCSP 웹 프록시의 웹 가상 루트 만들기/삭제
  -addEnrollmentServer -- 등록 서버 응용 프로그램 추가
  -deleteEnrollmentServer -- 등록 서버 응용 프로그램 삭제
  -addPolicyServer  -- 정책 서버 응용 프로그램을 추가합니다.
  -deletePolicyServer -- 정책 서버 응용 프로그램을 삭제합니다.
  -oid              -- ObjectId 표시 또는 표시 이름 설정
  -error            -- 오류 코드 메시지 텍스트를 표시합니다.
  -getreg           -- 레지스트리 값을 표시합니다.
  -setreg           -- 레지스트리 값을 설정합니다.
  -delreg           -- 레지스트리 값 삭제

  -ImportKMS        -- 키 저장을 위하여 사용자 키 및 인증서를 서버 데이터베이스로 가져옵니다.
  -ImportCert       -- 인증서 파일을 데이터베이스로 가져옵니다.
  -GetKey           -- 저장된 개인키 복구 BLOB을 검색하거나, 복구 스크립트를 생성하거나,
      보관된 키를 복구합니다.
  -RecoverKey       -- 저장된 개인 키 복구
  -MergePFX         -- PFX 파일 병합
  -ConvertEPF       -- PFX 파일을 EPF 파일로 변환

  -add-chain        -- (-AddChain) 인증서 체인 추가
  -add-pre-chain    -- (-AddPrechain) 사전 인증서 체인 추가
  -get-sth          -- (-GetSTH) 서명된 트리 헤드 받기
  -get-sth-consistency -- (-GetSTHConsistency) 서명된 트리 헤드 변경 사항 받기
  -get-proof-by-hash -- (-GetProofByHash) 해시 교정본 받기
  -get-entries      -- (-GetEntries) 항목 받기
  -get-roots        -- (-GetRoots) 루트 받기
  -get-entry-and-proof -- (-GetEntryAndProof) 항목 및 교정본 받기
  -VerifyCT         -- SCT 인증서 확인
  -?                -- 이 사용법 메시지를 표시합니다.


CertUtil -?              -- 동사 목록(명령 목록)을 표시합니다.
CertUtil -dump -?        -- "dump" 동사의 도움말 텍스트를 표시합니다.
CertUtil -v -?           -- 모든 동사의 도움말 텍스트를 모두 표시합니다.

 

이중 파일 해시값을 검사하는 인수는 "-hashfile" 인수이다.

 

사용법은 아래와 같다.

사용법:
  CertUtil [옵션] -hashfile [파일 이름] [HashAlgorithm]
  파일에 암호화 해시 생성 및 표시

옵션:
  -Unicode          -- 리디렉션된 출력을 유니코드로 씁니다.
  -gmt              -- GMT로 시간 표시
  -seconds          -- 시간을 초와 밀리초로 표시
  -v                -- 자세한 정보 표시 작동
  -privatekey       -- 암호 및 개인 키 데이터 표시
  -pin PIN                  -- 스마트 카드 PIN
  -sid WELL_KNOWN_SID_TYPE  -- 숫자 SID
            22 -- 로컬 시스템
            23 -- 로컬 서비스
            24 -- 네트워크 서비스

해시 알고리즘: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512

이 문단은 PowerShell의 Get-FileHash cmdlet에 대한 간단한 소개이다.

더보기
이름
    Get-FileHash

개요
    Computes the hash value for a file by using a specified hash algorithm.
    
    지정한 해시 알고리즘을 사용하여 파일에 대한 해시 값을 계산합니다.


구문
    Get-FileHash [-Algorithm {SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160}] -InputStream <System.I
    O.Stream> [<CommonParameters>]

    Get-FileHash [-Algorithm {SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160}] -LiteralPath <System.S
    tring[]> [<CommonParameters>]

    Get-FileHash [-Path] <System.String[]> [-Algorithm {SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD16
    0}] [<CommonParameters>]


설명
    "The `Get-FileHash` cmdlet computes the hash value for a file by using a specified hash algorithm. A hash value is a
     unique value that corresponds to the content of the file. Rather than identifying the contents of a file by its fi
    le name, extension, or other designation, a hash assigns a unique value to the contents of a file. File names and e
    xtensions can be changed without altering the content of the file, and without changing the hash value. Similarly,
    the file's content can be changed without changing the name or extension. However, changing even a single character
     in the contents of a file changes the hash value of the file."
     
    Get-FileHash cmdlet은 지정된 해시 알고리즘을 사용하여 파일의 해시 값을 계산합니다.
    해시 값은 파일 내용에 해당하는 고유한 값입니다. 
    파일 이름, 확장명 또는 기타 지정으로 파일 내용을 식별하는 대신 해시는 파일 내용에 고유한 값을 할당합니다. 
    파일 내용과 해시 값을 변경하지 않고 파일 이름과 확장명을 변경할 수 있습니다. 
    마찬가지로 이름이나 확장명을 변경하지 않고 파일의 내용을 변경할 수 있습니다. 
    그러나 파일 내용에서 한 문자라도 변경하면 파일의 해시 값이 변경됩니다. 

    "The purpose of hash values is to provide a cryptographically-secure way to verify that the contents of a file have
    not been changed. While some hash algorithms, including MD5 and SHA1, are no longer considered secure against attac
    k, the goal of a secure hash algorithm is to render it impossible to change the contents of a file -- either by acc
    ident, or by malicious or unauthorized attempt -- and maintain the same hash value. You can also use hash values to
     determine if two different files have exactly the same content. If the hash values of two files are identical, the
     contents of the files are also identical."
     
     해시 값은 파일 내용이 변경되지 않았음을 확인하는 암호화된 보안 방법을 제공합니다. 
     MD5 및 SHA1을 포함한 일부 해시 알고리즘은 더 이상 공격로부터 안전한 것으로 간주되지 않지만 보안 해시 알고리즘의 목표는 
     파일의 콘텐츠를 실수로 또는 악의적이거나 무단으로 변경하는 것을 불가능하게 만들고 동일한 해시 값을 유지하는 것입니다. 
     해시 값을 사용하여 두 개의 파일 내용이 같은지 확인할 수도 있습니다. 
     두 파일의 해시 값이 같으면 파일 내용도 같습니다.

    "By default, the `Get-FileHash` cmdlet uses the SHA256 algorithm, although any hash algorithm that is supported by t
    he target operating system can be used."
    
    기본적으로 Get-FileHash cmdlet은 SHA256 알고리즘을 사용하지만 대상 운영 체제에서 지원하는 해시 알고리즘을 사용할 수 있습니다.


관련 링크
    Online Version: https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/get-filehash?view=powers
    hell-5.1&WT.mc_id=ps-gethelp
    Format-List

설명
    예를 보려면 다음과 같이 입력하십시오. "get-help Get-FileHash -examples".
    자세한 내용을 보려면 다음과 같이 입력하십시오. "get-help Get-FileHash -detailed".
    기술적인 내용을 보려면 다음과 같이 입력하십시오. "get-help Get-FileHash -full".
    온라인 도움말을 보려면 다음을 입력하십시오."get-help Get-FileHash -online"

Get-FileHash cmdlet을 이용해 해시값을 검사하는 간단한 예문은 다음과 같다.

Get-FileHash "파일의 디렉토리 위치" -Algorithm "원하는 알고리즘 방식"

이하는 해시값을 검사하는 방법이다.

 

Linux Mint 21.1 Cinnamon Edition의 ISO파일의 SHA256 체크섬을 확인하는 방법을 예로 들어 설명하자면,

 

먼저 공식 홈페이지에서 제공하는 Linux Mint 21.1 체크섬의 값(SHA256)은 다음과 같다.

2df322f030d8ff4633360930a92d78829d10e515d2f6975b9bdfd1c0de769aca *linuxmint-21.1-cinnamon-64bit.iso
f7fb9c0500e583c46587402578547ea56125e0a054097f9f464a2500830c8b25 *linuxmint-21.1-mate-64bit.iso
6fea221b5b0272d55de57f3d31498cdf76682f414e60d28131dc428e719efa8b *linuxmint-21.1-xfce-64bit.iso

 

상술한 방법을 이용하여 검출한 값이 위의 값과 동일하면 문제가 없는 것이다.


해시 검사 방법


  • Certutil을 이용한 방법

다운로드 받은 ISO이미지의 해시값(SHA256)을 확인하려면 다음과 같이 입력한다.

CertUtil -hashfile "다운로드받은 파일의 위치" SHA256

 

예를 들어 "I:\Linux\linuxmint-21.1-cinnamon-64bit.iso"파일의 해시값(SHA256)을 알고 싶다면

Certutil -hashfile "I:\Linux\linuxmint-21.1-cinnamon-64bit.iso" sha256

기본값이 SHA1이기 때문에 "sha256"을 반드시 입력해 주어야 한다.

라고 입력한 후 엔터를 누른다.

 

그러면 다음과 같이 검출한 해시값(SHA256)이 나타난다.

해시값이 검출된 것을 확인할 수 있다.


  • PowerShell을 이용한 방법

다운로드 받은 ISO이미지의 해시값(SHA256)을 확인하려면 다음과 같이 입력한다.

Get-Filehash ‪I:\Linux\linuxmint-21.1-cinnamon-64bit.iso -Algorithm SHA256

기본값이 SHA256이기 때문에 "-Algorithm SHA256"는 입력하지 않아도 된다.

다음과 같이 나타날 것이다.

해시값이 검출된 것을 확인할 수 있다.


파일의 해시값을 검출하였으면 원본과 대조하여 일치하는지 여부를 확인해야 한다.

일치하지 않는다면 파일이 변조된 것이므로 즉각 삭제하고 믿을 수 있는 저장소에서 다시 다운로드하여야 한다.

 


참고 자료

더보기

https://en.wikipedia.org/wiki/Secure_hash_algorithms

 

Secure Hash Algorithms - Wikipedia

From Wikipedia, the free encyclopedia Family of cryptographic hash functions The Secure Hash Algorithms are a family of cryptographic hash functions published by the National Institute of Standards and Technology (NIST) as a U.S. Federal Information Proces

en.wikipedia.org

https://stackoverflow.com/questions/10061532/why-choose-sha512-over-sha384

 

Why choose SHA512 over SHA384?

SHA384 is a truncated version of SHA512. But why would anyone use it? And corollary: if SHA384 is just as good as SHA512, is there any rationale in using the 512 bit version? I am planning to use o...

stackoverflow.com

https://docs.python.org/3/library/hashlib.html

 

hashlib — Secure hashes and message digests

Source code: Lib/hashlib.py This module implements a common interface to many different secure hash and message digest algorithms. Included are the FIPS secure hash algorithms SHA1, SHA224, SHA256,...

docs.python.org

Get-FileHash (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn

 

Get-FileHash (Microsoft.PowerShell.Utility) - PowerShell

cmdlet은 Get-FileHash 지정된 해시 알고리즘을 사용하여 파일의 해시 값을 계산합니다. 해시 값은 파일 내용에 해당하는 고유한 값입니다. 파일 이름, 확장명 또는 기타 지정으로 파일 내용을 식별하

learn.microsoft.com

certutil | Microsoft Learn

 

certutil

certutil 명령에 대한 참조 문서입니다. certutil은 CA(인증 기관) 구성 정보를 표시하고, 인증서 서비스를 구성하고, CA 구성 요소를 백업 및 복원하는 명령줄 프로그램입니다. 또한 이 프로그램은 인

learn.microsoft.com

https://namu.wiki/w/%ED%95%B4%EC%8B%9C

 

해시 - 나무위키

이러한 특성에 힘입어 다양한 목적에 맞게 설계된 해시 함수가 존재하며 다음과 같은 다양한 분야에서 매우 유용하게 사용된다. 해시 테이블 (또는 해시 맵)해시셋(set)중복 레코드 검색유사 레

namu.wiki

 

728x90
반응형

댓글