SHA 는 Secure Hash Algorithm 의 줄임말이다.
약 2004년부터 몇몇 해시알고리즘에 대한 공격이 성공화하였고, 2005년부터는 SHA-1 에 대한
공격이 성공할 수 있다는 공식적인 발표가 나오기 시작하였다.
SHA-3 계열 함수는 SHA-1,2 를 대체하기 위해서 등장한 함수들이다.
이전과 다르게, SHA-3 는 NIST(미국 국립표준기술 연구소) 에서 직접 디자인하지 않고,
공개 경쟁입찰 방식을 선택하였다.
그 중에서 우승한 것이 이더리움에서 사용되는 Keccak256 이다.
SHA-3 계열은 SHA-2 와 다르게, 전처리 과정에서 메시지 패딩에 쓰일 값들을 초기화 하고,
해시 연산에서는 패딩된 메시지로부터 메시지 스케쥴링 과정을 반복하여 메시지 다이제스트를
얻는 역할을 한다.
SHA-3와 Keccak이 완전히 일치하는 함수는 아니다. SHA-3는 Keccak의 패딩 길이를 변경한
것으로 FIPS202에서 내용을 확인할 수 있다.
자세히는 모르지만.. 이러한 구조로 암호화 하는 것 같다.
현재 이더리움은 POS 합의 알고리즘을 사용하고 있다.
과거 POW 합의 알고리즘을 사용할 때, 비트코인의 POW 는 타겟값보다 낮은 해시를 얻을 때 까지
논스 값을 바꾸는 형식으로 상대적으로 간단, 명확했다.
따라서, 해당과정을 수행하는데 효과적인 특수 제작된 ASIC 이 사용되었다.
ASIC 이란?
세계 최초의 채굴기 생산 회사가 된 Bitmain에서 처음으로 SHA256 계산에 특화된 반도체를 만들면서 ASIC의 역사가 시작되었다. 그 반도체로 만든 기계가 바로 Antminer.
한마디로 ASIC 은 SHA256 계산에 특화된 채굴기이다.
ASIC 이 도입되면, 자본의 규모가 채굴 성공 여부에 큰 영향을 미치기에, 이더리움에서는
이 문제를 해결하고자 POW 에 Ethash 라는 방법을 사용했다.
Ethash 는 대거 알고리즘과 하시모토 알고리즘의 조합으로 개선된 대거-하시모토 알고리즘을 사용.
30000만 블록마다 DAG 를 새로 생성하고 그 크기를 증가시켜 ASIC 주문 제작이 무의미하게했다.
이더리움의 황서 11.5.1 에는 POS 로 바뀐 지금까지도 ethash 에 대한 내용이 남아있다.
ethash 는 seed 를 먼저 생산하고, seed 로 부터 cache 를,
cache 로 부터, dataset 을 생성하고 있음을 알 수 있다.
dataset 은 3만 블록마다 변경되며, cache 는 light client,
dataset 은 full client, miner 가 저장하고 있음을 알 수 있다.
채굴자는 단지 숫자를 변경시키는 행위(논스 값 찾기) 를 넘어서, 지속적으로
dataset 을 읽는 행위도 해야한다.
- 전처리된 헤더와 현 논스 값을 해싱하여 초기 mix 를 세팅한다.
결과로 mix 0 값이 생성된다.
- DAG 파일을 먼저 준비해야 한다.
전체 DAG 파일 중에서, 128바이트 크기의 랜덤한 페이지를 불러온다.
128바이트는, 2개의 DAG 페이지의 크기에 해당한다.
- mix, DAG 를 결합하는 과정을 수행한다. 이 과정을 64번 수행.
- 결과로 32비트의 결괏값을 생성, mix digest 값과 target 값을 비교.
mix digest 값이 더 작으면 성공.