본문 바로가기
블록체인/[파공블]파이썬으로 공부하는 블록체인

1. 파이썬으로 공부하는 블록체인 - 해시!?

by 일등박사 2022. 6. 15.
728x90

2022.05.29 - [일등박사의 생각/[파공블]파이썬으로 공부하는 블록체인] - [파공블]파이썬으로 공부하는 블록체인(목차)

 

[파공블]파이썬으로 공부하는 블록체인(목차)

2022.05.28 - [일등박사의 생각/파이썬으로 알아보는 블록체인] - [파공블]파이썬으로 공부하는 블록체인(Intro-1) 2022.05.29 - [일등박사의 생각/파이썬으로 알아보는 블록체인] - [파공블]파이썬으로 공

drfirst.tistory.com

 

 


얼음으된 예쁜 조각상이 있습니다!!

상온에서 시간이 흘러 이 얼음이 녹으면 어떻게 될까요??

얼음이 있던곳에 웅덩이가 생기며 웅덩이 모양으로 물이 고여있을 것입니다.

 

 

얼마전 길을 가다 물 웅덩이를 발견했습니다!!

아마 얼음이 녹아서 웅덩이가 생긴것 같은데요!,,

얼음은 어떤 모양이었을까요"??

 

 

맥도날드에는 해시브라운 이라는 메뉴가 있습니다!!

해시브라운의 조리방법은 아래와 같아요!!

 

감자를 썰고 으꺤 뒤 이쁘게 모양을 만들어서 기름에 튀겨주지요!!

아까의 얼음의 예시와 비슷한데요!!

 

감자에서 해시브라운 모양을 만들 수는 있지만

반대로 해시브라운에서 감자의 모양은 예측할 수가 없습니다!!!

 

이 개념이 바로 암호해시의 개념입니다!!!

 

해시함수를 통해서 데이터는 hashed 가 되고,

데이터를 보면 어떻게 hashed 될지는 예측할 수 있지만,

Hashed 된 값을 보고는 원래의 데이터는 알 수가 없습니다!!!!

 

Python으로 보아요!

아래 코드가 해시함수의 파이썬버젼인데요!!!

hashlib를 통하여 쉽게 해시암호를 적용할 수 있습니다!

 

import hashlib
hashlib.sha256(str("원본텍스트").encode()).hexdigest()

 

"원본텍스트" 라는 글을 감자를 으깨듯 부셔서 

'bd6341f9f5f40ffd309379c106165b4a064e8d90e9406016cc6b5638bed4f15c'

로 바꾸었습니다!!

 

다시한번, 또다시 한번 돌려보아도 값은 바뀌지가 않아요!!

즉, "원본텍스트"  는 'bd6341f9f5f40ffd309379c106165b4a064e8d90e9406016cc6b5638bed4f15c'와 매칭되어있습니다!!

다만 해시된 값만 보고는 원래값을 알 수 없을 뿐입니다.

 

텍스트의 길이가 길어지면 어떨까요?

아래의 사진과 같이 결과는 변화가 없습니다!!

즉 어떤 텍스트데이터를 넣더라도 64개의 hashed 데이터를 리턴합니다!!

1개 블록
6개 블록

이 뜻은 무엇일까요/??

즉!! 아무리 긴 데이터가 들어가도 64개의 짧은 값으로 압축할수 있다!!!

블록이 아무리 많아져도 압축이 가능하다! 라는 뜻입니다.

 

두번째로는 '조금의 차이도 용납하지 않는다' 입니다!!

 

위의 사진을 보면 같은 데이터 같은데, 결과가 완전히 다른데요!!

왜 이런 차이가 있을까요????

 

곰곰히 찾아보세요!!

바로바로 시간 부분에 "5월 11일(띄어쓰기가 있고 없고)16시" 의 차이가 있었습니다.

이처럼 해시함수는 내부의 데이터가 조금이라도 다르다면 완전히 다른 값을 배출합니다.

그러기에 과거내역이 조금이이라도 바뀌면, 그 결과값이 완전 다른값이 나옵니다!!

 

그래서!!

이 암호해시가 적용된 후의 블록체인은 어떻게 바뀌는것일까요?

 

아래 코드와 같이 previous block에 기존 데이터가 그대로 들어가는 것이 아니라

전 블록의 hashed 된 값이 들어갑니다!!

import hashlib

## 블록1
genesis_block =   {'INDEX':0,
                    '판매자' : '파공블',
                    '구매자' : '김민수',
                    '개수' : '3개',
                    '시간' : '2022년 5월 11일 16시 25분 16초',
                    'previous_block' : None
                  }
hash_data = hashlib.sha256(str(genesis_block).encode()).hexdigest()
print(hash_data)


## 블록2
block_2 = {'INDEX':1,
            '판매자' : '김민수',
            '구매자' : '김영수',
            '개수' : '3개',
            '시간' : '2022년 5월 12일 13시 25분 16초',
                "previous_hash" : hash_data
              }

hash_data = hashlib.sha256(str(block_1).encode()).hexdigest()
print(hash_data)

## 블록3
block_3 = {'INDEX':3,
            '판매자' : '김영수',
            '구매자' : '박명수',
            '개수' : '3개',
            '시간' : '2022년 5월 13일 16시 25분 16초',
                "previous_hash" : hash_data
              }

hash_data = hashlib.sha256(str(block_3).encode()).hexdigest()
print(hash_data)

최종적으로, Block6을 보게 된다면, 

그 길이가 엄청 짧아진 것을 알 수 있습니다!!

 

그리고 만약 기존 데이터가 변경되었다면, hashed 된 값이 180도 바뀌기에,

다른 원장들과 비교해보며 쉽게 그 차이를 알아내 수 있겠지요?

 

지난시간 블록체인을 배운데 이어

이번시간에는 hash 함수를 활용한 블록체인을 배워보았습니다!

 

hash 함수를 통하여 우리는

1. 짧고

2. 위조 검증이 쉽다

 

라는 장점이 생긴다는 것을 알 수 있었습니다.

 

다음 글에서는 이런 해시를 포함해

실제 블록체인은 어떻게 구성되어 있을지를 공부해보아요!

 

 

728x90

댓글