검수요청.png검수요청.png

스크립트 알고리즘

위키원
이동: 둘러보기, 검색
라이트코인(Litecoin)

스크립트 알고리즘(scrypt algorithm)는 콜린 퍼시벌(Colin Percival)이 개발한 암호화 추출 알고리즘이다. 스크립트 알고리즘은 비트코인의 주요 대안 중 하나인 라이트코인 작업에 사용되는 알고리즘을 채택했다. 에이식(ASIC)이 존재하지 않을 때 특히 인기가 있었으며, 이제 스크립트의 채굴 장비는 드문 일이 아니어서 비디오 카드에서 이 알고리즘을 사용한 채굴 동전은 의미가 없다.[1]

개요

2016년 국제인터넷표준화기구(IETF, Internet Engineering Task Force)에 의해 RFC-7914로 스크립트 알고리즘이 발표되었다. 단순화된 버전의 스크립트는 다수의 암호 해독기에 의해 업무 입증 계획으로 사용되었는데, 처음에는 테네브릭스(Tenebrix)에서 ArtForz라는 익명의 프로그래머에 의해 구현되었고, 곧이어 페어브릭스(Fairbrix)와 라이트코인(Litecoin)에 의해 구현되었다.[2] 스크립트 알고리즘은 라이트코인이 출시되면서 암호화폐 채굴에 처음 등장했다.[3]

스크립트 알고리즘의 이점으로 비트코인에 비해 낮은 블록 생성 시간과 에이식(ASIC) 저항성을 꼽을 수 있다. 역설적이게도 스크립트 알고리즘은 본래 GPU에 의한 비트코인채굴이 지나치게 중앙집중적이라고 생각한 라이트코인 개발자들이 내놓은 대안으로 GPU 채굴을 방지하기 위해 라이트코인에 적용되었다. 하지만 어떤 이유에서인지 스크립트는 본래의 목적을 달성하지 못했으며 네트워크는 GPU 채굴 장비로 가득 차게 됐다. 스크립트 알고리즘은 콜린 퍼 시벌(Colin Percival)이 온라인 백업 서비스인 Tasnap에 활용할 목적으로 개발했는데, 이 서비스는 스크립트가 커스텀 하드웨어에 의한 공격 실행 비용을 엄청나게 높이며 또한 상당수의 주요 현용 암호화 알고리즘에 비해 수천 배 안전하다고 주장한다. 실제로 스크립트 알고리즘은 많은 양의메모리를 요구하여 대규모 사용자 하드웨어 공격을 수행하는 데에 있어서 많은 비용이 들도록 특별히 설계되어있다. 그 때문에 안전하지만, 한편으로는 메모리가 많기 때문에 수행하는 데에 있어서 시간이 많이 든다는 단점도 있다.[3]

특징

스크립트 알고리즘에 대한 공격자는 브루트 포스(Brute Force) 공격 실행을 위해 메모리 사용량을 늘리거나 반대로 메모리 사용량을 줄이고 느린 공격을 실행할 수밖에 없는데 이러한 상쇄는 의도적인 효과로 스크립트 알고리즘을 아주 안전하게 해준다. 이는 라이트코인 개발자 찰리 리(Charlie Lee)가 코인 알고리즘 으로 스크립트를 채택한 이유이기도 하다. 채굴자 입장에서 보면 스크립트는 GPU와 잘 맞으며 대부분의 스크립트 채굴 장비는 GPU 기반이다. 스크립트는 SHA-256에 비해 많은 메모리를 필요로 하나 SHA-256에 비해 전력 소모가 적기 때문에 결과적으로는 상쇄되는 셈이 된다. 채굴장비 의 전력소모량이 낮음에 따라 발열과 소음 또한 적어지며 그렇다 해도 스크립트 채굴을 한다면 여름 전기세는 늘어나고 겨울 난방비는 줄어드는 결과를 가져올 수 있다.[3]

