2022.05.29 - [일등박사의 생각/[파공블]파이썬으로 공부하는 블록체인] - [파공블]파이썬으로 공부하는 블록체인(목차)
얼음으된 예쁜 조각상이 있습니다!!
상온에서 시간이 흘러 이 얼음이 녹으면 어떻게 될까요??
얼음이 있던곳에 웅덩이가 생기며 웅덩이 모양으로 물이 고여있을 것입니다.
얼마전 길을 가다 물 웅덩이를 발견했습니다!!
아마 얼음이 녹아서 웅덩이가 생긴것 같은데요!,,
얼음은 어떤 모양이었을까요"??
맥도날드에는 해시브라운 이라는 메뉴가 있습니다!!
해시브라운의 조리방법은 아래와 같아요!!
감자를 썰고 으꺤 뒤 이쁘게 모양을 만들어서 기름에 튀겨주지요!!
아까의 얼음의 예시와 비슷한데요!!
감자에서 해시브라운 모양을 만들 수는 있지만
반대로 해시브라운에서 감자의 모양은 예측할 수가 없습니다!!!
이 개념이 바로 암호해시의 개념입니다!!!
해시함수를 통해서 데이터는 hashed 가 되고,
데이터를 보면 어떻게 hashed 될지는 예측할 수 있지만,
Hashed 된 값을 보고는 원래의 데이터는 알 수가 없습니다!!!!
Python으로 보아요!
아래 코드가 해시함수의 파이썬버젼인데요!!!
hashlib를 통하여 쉽게 해시암호를 적용할 수 있습니다!
import hashlib
hashlib.sha256(str("원본텍스트").encode()).hexdigest()
"원본텍스트" 라는 글을 감자를 으깨듯 부셔서
'bd6341f9f5f40ffd309379c106165b4a064e8d90e9406016cc6b5638bed4f15c'
로 바꾸었습니다!!
다시한번, 또다시 한번 돌려보아도 값은 바뀌지가 않아요!!
즉, "원본텍스트" 는 'bd6341f9f5f40ffd309379c106165b4a064e8d90e9406016cc6b5638bed4f15c'와 매칭되어있습니다!!
다만 해시된 값만 보고는 원래값을 알 수 없을 뿐입니다.
텍스트의 길이가 길어지면 어떨까요?
아래의 사진과 같이 결과는 변화가 없습니다!!
즉 어떤 텍스트데이터를 넣더라도 64개의 hashed 데이터를 리턴합니다!!
이 뜻은 무엇일까요/??
즉!! 아무리 긴 데이터가 들어가도 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. 위조 검증이 쉽다
라는 장점이 생긴다는 것을 알 수 있었습니다.
다음 글에서는 이런 해시를 포함해
실제 블록체인은 어떻게 구성되어 있을지를 공부해보아요!
'블록체인 > [파공블]파이썬으로 공부하는 블록체인' 카테고리의 다른 글
1. 파이썬으로 공부하는 블록체인 - 채굴 (0) | 2022.06.24 |
---|---|
1. 파이썬으로 공부하는 블록체인 - 블록체인의 구성요소 (0) | 2022.06.23 |
1. 파이썬으로 공부하는 블록체인 - 간단한 블록체인 (0) | 2022.06.14 |
1. 파이썬으로 공부하는 블록체인 - Intro (0) | 2022.06.13 |
0. Python 기초 - 홈페이지와 데이터 주고받기(Flask-API) (0) | 2022.06.11 |
댓글