ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [암호화폐]해시함수란 무엇인가?
    금융정보/04.대체투자(부동산, 코인 등) 2023. 2. 5. 02:51
    반응형

    해시함수의 의미 

    해시함수는 어떤 메시지를 입력하면 고정된 길이의 값을 출력해 주는 함수이다. 해시함수가 어떻게 만들어진지 이해하는 것은 크게 의미가 없고 해시함수의 특징을 이해한다면 활용도가 높을 수 있다. 일반적으로 사용되는 "sha256"이라는 함수를 중심으로 해시함수의 특징을 알아보자.

    결과를 통한 투입값 추론 불가: 비가역성

    python 에서 sha256 함수를 통해서 hash 값을 구해보자. data1 은 "해시테스트1"로 정의하고 data2는 "해시테스트2"로 정의한 뒤  hashlib 라이브러리를 이용해서 data1, data2를 'utf-8'로 인코딩한 값을 변수로 넣으면 각각의 해시값을 얻을 수 있다.

    import hashlib
    
    data1 = "해시테스트1"
    data2 = "해시테스트2"
    
    hash1 = hashlib.sha256(data1.encode('utf-8')).hexdigest()
    hash2 = hashlib.sha256(data2.encode('utf-8')).hexdigest()
    
    print(hash1)
    print(hash2)

    위 코드를 실행하면 아래와 같은 결과를 얻을 수 있다.

    그림1: 해시함수 결과

    data1 과 data2의 차이는 문자열의 끝의 한 자리이지만 해시함숫값은 그림 1에서 처럼 완전히 다르다. 그리고 해시 값을  보고 data1과 data2의 입력값이 무엇인지 전혀 추론할 수 없다. 마치 무언가를 태워서 완전히 "재"가 되어버린 뒤에는 무엇을 태운 것인지 알 수 없는 것과 같다.

    항상 일정한 길이를 가짐

    해시함수는 항상 고정된 길이의 값을 출력해 준다. 물론 해시함수마다 반환해주는 값과 길이는 다르다. 같은 해쉬함수를 쓰기만 한다면 반환되는 값은 항상 일정한 길이를 가질 것이다. 아래 코드 실행 결과에서 볼 수 있는 것처럼 sha256 함수를 쓰는 경우 항상 길이가 64인 값을 반환하고, blake2b 함수를 쓰는 경우 항상 길이가 128인 값을 반환하는 것을 알 수 있다.

    import hashlib
    
    data1 = "해시테스트1"
    data2 = "해시테스트2"
    
    hash1 = hashlib.sha256(data1.encode('utf-8')).hexdigest()
    hash2 = hashlib.sha256(data2.encode('utf-8')).hexdigest()
    hash3 = hashlib.blake2b(data1.encode('utf-8')).hexdigest()
    hash4 = hashlib.blake2b(data2.encode('utf-8')).hexdigest()
    
    print('{0}\n hash: {1}'.format(len(hash1), hash1))
    print('{0}\n hash: {1}'.format(len(hash2), hash2))
    print('{0}\n hash: {1}'.format(len(hash3), hash3))
    print('{0}\n hash: {1}'.format(len(hash4), hash4))
    
    <결과> 
    64
    hash: 01672db8e0b3a261f4610f8db6b88f60fac739c44b32d5203e65668d93c5deee
    64
    hash: 6c75831cf3cf10637f69e1fe334cc53c2a66ccf102b2b54e9adc047510ab0bad
    128
    hash: 55429e16e91fbeb9abe95916bc1fc4ab57932d88d176fece9d228f6b301de1e014f95b63baddf5a1a47f749c8ba1cbe12c43c2a679c4e496df0a36731714b29c
    128
    hash: dcf5b3de55ad3f8e8f9d26fe31b345b5ffdee1c82377d280fd0a940db86702c7b2a5d0ac104dc993636a3f9acb885c6a92a5d13df117a0ca7b4034f99ceb9e2b

    쉽게 이해되는 이 두가지 특징은 암호화폐에서 핵심적인 기능을 한다. 비가역성은 다른 누군가가 블록체인 중간에서 정보를 조작하거나 빼내는 것을 불가능하게 하고, 항상 일정한 길이를 가진다는 특징은 채굴의 보상 등과 연관된다.

    반응형
Designed by Tistory.