스크립트 채굴에 사용되는 에이식(ASIC) 또한 시중에 나와 있기 때문에 스크립트를 사용하는 GPU 채굴자의 경우 어느 정도의 경쟁은 예상해야만 한다는 사실을 유념해야 한다. 스크립트 아식이 점점 많이 제작됨에 따라 스크립트 코인의 채굴난이도 는 올라가는 반면, 채굴자의 개개인의 시장점유율과 수익성은 떨어지리라 전망된다. 일부 아식의 경우 SHA-256과 스크립트를 동시에 채굴할 수도 있기 때문에 스크립트 코인을 채굴하려 한다면 아식을 옵션으로 고려하면 더욱 좋다.[3]

라이트코인 스크립트 알고리즘

스크립트 알고리즘의 이점으로 비트코인에 비해 낮은 블록생성 시간과 아식 저항성을 꼽을 수 있다. 역설적이게도 스크립트는 본래 GPU에 의한 비트코인 채굴을 방지하기 위해 라이트코인에 적용되었다. 하지만 어떤 이유에서인지 스크립트는 본래의 목적을 달성하지 못했으며 네트워크는 GPU 채굴 장비로 가득 차게 됐다.[4] 스크립트는 잘 알려진 SHA-256 해시 함수의 대안으로 암호화폐 라이트코인에서 처음 사용된 해시 함수로 스크립트 및 SHA-256은 각각 라이트코인 및 비트코인 프로토콜 내에서 마이닝 알고리즘으로 사용된다. 둘 다 작업 증명 내에서 작동 후보 블록 헤더가 해시 될 때 결과 출력이 주어진 목표와 같거나 낮도록 광부가 논스 값을 찾는 데 필요한 합의 메커니즘이다. 예를 들면 다음과 같다.

  1. 넌스가 "12345" 변수 인 경우 해시 될 블록 헤더에 다음과 같이 배치한다.
  2. x = 해시 출력값이다. x = Scrypt (블록 헤더)
결과 해시 출력값 (이 경우 'x')이 목표를 초과하는 것으로 판명되면 광부는 다시 시도해야 한다. 그런 다음 광부는 넌스를 다른 변수(예 :90872)로 변경하고 이를 블록헤더 안에 넣는다. 결과 해시 출력값이 목표보다 낮은 것으로 판명되면, 광부의 블록은 검증을 위해 네트워크의 라이트코인 노드로 릴레이된다.
  • 스크립트 암호화
암호화는 빠르고 간단한 알고리즘이며 새로운 디지털 통화가 도입됨에 따라 더 많은 SHA-256보다 선호된다. 스크립트는 기존 CPU에서 실행하기가 훨씬 쉬우며 SHA-256을 사용하는 것보다 적은 에너지를 소비하는 경향이 있고, 결과적으로 대부분의 개인 광부들이 선호한다. SHA-256과 비교하여 성공적인 코인 채굴을 위한 스크립트의 해시 비율은 일반적으로 초당 킬로 해시 (KH / s) 또는 초당 메가 해시 (MH / s) 난이도 범위에 있으며 일반적으로 컴퓨터 없이도 달성 할 수 있다. 아식(ASIC) 또는 기타 하드웨어. 일부는 이 간단한 시스템이 보안 문제에 더 취약하고, 트랜잭션 처리 시간이 빠르면 시스템이 데이터를 보다 철저하게 살펴볼 수 있기 때문이다.[5] 그러나 지금까지 아무도 그것을 실제로 증명하지 못했다.
  • SHA-256
SHA-256은 복잡하며 비트코인과 코드를 기반으로 하는 대부분의 통화에서 사용된다. SHA-256을 사용한 데이터 블록 처리는 속도가 느려지는 경향이 있어 결과적으로 트랜잭션 처리 시간은 몇 초가 아닌 몇 분 만에 측정되지만, 더 철저하고 오류의 여지가 적다. 또한 전문가들은 전반적인 데이터 보안에 더 좋다고 말한다. SHA-256을 사용하여 코인을 성공적으로 채굴하려면 종종 초당 기가 해시 (GH / s) 이상의 해시 속도가 필요하다. 이것은 일반적으로 개별 광부가 사용하기가 더 어렵다는 것을 의미하고, 아식(ASIC) 또는 채굴 작업만 수행하도록 설정된 다른 별도의 컴퓨팅 장치를 자주 사용하는 사람들. 일부 광부는 채굴 작업에 기계 또는 적어도 아식을 전념할 수 없음으로 종종 채굴 풀에 합류한다.[5]
  • 암호화, SHA-256 차이점
