Nullorm

[Bitcoin 수학] SHA-256 해시 알고리즘 / hash algorithm / 특징 및 구조 본문

Web3/Web3 수학&암호학

[Bitcoin 수학] SHA-256 해시 알고리즘 / hash algorithm / 특징 및 구조

Null0rm 2024. 4. 7. 13:33
반응형

블록체인 가상화폐를 대표하는 비트코인은 채굴, 검증 등 모든 수학적 과정 안에 이 SHA-256이라는 알고리즘이 등장하는 것으로 보인다. 

 

사실 해시알고리즘까지 알아야하나? 싶긴 하지만 그래도 일단 코인수학&암호학 이라는 카테고리를 만든 김에 첫 번째 수학적 내용으로 적절해보이긴 해서 공부해보았다.

 

1. SHA-256?

SHA-256은 메시지, 파일 암호화 또는 무결성검증 등에 널리 사용되는 일방향 암호화 해싱 알고리즘이다. 

대상 데이터를 256-bit 길이의 hash값으로 변환하는 역할을 한다. 

해시 알고리즘의 가장 큰 특징은 암호화 대상 데이터(평문)의 값이 아주 조금만 달라져도 결과값(암호문)이 크게 달라지는 것이다.

 

한번 예시와 함께 살펴보자.

2. 예시 (python)

import hashlib

data1 = "helloWorld"
res1 = hashlib.sha256(data1.encode()).hexdigest()
data2 = "hellWorld"
res2 = hashlib.sha256(data2.encode()).hexdigest()

print("res1:", res1)
print("res2:", res2)

비슷한 두 data를 SHA-256으로 암호화했는데, 너무나도 다른 결과값이 출력되었다.

res1: 11d4ddc357e0822968dbfd226b6e1c2aac018d076a54da4f65e1dc8180684ac3
res2: 83c111ea0677450e0293e71274de14f832a2a0293192a8bff29fee2fb7a86ed4

이를 통해 hash함수의 특징인 일명 '눈사태 효과'를 확인할 수 있었다.

3. SHA-256의 특징

  • 우선 SHA-256은 블록체인에서 가장 많이 채택하여 사용되고 있다.
  • 단방향성: 평문을 암호화했을 때, 다시 평문으로 복호화할 수 없다. 평문은 임의의 길이의 메시지이며, 이를 암호화하면 256-bit의 축약된 메시지로 출력된다. 데이터의 수정/변경을 검사하는 데 사용할 수는 있지만 인증은 불가능하다. 인증을 위해서는 메시지 인증 코드(MAC)과 디지털 서명(전자서명)이 요구된다.
  • 안전성: 이전버전인 SHA-1의 경우, 해시 충돌이 발견된 사례가 있기 때문에, 이와 크게 다르지 않은 256의 경우에도 안전성이 완벽하다고 하기는 어려울 것이다. 하지만, 양자컴퓨터와 같은 초성능 컴퓨터가 발명되기 전까지는 뚫기 어려울 것으로 보고 있다.
  • 블록체인에서는 SHA-256의 취약점이 발견되는 일이 있다고 하더라도, 하드포크와 같은 알고리즘 개선 기법을 이용하면 이러한 문제를 해결할 수 있다.

4. SHA-256의 구조

사실 SHA-256의 구조라기보다는 해시함수 암호화 과정의 구조라고 할 수도 있을 것 같다.

1. 전처리

전처리 단계에서는, 메시지를 512bit 블록으로 처리하는 과정을 거친다. 우선 메시지는 메시지 길이를 나타내는 64비트 값으로 끝나도록 패딩되고, 최종적으로 길이가 512비트의 배수가 된다.

2. 초기 해시 값 구성

SHA-256은 초기 해시 값으로 시작하는데, 이 값은 8개의 32bit word로 구성되어있다. 

3. 메시지 스케줄링

각 512비트 메시지 블록은 64개의 32bit 워드로 확장된다. (진짜 '확장'임) 이렇게 메시지 스케줄 배열이 만들어지고, 초기 16개의 워드는 메시지 블록에서 직접 가져온 것이며, 나머지 48개는 특정 연산을 거쳐서 만들어진 것이다.

4. 압축함수 실행

초기 해시값과 메시지 스케줄 배열을 사용해서 SHA-256 알고리즘은 64라운드의 압축함수를 실행함(64라운드는 좀 많네..) 각 라운드에서는 주요 두 가지 연산을 실행하게 된다. 확장된 메시지와 라운드 상수를 포함하는 모듈라 덧셈, 그리고 논리 함수가 수행된다고 한다. 그 결과, 8개의 해시값이 업데이트 된다.

이 부분을 자세히 다뤄보고싶긴 하지만,,, 뭔가 해시함수에는 흥미가 안생긴달까... 나중에 좀 수학적으로 재밌는것들 위주로 깊게 파고들어가보겠다..!! ㅎ

5. 최종 해시값 생성

모든 메시지 블록이 처리되면, 마지막 블록의 압축 결과는 이전블록의 결과와 함쳐져 최종 해시값을 형성한다.최종 값은 8개의 32bit word로 구성되어, 총 256bit 크기의 해시 값을 결과로 얻게 되는 것이다.

 

이렇게 대략적으로 SHA-256해시에 대해 좀 알아보았다.

다음부터는 암호 프로토콜과 같은 내용이나, 공개키 암호 시스템 등에 대해서도 알아보도록 하자.

반응형

'Web3 > Web3 수학&암호학' 카테고리의 다른 글

circom을 이용한 zkp 생성 및 검증하기  (0) 2025.01.09