스크리프
scrypt| 일반 | |
|---|---|
| 디자이너 | 콜린 퍼시벌 |
| 초판 | 2009 |
| 암호 상세 | |
| 다이제스트 사이즈 | 변수 |
| 블록 크기 | 변수 |
| 라운드 | 변수 |
암호학에서 스크립트("ess crypt")[1]는 2009년 3월 Colin Percival에 의해 개발된 패스워드 기반의 키 파생 기능입니다.원래는 Tarsnap 온라인 백업 [2][3]서비스입니다.이 알고리즘은 대량의 메모리를 필요로 하는 대규모 커스텀 하드웨어 공격을 실행하는 데 비용이 많이 들도록 특별히 설계되었습니다.2016년에 스크립트알고리즘은 IETF에 의해 RFC 7914로 [4]발행되었습니다.스크립트의 단순화된 버전은 많은 암호 화폐에 의해 작업 증명 스킴으로 사용되며, 처음에는 Tenebrix의 ArtForz라는 익명의 프로그래머에 의해 구현되었고, [5]곧이어 Fairbrix와 Litecoin에 의해 구현되었다.
서론
패스워드 베이스의 키 파생 함수(패스워드 베이스의 KDF)는 일반적으로 계산 부하가 높도록 설계되어 있기 때문에 계산에는 비교적 오랜 시간이 걸립니다(예를 들어 수백 밀리초).정규 사용자는 1회 조작(인증 등)당 1회만 기능하면 되기 때문에 소요시간은 무시할 수 있습니다.단, 무차별 공격에서는 수십억 번 작업을 수행해야 할 가능성이 높으며, 이 시점에서 시간 요건이 중요해지고 이상적으로는 금지됩니다.
이전의 패스워드 베이스의 KDF(RSA Laboratories의 일반적인 PBKDF2 등)는, 자원 요구가 비교적 낮기 때문에, 고도의 하드웨어나 메모리를 필요로 하지 않습니다.따라서 하드웨어(ASIC 또는 FPGA 등)에 쉽고 저렴하게 실장할 수 있습니다.이를 통해 충분한 자원을 가진 공격자는 하드웨어에 수백 또는 수천 개의 알고리즘 구현을 구축하고 각각 다른 키 공간의 서브셋을 검색함으로써 대규모 병렬 공격을 시작할 수 있습니다.이를 통해 무차별 공격 완료에 필요한 시간을 사용 가능한 구현 수로 나누어 합리적인 기간으로 단축할 수 있습니다.
스크립트 함수는 알고리즘의 자원 요구를 증가시킴으로써 이러한 시도를 방해하도록 설계되어 있습니다.특히 이 알고리즘은 다른 패스워드 기반의 KDF에 [6]비해 대용량의 메모리를 사용하도록 설계되어 하드웨어 구현의 규모와 비용이 훨씬 비싸고, 따라서 공격자가 일정량의 재무자원에 대해 사용할 수 있는 병렬화의 양을 제한합니다.
개요
스크립트의 메모리 요건은 알고리즘의 일부로 생성되는 의사난수 비트스트링의 큰 벡터에서 발생합니다.벡터가 생성되면 그 요소들은 의사 랜덤 순서로 접근되고 파생된 키를 생성하기 위해 결합된다.간단한 실장에서는, 필요에 따라서 액세스 할 수 있도록, 전체 벡터를 RAM 에 보관 유지할 필요가 있습니다.
벡터의 소자는 알고리즘으로 생성되기 때문에 각 소자는 필요에 따라 즉시 생성될 수 있으며, 한 번에 하나의 소자만 메모리에 저장되므로 메모리 요구 사항을 크게 줄일 수 있습니다.그러나 각 요소의 생성은 계산 비용이 많이 드는 것을 의도하고 있으며, 함수의 실행 내내 여러 번 요소에 액세스할 것으로 예상된다.따라서 대용량 메모리 요건을 없애기 위해 속도 면에서 상당한 트레이드오프가 발생합니다.
이러한 시간-메모리 트레이드오프는 컴퓨터 알고리즘에 존재하는 경우가 많습니다. 즉, 메모리를 더 많이 사용하는 대신 속도를 높일 수도 있고, 더 많은 작업을 수행하고 더 오래 걸리는 대신 메모리 요구 사항을 줄일 수도 있습니다.스크리프트의 배후에 있는 아이디어는 어느 방향으로든 이 트레이드오프를 의도적으로 비용이 많이 들게 하는 것입니다.따라서 공격자는 많은 리소스가 필요하지 않지만(따라서 제한된 비용으로 대규모 병렬화가 가능) 매우 느리게 실행되거나, 더 빠르게 실행되지만 메모리 요구사항이 매우 크기 때문에 병렬화하는 데 비용이 많이 드는 구현을 사용할 수 있습니다.
알고리즘.
함수 스크립트 입력:이 알고리즘에는 다음 파라미터가 포함됩니다.패스프레이즈:해시되는 문자의 바이트 문자열 Salt: Rainbow 테이블 공격으로부터 보호하기 위해 해시를 수정하는 랜덤 문자의 바이트 문자열: Integer CPU/memory cost factor(N): 2(예: 1024) BlockSize Factor(r):Integer blocksize 파라미터: 순차 메모리 읽기 크기와 성능을 미세 조정합니다. (8이 일반적으로 사용됩니다) Parallelization Factor (p):Integer Parallelization 파라미터 (1 .. 2-132 * hLen / MFlen )DesiredKeyLen (dkLen):Integer 원하는 키 길이(바이트 단위)(파생 키의 옥텟 단위 출력 길이, dkLen ( (2-132) * hLen . )hLen : Integer 해시 함수의 옥텟 단위 길이(SHA256의 경우 32).MFlen: Integer 혼합 함수 출력의 길이(아래 SMIX). RFC 7914에서 r * 128로 정의되어 있습니다.출력:DerivedKey: 바이트 배열, DesiredKeyLen 긴 스텝 1. 값비싼 salt blockSizeFactor ← 128*BlockSizeFactor // SMix 혼합 함수 출력의 길이(바이트 단위) (예: 128*8 = 1024바이트) PBKDF2를 사용하여 초기 128*BlockSizeFactor*p 바이트의 데이터(예: 128*8*3 = 3072바이트)를 생성합니다.결과를 p 요소의 배열로 간주합니다. 각 엔트리는 블록 크기 바이트입니다(예: 3개의 요소, 각 1024바이트). [B0...Bp−1하는 각 블록 BCostfactor번 ROMix 기능(하나의 블록을 병렬로 섞일 수 있)을 사용하는데 PBKDF2HMAC-SHA256(Passphrase, 소금, 1, blockSize*ParallelizationFactor)을 섞← 나는 ← 0으로 p-1 하고 ← ROMix(비, CostFactor)모든 요소의 B는 우리의 새로운" 비싼"소금 expensiveSalt ← B0∥B1∥B2∥...∥Bp-1을 끓여어디 ∥은 concatenat.이온 Step2. PBKDF2를 사용하여 원하는 바이트 수를 생성하지만 방금 생성한 비싼 솔트를 사용하여 PBKDF2HMAC-SHA256(패스프레이즈, 고가의 솔트, 1, 원하는 키렌)를 반환합니다.
여기서 PBKDF2(P, S, c, dkLen) 표기법은 RFC 2898에 정의되어 있습니다.여기서 c는 반복 횟수입니다.
이 표기법은 RFC 7914에서 c =1의 PBKDF2의 사용을 지정하기 위해 사용됩니다.
함수 ROMix(블록, 반복) X ← i에 대한 블록의 반복 복사본 만들기 ← 0에서 1까지i V ← X ← i에 대한 BlockMix(X) ← 0에서 1까지 j ← Integerationify(X) 반복 수정 Xor X(ix) 여기서 RFC 7914는Integerify(X)X의 마지막 64바이트를 리틀엔디안1 정수 A로 해석한 결과입니다.
반복은 2의 N제곱과 같기 때문에 실제로는 X의 마지막 64바이트 중 첫 번째 천장(N/8) 바이트만 계산하면 됩니다(리틀 엔디안 정수2 A로 해석됩니다).Integerify(X) mod Iterations = A1 mod Iterations = A2 mod Iterations.
기능 블록 믹스(B):블록 B는 r 128바이트 청크(2r 64바이트 청크에 상당) r ← 길이(B) / 128입니다.B를 2r 64바이트 청크의 배열로 취급합니다 [B0...B2r-1] ← B X ← B2r−1(i) ← 0 ~ 2r-1 do X ← Salsa20/8(X xori B) // Salsa20/8 해시(64바이트 ~ 64바이트i) ← X 반환 ← Y'Y02'...[Y2r−2] [Y13] [Y]...①Y2r−1
여기서 Salsa20/8은 Salsa20의 8라운드 버전입니다.
암호 화폐 사용
스크립트는 많은 암호화 화폐에서 작업 증명 알고리즘으로 사용됩니다.Tenebrix용으로 처음 구현(2011년 9월 출시)되었으며, 스크립트 [7][8]알고리즘을 채택한 Lite coin 및 Doge coin의 기반이 되었습니다.GPU는 [9]CPU에 비해 처리능력(일부 알고리즘의 경우)이 월등히 높은 경향이 있기 때문에 스크립트를 사용하는 암호화 화폐의 마이닝은 그래픽 처리장치(GPU)에서 종종 이루어진다.이로 인해 2013년 [10]11월과 12월에 이들 통화의 가격이 상승함에 따라 하이엔드 GPU가 부족하게 되었습니다.
2014년 5월 현재 스크립트 기반 암호화 [citation needed]화폐에 특화된 ASIC 마이닝 하드웨어를 이용할 수 있습니다.
효용.
스크립트 유틸리티는 2009년 5월에 Colin Percival에 의해 스크립트 키 파생 기능의 [2][3]시연으로 작성되었습니다.대부분의 Linux 및 BSD 배포판에서 사용할 수 있습니다.
「 」를 참조해 주세요.
- 암호 Hashing 대회 2015년 Argon2–을 따냈습니다.
- –blowfish-based password-hashing 기능bcrypt
- Bcrypt –blowfish-based 플랫폼 간에 파일 암호화 유틸리티 2002[11][12][13][14]에서 성장하였다.
- 크립트 – 유닉스 C라이브러리 함수이다.
- 묘소 – 유닉스 유틸리티
- – 유틸리티 ccrypt
- 키 파생 기능
- 키 스트레칭
- – 유틸리티 mcrypt
- 보강 – 널리 사용되는 표준Password-Based 키 미분 함수 2.
- PufferFishcache-hard 암호 해시 기능 개선bcrypt 디자인에 –.
- Space–time 절충
레퍼런스
- ^ "Colin Percival". Twitter. Archived from the original on 17 February 2019.
- ^ a b "The scrypt key derivation function". Tarsnap. Retrieved 21 January 2014.
- ^ a b "SCRYPT(1) General Commands Manual". Debian Manpages. Retrieved 2 March 2022.
- ^ Percival, Colin; Josefsson, Simon. "The scrypt Password-Based Key Derivation Function". RFC Editor. Retrieved 13 December 2021.
- ^ Alec Liu. "Beyond Bitcoin: A Guide to the Most Promising Cryptocurrencies".
- ^ 강해 키 미분 비아 순차적 Memory-Hard 기능들, 콜린 퍼시벌.
- ^ Andreas M. Antonopoulos (3 December 2014). Mastering Bitcoin: Unlocking Digital Cryptocurrencies. O'Reilly Media. pp. 221, 223. ISBN 9781491902646.
- ^ "History of cryptocurrency". Archived from the original on 11 June 2016. Retrieved 27 June 2014.
- ^ Roman Guelfi-Gibbs. Litecoin Scrypt Mining Configurations for Radeon 7950. Amazon Digital Services.
- ^ Joel Hruska (10 December 2013). "Massive surge in Litecoin mining leads to graphics card shortage". ExtremeTech.
- ^ Http://bcrypt.sourceforge.netbcrypt 파일 암호화 프로그램 홈페이지.
- ^ "bcrypt APK for Android – free download on Droid Informer". droidinformer.org.
- ^ "T2 package – trunk – bcrypt – A utility to encrypt files". t2sde.org.
- ^ "Oracle GoldenGateのライセンス". docs.oracle.com.