스크립트 및 SHA-256 해시 함수는 각각의 함수에 대해 가능한 많은 솔루션을 생성하기 위해 원시 계산 능력이 필요하므로 계산 집약적이다. 만약 비트인포차트에 따르면 라이트코인 네트워크의 현재 해시 속도는 146TH / s이다. 이것이 의미하는 바는 라이트코인 프로토콜에서 채굴자에 의해 초당 146조 해시 계산이 수행되고 있다는 것이다. 그러나 스크립트 기능과 SHA-256 기능의 차이점은 메모리 집약적이며, 스크립트는 채굴자가 숫자를 빠르게 생성해야 할 뿐만 아니라 생성된 숫자가 프로세서의 RAM(Random Access Memory)에 저장되므로 결과를 제출하기 전에 액세스해야 하기 때문에 메모리가 많이 사용된다. 전체 해싱 성능 측면에서 스크립트 기반 프로토콜은 SHA-256 기반 프로토콜보다 해시 속도가 느리며, 현재 블록체인 인포 에 따르면 비트코인 프로토콜의 해시 비율은 약 45,000,000,000TH / s로 Litecoin보다 훨씬 높다.[6] 주요 차이점으로는 해시 난이도가 증가함에 따라 코인을 성공적으로 채굴하는 데 필요한 해시 비율도 증가한다.
  • 스크립트 마이닝 알고리즘
스크립트 해시 기능은 라이트코인 개발팀에 의해 초기에 구현되어 알려진 아식(ASIC)이 라이트코인 네트워크에서 마이닝 될 수 없도록 한다. 암호화폐를 채굴할 때 사용자는 일반적으로 CPU, GPU 또는 아식 채굴기 중에서 선택할 수 있으며, 아식은 CPU 및 GPU보다 계산상 우수하여, 초당 더 많은 해시를 생성 할 수 있다. 따라서 아식 이외의 다른 장치를 사용하여 암호화폐를 채굴하는 광부에게는 불리한 점이 있으나 스크립트 마이닝 알고리즘은 알고리즘이 메모리를 많이 사용하므로 아식 마이닝이 발생하지 않도록 하기 위해 도입되었다. 아식 채굴자는 처음에는 스크립트 기반 프로토콜을 채굴하기에 적합하지 않았으므로 CPU와 GPU를 사용한 채굴자는 경쟁력을 유지할 수 있었으나 시간이 지남에 따라 스크립트 마이닝 알고리즘의 초기 ASIC- 저항이 사라졌고, 스크립트 알고리즘을 사용하는 모든 암호화폐의 효율적인 마이닝을 허용하는 스크립트 가능 아식이 개발되었다. 결과적으로 CPU와 GPU는 아식과 비교할 때 열등한 계산 능력으로 인해 라이트코인 네트워크에서 더 이상 유효한 마이닝 도구가 아니다.[6]

구성

스크립트 알고리즘에는 다음과 같은 매개 변수가 포함된다.

* Passpharse : 해시할 문자열
* Salt : Rainbow 테이블 공격으로부터 보호하기 위해 해시를 수정하는 문자열
* N : CPU/메모리 비용 매개 변수
* P : 병렬화 매개 변수, 을 만족하는 양의 정수
* dkLen : 파생 키의 옥텟에서 의도된 출력 길이, 을 만족하는 양의 정수
* r : 순차 메모리 읽기 크기와 성능을 미세 조정하는 블록화 매개변수(8이 일반적으로 사용됨)
* hLen : 해시 함수의 8진수 길이
* MFlen : 혼합 기능 출력의 8진수 길이(RFC7914에서 r*128로 정의됨)[7]
  • 함수 암호화
