투자/코인 & 블록체인

SHA 256이란?

노루다자 2021. 7. 20. 23:23

SHA 256? (=Secure Hash Algorithm) (=보안용 해쉬 알고리즘)

.. 수 많은 해쉬알고리즘 중 하나임. (+ 현재 상당히 많이쓰이는 해쉬암호화 알고리즘)

 

- SHA 256 해쉬 알고리즘의 구성

SHA256의 해쉬값의 자리수가 64자리인 이유는?

 

- SHA256은 해쉬값을 256비트로 구성하는 것임.

- 비트는 0,1 두가지로만 구별되므로 경우의 수는 2임.

- 경우의 수가 2인 비트 256개로 구성되므로 총 경우의 수는 2 ^ 256임.

 

- 해쉬값의 한 자리수는 16진수로 되어있음.

- 16진수는 16개의 경우가 있으므로 경우의 수는 2^4임.

- 16진수 64자릿수로 표현할 수 있는 경우의 수는 (2^4)^64인데 이것은 2^256임.

 

따라서 SHA256은 16진수 64자릿수로 이루어짐.

 

SHA256 설명

 

1) 어떤 임의의 데이터를 해쉬함수에 집어넣으면, 그에 따른 64자리의 해쉬값이 나옴.

 

해쉬함수는 프로그래밍에서 쓰이는 함수('=. 메소드) 즉, 어떤 값을 넣으면 함수 내부에서 계산을 해서 결과가 나옴. 

 

def add(a):
	return a*300 + 1000

위의 함수를 보면, a에 1을 넣으면 계산해서 1300이 나옴. 2를 넣으면 1600이 나옴.

중요한 건, 1을 넣으면 무조건 1300이 나온다는 것임.

 

SHA256의 해쉬함수도 위와 같은 함수임. 어떤 값을 넣으면 64자리의 값을 결과로 주는 함수

물론, 내부적으로는 복잡한 코드를 거쳐서 64자리를 만들 것임.

하지만, 중요한건 똑같은 값을 집어 넣으면 무조건 똑같은 값이 나온다는 것임.

 

내가 1이라는 데이터를 입력하면, 무조건 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

이라는 값이 나옴. 

 

2) 거꾸로(해쉬값 -> 원래데이터)는 불가능하게 설계되었다.

 

(가능) 1 -> 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

 

(불가능) 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b -> 1

 

 

3) 해쉬값은 중복이 거의 불가능하다. 

1을 해쉬 함수에 넣으면 -> 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

근데 우연히 어떤 값을 해쉬함수에 넣었을 때 1과 같은 결과를 내지는 않을까?

 

정확히는 모르지만, 확률히 극~~~~~히 낮다고함. (절대 불가능할 정도로 낮다고 함)

SHA256은 2의 256승 = 2 ^ 256임. (엄청큰수)

 

 

 

1), 2), 3)을 이용하면 나의 데이터를 암호화할 수 있다.

 

1. 예를들어 임꺽정이 87667을 암호화하려고 해쉬함수에 입력해서 해쉬값을 구함.

-> 80233d370f78d0ab70fc5af9651c85c5937d33baac41228021bae6f6aec1c798

2. 임꺽정이 위의 해쉬값과 함께 100만원을 홍길동에게 맡김. (홍길동은 다음과 같이 메모함 임꺽정 100만원 비밀번호는 80233d370f78d0ab70fc5af9651c85c5937d33baac41228021bae6f6aec1c798)

3. 나중에 임꺽정이 부하에게 시켜서 87667이라는 비번을 알려주고 돈 찾으라함. 

4. 부하는 홍길동에게 찾아가서 홍길동이 돈을 찾으러 왔다고 말하고 비번은 87667이라고 말함.

5. 홍길동은 87667을 해쉬함수에 넣어보니 위의 비밀번호와 일치해서 부하에게 돈을줌.

 

==> 다른 사람들은 절대로 80233d370f78d0ab70fc5af9651c85c5937d33baac41228021bae6f6aec1c798의 해쉬화 전 값이 87667이라는 것을 알 수 없음 즉, 대체 어떤 값을 넣어야지 해쉬함수에 저런 해쉬값이 나오는지는 암호화한 본인만 알고 있는 것!

 

==> 즉, 남에게 해쉬코드를 맡겨놓고 해쉬화 전의 데이터는 나만 알고 있다가 필요할 때 데이터를 공개하고, 일치하는지 맞춤으로써 이 해쉬코드를 만든 사람이 나라는 것을 입증하는 방식임.

 

 

 

추가로 블록체인에서 작업증명할때 SHA256을 어떻게 응용하는지도 정리해보았음.

https://noru-sh.tistory.com/26

 

블록체인 채굴, 난이도 조절 원리

이 글의 문제점 1. 일단,, 비트코인의 채굴은 맞을텐데 모든 코인에 적용되지는 않을 것임. 2. 지식의 깊이가 낮아서 아주 간략한 설명 밖에 못함. 설명에 앞서 일단 이해하려면 반드시 SHA256 해쉬

noru-sh.tistory.com

 

'투자 > 코인 & 블록체인' 카테고리의 다른 글

블록체인 채굴, 난이도 조절 원리  (0) 2021.07.21