ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 그래서 해시(Hash)가 뭔데?
    기초뿌셔 2024. 8. 1. 14:14

    해시(Hash)를 많이 접하고 많이 사용했음에도 불구하고 해시에 대한 정의를 내릴 수 없었다.

    이번 기회에 그래서 해시가 뭔데?라는 질문에 대답할 수 있게 정리해 보고자 한다.

     

    Hash에 대해 내가 알고 있는 사전지식

     

    • 어떠한 input에 대해 Hash Function을 사용하면 output이 나오는데, 동일한 input에는 동일한 output이 나온다.
    • output으로부터 input을 알아내기 어렵다.
    • 실제 비밀번호 검증에서도 보안을 위해 비밀번호가 직접적으로 일치하는지 확인하는 것이 아니라 입력 값에 해시함수 사용한 결과 값을 저장된 값이랑 비교한다.
    • C++에서 std::unordered_map자료구조를 통해 해시맵를 사용할 수 있다.
      - find를 통한 시간복잡도 O(1)~O(N) : 해시 충돌로 최악의 경우 선형탐색과 같다.
    • Key값에 해쉬함수(Hash Function)을 사용한 결과 값을 정해진 범위 내의 인덱스로 바꿔 value값을 저장할 위치를 매핑시킨다.
    • 해시테이블의 75%이상이 사용되는 경우 테이블 크기를 resizing하고 key와 value를 재 매핑 시킨다.
    • 간혹 해쉬의 input값이 다르더라도 같은 output이 나오는 현상이 있는데 이를 해시충돌이라고 한다.
    • 해시 충돌이 발생하는 경우 해결하는 방법
      • 인덱스를 +1처리해준다.
      • index를 제곱 처리한다.
      • 해시를 한번 더 해준다.
      • list형식으로 연결한다.(chaining)
      • tree형식으로 연결한다.

    다음과 같은 특징적인 개념을 알고있다.


     

    그래서 해시를 뭐라고 정의할건데? 

     

    해시에 대한 사전적인 정의는 다음과 같다

    해시 함수(hash function) 또는 해시 알고리즘(hash algorithm) 또는 해시함수알고리즘(hash函數algorithm)은 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값은 해시 값해시 코드, 해시 체크섬 또는 간단하게 해시라고 한다

     

    해시 함수 : input값을 고정된 길이의 데이터로 매핑하는 함수
    해시 : 해시함수에 의해 얻어지는 값(Output)

     

    정의를 통해 내가 간과하고 있었던 내용은 '고정된 길이'의 output이 나오는 것이다.

    암호학 수업 실습에서 데이터의 길이를 맞춰주기 위해 실제 padding값을 더해준 경험이 있었는데 이 부분을 완전히 잊고있었던것이다.

     

    그래서 앞으로 해시가 뭔데?라고 한다면 해시함수를 통해 얻어지는 값이 해시입니다! 그럼 해시함수가 뭔데? 데이터를 고정된 기리의 데이터로 매핑하는 함수를 해시함수라고 합니다!라고 대답할수 있다.

     


     

    그럼 Hash Function, Hash Algorithm에는 뭐가 있는데??

     

     

    • MD5 (Message Digest Algorithm 5)
      • 128비트 해시 값을 생성하는 해시 알고리즘.
      • 과거에는 널리 사용되었으나, 현재는 충돌 취약성으로 인해 더 이상 보안용으로는 권장되지 않음.
    • SHA-1 (Secure Hash Algorithm 1)
      • 160비트 해시 값을 생성하며, 과거에는 SSL 인증서 및 디지털 서명 등에 사용되었음.
      • 충돌 공격 가능성으로 인해 현재는 사용이 권장되지 않음.
    • SHA-2 (Secure Hash Algorithm 2)
      • SHA-224, SHA-256, SHA-384, SHA-512 등의 다양한 변형이 있으며, 출력 크기에 따라 다름.
      • SHA-256과 SHA-512는 현재 널리 사용되는 안전한 해시 함수로, 주로 데이터 무결성 검사, 디지털 서명, 블록체인에서 사용됨.
    • SHA-3 (Secure Hash Algorithm 3)
      • Keccak 알고리즘에 기반한 최신 해시 함수.
      • SHA-2의 대안으로 설계되었으며, 다양한 출력 크기(SHA3-224, SHA3-256, SHA3-384, SHA3-512)로 제공됨.
    • BLAKE2
      • SHA-2와 SHA-3보다 더 빠르면서도 보안을 유지하는 해시 알고리즘.
      • 파일 무결성 검증, 비밀번호 해싱 등에서 사용됨.

     

    현대에 SHA-2 에 속해있는 SHA-256이 많이 사용된다고 한다.

     

     

    SHA-2의 사용 사례

    • 블록체인: SHA-256은 특히 비트코인과 같은 암호화폐에서 사용된다. 비트코인의 채굴 프로세스에서 SHA-256 알고리즘을 사용하여 새로운 블록을 추가하는 데 필요한 작업 증명(PoW)을 수행한다. 이 외에도 많은 블록체인 프로젝트가 SHA-256을 기반으로 하고 있다.
    • 디지털 인증서: 웹사이트의 HTTPS 연결에서 사용되는 SSL/TLS 인증서에도 SHA-256이 사용된다. 이는 데이터 전송 시 무결성을 보장하고, 인증서의 위변조 여부를 확인하는 데 도움이 된다.
    • 파일 무결성 검증: 다운로드한 파일이 손상되거나 변조되지 않았는지 확인하기 위해 SHA-256 해시를 비교하는 방식이 많이 사용된다.
    • 비밀번호 해싱: 비밀번호를 데이터베이스에 저장할 때, 직접 저장하는 대신 해시 값을 저장합니다. SHA-256은 이 과정에서 사용될 수 있다. 다만, 보안을 강화하기 위해 추가적인 솔팅(salting)이나 다른 알고리즘(Bcrypt, Argon2 등)과 함께 사용되는 경우가 많다.

     

     

    SHA-256 해시 알고리즘의 순서를 알아보고 가능하다면 SHA-256암호화 클래스를 만들어봐야겠다.

     

    '기초뿌셔' 카테고리의 다른 글

    정규식(정규표현식) Regular Expressions  (0) 2024.08.05
    C++ 이름 규칙(Naming Rule) 정리  (2) 2024.01.12

    댓글

Designed by Tistory.