입력 : 
암호 : 해시 될 바이트 문자열 바이트
소금 : 무작위 소금 바이트
CostFactor (N) : 정수 CPU / 메모리 비용 매개 변수 
BlockSizeFactor (r) : 정수 블록 크기 매개 변수 (8이 일반적으로 사용됨) 
ParallelizationFactor (p) : 정수 병렬화 매개 변수. (1 .. 32 -1 * hLen / MFlen) 
DesiredKeyLen : 정수 원하는 키 길이 (바이트) 
출력 : 
DerivedKey : 바이트 바이트 배열, DesiredKeyLen long 

1 단계. 고가의 솔트 
블록 생성 Size ← 128 * BlockSizeFactor // SMix 믹싱 기능 출력의 길이 (바이트) (예 : 128 * 8 = 1024 바이트) 

PBKDF2를 사용하여 초기 128 * BlockSizeFactor * p 바이트의 데이터 생성 (예 : 128 * 8 * 3 = 3072 바이트) 
결과를 p 요소 의 배열로 취급한다 . 각 항목은 블록 크기 바이트 (예 : 3 개의 요소, 각 1024 바이트)이다. 
[] ← PBKDF2 HMAC-SHA256 ( 비밀번호 문구 , 소금 , 1, 블록 크기 * 병렬화 팩터) 

ROMix 기능을 사용하여 B 2 CostFactor 시간 에서 각 블록을 혼합 
한다. i ← 0 ~ p-1 do 
 ← ROMix ( , 2 CostFactor )에 대해 각 블록을 병렬로 혼합 할 수 있음  

B의 모든 원소는 고가의 새로운 고가의 소금이다.
 소금 ←  // 여기서 || 는 연결 

단계 2. PBKDF2를 사용하여 원하는 바이트 수를 생성하지만 고가의 salt를 사용하여 
리턴 PBKDF2 HMAC-SHA256 (Passphrase, expensiveSalt, 1, DesiredKeyLen)을 생성
  • 기능 ROMix (블록, 반복)
X의 반복 복사본 만들기
X ← 블록
위해 내가 0 ← 에 반복-1 할 
V를 내가 X를 ←
X ← 블록 믹스 (X) 

위한 내가 ← 0 으로 반복 -1- 수행 
의 처음 8 바이트로 변환 // 마지막 (인텔) 형식 리틀 엔디안을 가정하는 UINT64 행 X 64 바이트 블록
j ← 정수 (X) mod N 
X ← 블록 믹스 () 
X를
반환
Integerify는 {0, 1}에서 전단 사 함수 K 행 {0, ..., 2 K - 1}.
  • 기능 블록 혼합 (B)
블록 B는 r 128 바이트 청크 (2r 64 바이트 청크에 해당)
r ← 길이 (B) / 128;

B를 2r 64 바이트 척의 배열로 취급 
[ ] ← B

X ←  에 대한 난 0 ←는 하기 2R-1을 수행 
X ← Salsa20 / 8 (X의 배타적 B의 I ) 64 바이트에 64 바이트의 // Salsa20 / 8 해시 
Y 제가 X를 ←

return ← 
Salsa20 / 8 은 Salsa20 의 8 라운드 버전이다.

각주

  1. 프로스토코인, 〈암호화폐 마이닝 알고리즘 (표 + 전체 설명)
  2. 위키피디아 - https://en.bitcoinwiki.org/wiki/Scrypt
  3. 3.0 3.1 3.2 3.3 야옹메롱, 〈(크립토알고리즘) 개념 및 종류 - SHA-256, 스크립트(Scrypt), 스크립트-차차(Scrypt-Chacha), X11, Ethash〉, 《네이버 블로그》, 2019-03-21
  4. GFI코리아, 〈스크립트 채굴과 비트코인 채굴: 채굴자를 위한 완전정복〉, 《네이버》, 2015-03-11
  5. 5.0 5.1 SliceFeeds, 〈SHA-256 및 암호화 마이닝 알고리즘〉, 《CoinPursuit》
  6. 6.0 6.1 비 솔라 아솔로, 〈Litecoin Scrypt 알고리즘 설명〉, 《마이크립토피디아》, 2018-12-18
  7. 비트코인위키 - https://en.bitcoinwiki.org/wiki/Scrypt

참고자료

같이 보기


  검수요청.png검수요청.png 이 스크립트 알고리즘 문서는 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.