1 minute read

What is Hash?

해시 Hash: 데이터를 고정된 크기로 출력한 값

목적: 암호학적으로 데이터의 무결성을 보장

예) 데이터: apple = 해시 값: 1f3870be274f6c49b3e31a0c6728957f

해시함수 Hash Function: 임의의 길이를 가진 입력 데이터를 고정된 길이의 해시값으로 매핑하는 함수

종류:

SHA-256 (Secure Hash Algorithm 256-bit):

미국 NSA가 설계. 비트코인의 핵심 알고리즘이며, 블록 생성 및 작업 증명(Proof of Work, PoW)에 사용됨

Keccak-256:

SHA-3 표준의 원형으로, 이더리움에서 주로 사용

Ethereum The Merge 알아보기

참고: SHA-3와 Keccak-256은 다르다?

2015년에 SHA-3는 NIST(National Institute of Standards and Technology 미국 국립표준기술연구소)에 의해 표준화됨

SHA-3는 Keccak 기반이지만 표준화 과정에서 약간의 내부 파라미터가 바뀜

이더리움은 표준화 전 버전인 Keccak-256을 사용하고 있어서 SHA-3-256과 완전히 동일하지는 않음

따라서 이더리움의 keccak256() 함수와 SHA-3 라이브러리 함수의 결과값이 다를 수 있음

  • SHA-1 출력값: 160bits(40자)
  • SHA-256, Keccak-256 출력값: 256bits(64자, 32bytes)

예) SHA-256 알고리즘:

  • 데이터 1: abcdefghijklmnopqrstuvwxyzabcefghijklmnopqrstuvwxyz

    = 해시 값: cf598f0e6c5cd27c961bd259a7dd5e716d15bb3edab87e7a7c486b811cc6d4e8

  • 데이터 2: crypto

    = 해시 값: da2f073e06f78938166f247273729dfe465bf7e46105c13ce7cc651047bf0ca4

대소문자 구분, 데이터가 아무리 많아도 데이터를 쪼개고 압축해 고정된 크기의 출력값을 생성한다.

🔐 Node.js에서 SHA-256 해시값 생성하기

아래 코드는 Node.js의 내장 crypto 모듈을 사용하여 문자열 "fire"의 SHA-256 해시값을 생성하는 예제입니다.

createHash('sha256')를 통해 SHA-256 알고리즘을 사용하고, .update()로 입력 데이터를 넣은 뒤 .digest('hex')로 16진수 형태의 해시값을 출력합니다.

```js const crypto = require(‘crypto’);

function sha256(message) { return crypto.createHash(‘sha256’).update(message).digest(‘hex’); }

const string1 = ‘fire’; const hash1 = sha256(string1); console.log(‘SHA-256 해시:’, hash1);

실행하면 다음과 같이 출력됩니다.

fire의 SHA-256 해시 값: 8d1bb1f9433c58a1b124b7fc10efef1709785fe7cda93cb6d5672e74e3cda217

Updated: