스마트폰과 PC를 설정하는 방법. 정보 포털
  • 윈도우 10
  • Sha256 암호 해독 및 마이닝 기능. Sha256 암호 해독 및 마이닝 기능 sha 256 알고리즘이란

Sha256 암호 해독 및 마이닝 기능. Sha256 암호 해독 및 마이닝 기능 sha 256 알고리즘이란

오늘날 많은 사람들이 암호화폐, 비트코인 ​​및 기타 관련 개념에 대해 이미 들었지만 디지털 화폐 인프라 자체를 이해하기 위한 피상적인 지식만으로는 충분하지 않습니다. 외부 셸 뒤에는 암호화폐를 고유하게 만드는 더 흥미롭고 복잡한 메커니즘이 있습니다. 이러한 요소 중 하나는 비트코인과 가장 현대적인 알트코인의 기반이 되는 SHA-256 알고리즘입니다. 작업의 기본 원칙을 고려하십시오.

SHA-256 알고리즘은 어떻게 작동합니까?

채굴 과정에서 채굴자가 트랜잭션을 확인하고 블록체인에 추가할 수 있는 특정 수학적 문제를 해결한다는 것은 비밀이 아니지만 이 프로세스는 내부에서 어떻게 구현됩니까? 여기서 SHA-256 알고리즘이 작동합니다.

정확히 말하면 SHA-256은 알고리즘이라기 보다는 미국 NSA(National Security Agency)에서 개발한 암호화 해시 함수입니다. 주요 임무는 임의의 데이터 세트를 고정 길이의 값으로 바꾸는 것입니다. 즉, 수십, 수백 또는 수천 개의 요소로 구성된 데이터 배열이 있는 경우 특정 크기의 일반적인 형태로 축소할 수 있습니다.

최종 값의 특징은 원래 배열과 비교할 수 있지만 원래 형식으로 변환할 수 없다는 것입니다.

SHA-256 알고리즘은 마이닝과 어떤 관련이 있습니까?

그래픽 카드 또는 프로세서에서 코인을 채굴할 때 콘솔에 "0aef41a3b 수락됨" 형식의 메시지가 표시됩니다. 0aef41a3b는 모든 광부가 찾고 있는 해시, 즉 일부 큰 데이터 배열의 축소된 복사본입니다. 이 소수의 문자는 본질적으로 수백, 수천, 수백만 개의 유사한 행으로 이루어진 블록입니다.

광부와 그 컴퓨팅 장비의 주요 임무는 특정 수의 선행 0이 있는 블록에 대한 해시를 찾는 것입니다. 가능한 모든 옵션을 열거하려면 컴퓨터의 해당 성능이 필요하기 때문에 엄청난 양의 컴퓨팅 성능이 필요합니다.

또한, 채굴의 복잡성은 자연스러운 경쟁에 의해 강화됩니다. 더 강력한 컴퓨터나 광부가 있는 사람들은 옵션을 더 빨리 분류하여 해시를 찾습니다. 따라서 오늘날 중앙 프로세서를 사용하여 최소한 1개의 해시를 "해석"할 수 있기를 바라는 것은 어리석은 일입니다. 그러한 사건의 확률은 수백만 분의 1 또는 수천만 분의 1입니다.

알고리즘을 사용하는 코인SHA-256?

오늘날 비트코인 ​​외에도 다른 암호화폐가 SHA-256에서 작동합니다. 예를 들면 다음과 같습니다.

  • 제타코인.
  • 이름 동전.
  • 피어코인.
  • 이머코인.

암호화폐 부문과 관련하여 일부 단점에도 불구하고 SHA-256 알고리즘을 기반으로 하는 코인은 계속해서 그 위치를 유지하고 있습니다. 현재 코인당 약 750만원의 가격에 거래되고 있으며, 대소문자도 랭킹 1위인 비트코인만 가치가 있는 것.

이 출판물과 함께 우리는 앞으로 출판될 짧은 기사 시리즈를 시작합니다. 이 기사 시리즈의 내용은 주로 다양한 유형의 암호화 알고리즘에 대해 설명합니다. 우리는 암호 알고리즘이 무엇인지, 의미하는 바가 무엇인지, 어떤 디지털 코인이 이러한 알고리즘을 구현하려는 아이디어를 처음으로 내놓았는지에 대한 완전한 그림을 제공하고 기타 여러 질문에 답할 것입니다. 오늘 우리는 SHA-256으로 시작할 것입니다. SHA-256은 여러분 모두는 아닐지라도 대부분의 독자들에게 친숙할 것입니다.

그렇다면 SHA-256은 정확히 무엇입니까? 앞서 언급했듯이 이것은 알고리즘입니다. 더 정확하게 말하면 이것은 당신과 나의 "친구들"인 미국 국가안보국(National Security Agency)이 개발한 암호화 해시 함수입니다. 잠깐, 엎드려 절하지 마십시오. 걱정할 것이 없습니다. 조금만 참으면 지루하지 않을 것이라고 약속합니다.

이 해시 함수의 주요 작업은 데이터 항목 집합을 고정 길이 값으로 변환(또는 해시)하는 것입니다. 이 길이 값은 이 원본 데이터를 추출할 가능성 없이 원본 데이터의 복사본과 비교됩니다. Wikipedia에 게시된 이 공식 설명은 훌륭하고 과학적으로 타당하지만, 예를 들어 저는 그런 언어를 사용하지 않습니다. 그리고 나는 당신도 대부분 그렇게 할 것이라고 확신합니다. 그러므로 이 "현상"의 의미를 우리 나름대로, 간단하게 설명하겠습니다.

우리 모두 알고 있듯이 SHA-256 코인을 채굴할 때 CPU 또는 GPU를 사용하여 작업을 해결합니다. 변환 프로세스는 예를 들어 "Accepted 0aef41a3b" 문자열과 같이 채굴용 프로그램의 인터페이스에 표시됩니다. 값 0aef41a3b는 해시입니다. 수신한 해시코드에 해당하는 디코딩용 데이터이다. 더 간단하게 말하면 해독된 데이터의 짧은 줄인 반면 데이터의 주요 부분(또는 블록)은 수백만은 아니지만 수천 줄의 이러한 줄로 구성됩니다.

이것은 또한 올바른 코인 블록을 찾기 전에 일반적으로 많은 문제를 해결해야 하는 이유를 설명합니다. 디코딩된 문자열이 잠금을 해제하는 데 필요한 정확한 값을 갖거나 내 데이터(또는 블록)가 될 것이라는 천, 만, 십만 또는 백만 결정 중 한 번만 기회가 있습니다. 그것은 복권을 하는 것과 같지만 우리 중 누구보다 더 빠르고 더 잘 당첨된 조합을 계산할 수 있는 기계를 사용합니다.

SHA-256 프로토콜을 사용하여 해싱 문제를 해결하려면 강력한 하드웨어가 필요하다고 생각하십니까? 여기에는 어느 정도 의미가 있습니다. 처리 능력을 많이 사용할수록 코인을 채굴할 가능성이 높아집니다. 그러나 당신이 유일한 채굴자가 아니라는 것을 명심하십시오. 더 강력한 하드웨어를 가진 사람들이 있습니다. 걱정하지 마십시오. 승리할 수 있는 모든 기회가 있습니다. 그것은 복권을 하는 것과 같습니다. 언제 운이 좋을지 모릅니다!

이제 SHA-256 알고리즘으로 돌아갑니다. 암호화폐는 SHA-256이 사용되는 유일한 예가 아닙니다. 비슷한 방식으로 작동한다고 가장 많이 들어본 프로토콜이 몇 가지 있습니다. 이러한 프로토콜은 SSL, SSH, PGP 및 기타 여러 가지입니다. SSL 인증서를 사용하여 보안 웹 사이트에 액세스할 때마다 SHA-256이 사용됩니다. 나는 당신이 그것에 대해 생각하지 않았다, 그렇지? 우리 모두는 시간이 지나면서 새로운 것을 배웁니다!

이제 SHA-256 프로토콜에 대해 이야기합시다! 오늘날 가장 유명한 대체 통화인 비트코인이 있을 것입니다. 그러나 이것이 여기서 멈출 이유가 아닙니다. 최근에 Zetacoin, Ocoin, Tekcoin 등의 새로운 SHA-256 코인이 급증하고 있습니다. 그러나 NameCoin 등과 같이 이전에 출시된 코인도 빼놓을 수 없습니다.

다음 글에서는 Scrypt 알고리즘의 특징을 살펴보겠습니다!

, "SHS(Secure Hash Standard)", 미국 상무부, 2012년 3월

자귀:
FIPS 연방 정보 처리 표준.
SHA 보안 해시 알고리즘(강력한 해싱 알고리즘).
단어는 선택한 SHA 알고리즘에 따라 32비트(4바이트) 또는 64비트(8바이트) 길이의 부호 없는 변수입니다.

SECURE HASH STANDARD(SHA-1 및 SHA-2 암호화 기능 제품군)

암호화 기능의 SHA 제품군은 두 가지 하위 집합으로 나뉩니다. 알고리즘 자체 SHA-1(1995년 발행 - FIPS PUB 180-1) 및 일반 이름으로 여러 알고리즘 SHA-2(2002년에 게시됨 - FIPS PUB 180-2, 2008년에 업데이트됨 - FIPS PUB 180-3): SHA-224, SHA-256, SHA-384, SHA-512; 2012년 FIPS PUB 180-4에 추가된 알고리즘 SHA-512/224그리고 SHA-512/256. SHA-1 및 SHA-2 해시 함수의 전체 제품군을 결합한 FIPS PUB 180-4 표준을 살펴보겠습니다.

이 표준은 다음 해시 알고리즘을 정의합니다. SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224그리고 SHA-512/256, 디지털 데이터(메시지)의 압축된 표현을 계산합니다. 해시 알고리즘의 입력이 임의 길이의 메시지이지만 2 64비트 미만인 경우( SHA-1, SHA-224그리고 SHA-256) 또는 2128비트 미만( SHA-384, SHA-512, SHA-512/224그리고 SHA-512/256), 결과는 다음과 같은 데이터가 됩니다. 메시지의 다이제스트 또는 해시 값. 메시지의 해시 값 크기는 선택한 알고리즘에 따라 160~512비트(또는 20~64바이트) 범위입니다. SHA 알고리즘은 일반적으로 디지털 서명 알고리즘과 같은 다른 암호화 알고리즘과 함께 사용되거나 HMAC(메시지 인증용 키로 해싱) 또는 난수(비트)를 생성할 때 사용됩니다.

이 표준에 명시된 해시 알고리즘은 주어진 알고리즘에서 다음을 계산하는 것이 불가능하기 때문에 안전하다고 합니다. 1) 특정 메시지 요약에서 메시지를 복구하거나 2) 동일한 메시지 요약을 가진 두 개의 다른 메시지를 찾습니다(충돌 찾기). 메시지가 변경되면 매우 높은 확률로 해시 값이 달라집니다. 이 속성은 디지털 서명을 만들고 확인할 때, 메시지를 인증할 때, 난수를 생성할 때 유용합니다.

각 알고리즘은 두 단계로 구성됩니다. 예비 처리및 해시 계산. 전처리에는 다음이 포함됩니다. 메시지 완성, 보충된 메시지를 다음으로 분할 -비트 블록, 그리고 초기화 값 설정해시 계산에 사용됩니다. 해시 계산은 반복적이며 각각을 처리합니다. - 패딩된 메시지의 비트 블록이며 함수, 상수 및 단어 연산을 사용하여 해시 값을 얻습니다. 해시 계산 절차의 결과는 메시지 다이제스트입니다.

알고리즘은 해시된 데이터와 해시 값의 블록과 단어의 크기가 다릅니다. - 표 1 참조.

연산 메시지 크기(비트) 블록 크기(비트) 워드 크기(비트) 메시지 다이제스트 크기(비트)
SHA-1 < 2 64 512 32 160
SHA-224 < 2 64 512 32 224
SHA-256 < 2 64 512 32 256
SHA-384 < 2 128 1024 64 384
SHA-512 < 2 128 1024 64 512
SHA-512/224 < 2 128 1024 64 224
SHA-512/256 < 2 128 1024 64 256
기능

SHA-1은 일련의 비선형 함수를 사용합니다. f 0 , f 1 ,..., f 79. 모든 기능 에프티, 어디 0 ≤ t< 79 , 세 개의 32비트 변수에서 작동합니다. 엑스, 와이, 그리고 , 단일 32비트 워드가 생성됩니다. SHA-1 알고리즘은 다음과 같은 비선형 함수 집합을 사용합니다. f t (x, y, z):
00 ≤ t ≤ 19채널(x, y, z)
20 ≤ t ≤ 39패리티(x, y, z)= x XOR y XOR z
40 ≤ t ≤ 59메이저(x, y, z)
60 ≤ t ≤ 79패리티(x, y, z)= x XOR y XOR z

부울 대수.
예를 들어 함수 채널다른 방식으로 표현될 수 있습니다:
z XOR(x AND(y XOR z))
결과는 변경되지 않습니다. 알고리즘의 다양한 구현에서 이러한 옵션을 찾을 수 있습니다.

SHA-224 및 SHA-256은 6가지 비선형 함수를 사용합니다.

채널(x, y, z)= (x AND y) XOR(x AND z 아님)
메이저(x, y, z)= (x와 y) XOR(x와 z) XOR(y와 z)

시그마0(x)= ROTR(x, 2) XOR ROTR(x, 13) ROTR(x, 22) XOR
시그마1(x)= ROTR(x, 6) ROTR(x, 11) ROTR(x, 25) XOR

델타0(x)= ROTR(x, 7) XOR ROTR(x, 18) XOR SHR(x, 3)
델타1(x)= ROTR(x, 17) XOR ROTR(x, 19) XOR SHR(x, 10)


N조금:
ROTR(x, n) = (x » n) | (x "(32-n))
SHR - 오른쪽으로 이동 N조금:
SHR(x, n) = x » n

SHA-384, SHA-512, SHA-512/224, SHA-512/384는 6가지 비선형 함수를 사용합니다.

채널(x, y, z)= (x AND y) XOR(x AND z 아님)
메이저(x, y, z)= (x와 y) XOR(x와 z) XOR(y와 z)

시그마0(x)= ROTR(x, 28) ROTR(x, 34) ROTR(x, 39) XOR
시그마1(x)= ROTR(x, 14) ROTR(x, 18) ROTR(x, 41)

델타0(x)= ROTR(x, 1) XOR ROTR(x, 8) XOR SHR(x, 7)
델타1(x)= ROTR(x, 19) XOR ROTR(x, 61) XOR SHR(x, 6)

단어에 대한 연산(64비트).
ROTR - 오른쪽으로 순환 시프트 N조금:
ROTR(x, n) = (x » n) | (x "(64-n))
SHR - 오른쪽으로 이동 N조금:
SHR(x, n) = x » n

상수

상수 케이티
00 ≤ t ≤ 19 0x5a827999
20 ≤ t ≤ 39 0x6ed9eba1
40 ≤ t ≤ 59 0x8f1bbcdc
60 ≤ t ≤ 79 0xca62c1d6

(이 숫자의 출처에 대한 질문에 관심이 있는 경우 해당 출처를 표시합니다.
0x5A827999 = $\sqrt(2) / 4$ , 0x6ED9EBA1 = $\sqrt(3) / 4$ , 0x8F1BBCDC = $\sqrt(5) / 4$ , 0xCA62C1D6 = $\sqrt(10;) / 4$ 모든 것에 232를 곱합니다).

64개 상수(32비트 워드): K 0 , K 1 ... K 63. (궁금한 분들을 위해 이 상수는 처음 64개 소수의 분수 세제곱근의 처음 32비트를 나타냅니다.)

케이 = [
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
]

80개의 상수(64비트 워드): K 0 , K 1 ... K 79. (궁금한 분들을 위해 이 상수는 처음 80개 소수의 분수 세제곱근의 처음 64비트를 나타냅니다.)

케이 = [
0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc,
0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118,
0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,
0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694,
0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,
0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5,
0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4,
0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70,
0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df,
0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,
0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30,
0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8,
0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8,
0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3,
0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,
0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b,
0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178,
0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b,
0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c,
0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
]

예비 처리
1. 메시지 완성하기

목표는 선택한 SHA 알고리즘에 따라 메시지를 512 또는 1024비트의 배수로 만드는 것입니다. 패딩은 해시 계산 절차 전이나 해시 실행 중에 수행될 수 있지만 패딩을 포함할 블록을 처리하기 전에 수행할 수 있습니다.

와 동등하다 "하나" 케이- 수신된 메시지의 크기가 512의 배수보다 64비트 작도록( l+1+k = 448 모드 512). 다음으로 크기의 64비트 표현이 결과에 추가됩니다. 원본 메시지 "알파벳" "하나", 448 - (24 +1) = 423비트 «0» , 그리고 마지막으로 크기 24 = 00…011000의 64비트 표현입니다. 결과적으로 다음 형식의 512비트 메시지가 표시됩니다.

메시지의 길이가 와 동등하다 조금. 메시지 끝에 처음 추가됨 "하나", 그리고 0 - 금액 케이- 수신된 메시지의 크기가 896의 배수보다 128비트 작도록( l+1+k = 896 모드 1024). 다음으로 크기의 128비트 표현이 결과에 추가됩니다. 원본 메시지 . 예를 들어, (ASCII 텍스트) 메시지가 있습니다. "알파벳", 길이 8 * 3 = 24비트. 메시지에 추가 "하나", 896 - (24 +1) = 871비트 «0» , 그리고 마지막으로 크기 24 = 00…011000의 128비트 표현입니다. 결과적으로 다음 형식의 1024비트 메시지가 표시됩니다.

2. 증강 메시지 분할 -비트 블록.

N -비트 블록.

확장된 메시지는 다음과 같이 나뉩니다. 512호-비트 블록: M(1) , M(2) ... M(N). 왜냐하면 512비트는 16(16) 32비트 워드로 표현될 수 있으며, 그 다음 처음 32비트 남 0 (i), 다음 32비트 남 1 (i), 그래서 우리는 남 15(i).

확장된 메시지는 다음과 같이 나뉩니다. N 1024-비트 블록: M(1) , M(2) ... M(N). 왜냐하면 512비트는 16(16) 64비트 워드로 표현될 수 있으며, 그 다음 처음 64비트 th 메시지 블록의 다음을 나타냅니다. 남 0 (i), 다음 64비트 남 1 (i), 그래서 우리는 남 15(i).

3. 초기화 값 설정

해시 계산 절차 전에 알고리즘은 초기 값을 설정합니다. 시간. 단어의 크기와 수 시간선택한 알고리즘에 따라 다릅니다.

4개의 32비트 단어.
H0 = 0x67452301
H1 = 0xefcdab89
H2=0x98badcfe
H3 = 0x10325476
H4 = 0xc3d2e1f0

8개의 32비트 단어.

0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4)

8개의 32비트 단어.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19)

(궁금한 점을 위해: 이 값은 소수 제곱근의 소수 부분의 처음 32비트를 나타냅니다. 일련 번호: 처음 8).

8개의 64비트 단어.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17,
0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511,
0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4)

(궁금한 점을 위해: 이 값은 소수 제곱근의 소수 부분의 처음 64비트를 나타냅니다. 일련 번호: 9에서 16까지).

8개의 64비트 단어.
H0, H1, H2, H3, H4, H5, H6, H7 = (


(궁금한 사람을 위해: 이 값은 소수의 제곱근의 소수 부분의 처음 64비트를 나타냅니다. 일련 번호: 처음 8).



H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b,
0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f,
0x1f83d9abfb41bd6b, 0x5be0cd19137e2179)











8개의 64비트 단어.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x8C3D37C819544DA2, 0x73E1996689DCD4D6, 0x1DFAB7AE32FF9C82,
0x679DD514582F9FCF, 0x0F6D2B697BD44DA8, 0x77E36F7304C48942,
0x3F9D85A86A1D36C8, 0x1112E6AD91D692A1)

"SHA-512/t"는 결과가 t비트로 잘린 SHA-512를 기반으로 하는 t비트 해시 함수의 일반 이름입니다. t-비트 해시 함수의 각 버전에는 다른 초기화 값이 필요합니다. 이를 위해 특정 변형 t의 SHA-512/t에 대한 초기 값을 결정하기 위한 특별한 절차가 도입되었습니다.

SHA-512/t의 초기 값 결정 절차.
1. SHA-512 알고리즘에서 H의 초기값을 취합니다.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b,
0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f,
0x1f83d9abfb41bd6b, 0x5be0cd19137e2179)

2. 다음과 같이 계산합니다.
H0' = H0 XOR 0xA5A5A5A5A5A5A5A5
H1' = H1 XOR 0xA5A5A5A5A5A5A5A5
H2' = H2 XOR 0xA5A5A5A5A5A5A5A5
H3' = H3 XOR 0xA5A5A5A5A5A5A5A5
H4' = H4 XOR 0xA5A5A5A5A5A5A5A5
H5' = H5 XOR 0xA5A5A5A5A5A5A5A5
H6' = H6 XOR 0xA5A5A5A5A5A5A5A5
H7' = H7 XOR 0xA5A5A5A5A5A5A5A5

3. 초기 값 H'를 사용하여 문자열 SHA-512("SHA-512/t")(여기서 t는 "224" 또는 "256"일 수 있음)에서 해시를 계산합니다. 해시 값은 SHA-512/t 알고리즘의 초기 값이 됩니다.
SHA-512/224의 경우 H = SHA512(H', "SHA-512/224")
SHA-512/256의 경우 H = SHA512(H', "SHA-512/256")

8개의 64비트 단어.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x22312194FC2BF72C, 0x9F555FA3C84C64C2, 0x2393B86B6F53B151,
0x963877195940EABD, 0x96283EE2A88EFFE3, 0xBE5E1E2553863992,
0x2B0199FC2C85B8AA, 0x0EB72DDC81C52CA2)

해시 계산

덧셈 알고리즘에서 "+" 모듈로 2 32 발생합니다.

i = 1에서 N까지:
{
1.
남 0 (i)~에 남 15 (i))
32비트 80워드( W0~에 승 79):
W t = M t, t = 0..15에 대해
W t = 로틀(W t-3 XOR W t-8 XOR W t-14 XOR W t-16 , 1), t = 16..79에 대해
(흥미롭게도 원래 SHA 사양(SHA-0 알고리즘)은
왼쪽으로 주기적 시프트 ROTL(x, 1))

2. 변수 a,b,c,d,e를 초기화합니다.
a = H0(i-1)
b=H1(i-1)
c = H2(i-1)
d=H3(i-1)
e = H4(i-1)

3. 압축 기능의 메인 루프
t = 0 ~ 79의 경우
온도= 로틀(a, 5) + f t (b, c, d) + e + W t + K t
e=d
d=c
c= 로틀(나, 30)
b = 에이
a = 온도

4.
H0(i) = (H0(i-1) + a)
H1(i) = (H1(i-1) + b)
H2(i) = (H2(i-1) + c)
H3(i) = (H3(i-1) + d)
H4(i) = (H4(i-1) + e)
}

결과 해시 값은 160비트 메시지 다이제스트입니다.
H0(N) || H1(N) || H2(N) || H3(N) || H4(N)(5워드 * 32비트 = 160비트)

단어에 대한 연산(32비트).
ROTL - 왼쪽으로 순환 시프트 N조금:
ROTL(x, n) = (x « n) | (x"(32-n))

덧셈 알고리즘에서 "+" 모듈로 2 32 발생합니다.

i = 1에서 N까지:
{
1. 다음 알고리즘을 사용하는 th 메시지 블록
16워드에서 32비트로 변환( 남 0 (i)~에 남 15 (i))
32비트의 64워드( W0~에 승 63):
W t = M t, t = 0..15에 대해
W t \u003d W t-16 + 델타0(W t-15) + W i-7 + 델타1(W t-2), t = 16..63에 대해

2.
a = H0(i-1)
b=H1(i-1)
c = H2(i-1)
d=H3(i-1)
e = H4(i-1)
f=H5(i-1)
g=H6(i-1)
h=H7(i-1)

3. 압축 기능의 메인 루프
t = 0 ~ 63의 경우
온도1=h+ 시그마1(e) + 채널(e,f,g) + W t + K t
온도2= 시그마0(a) + 메이저(알파벳)
h = g
g = f
f=e
e = d + TEMP1
d=c
c = b
b = 에이
a = TEMP1 + TEMP2

4. 중간 해시 값 계산
H0(i) = (H0(i-1) + a)
H1(i) = (H1(i-1) + b)
H2(i) = (H2(i-1) + c)
H3(i) = (H3(i-1) + d)
H4(i) = (H4(i-1) + e)
H5(i) = (H5(i-1) + f)
H6(i) = (H6(i-1) + g)
H7(i) = (H7(i-1) + h)
}

결과 해시 값은 256비트 메시지 다이제스트입니다.
(8워드 * 32비트 = 256비트)
주의: 각 단어의 바이트 순서는 "빅 엔디안"입니다.

알고리즘은 SHA-256 알고리즘과 동일합니다. 차이점은 H의 초기화 값(위 참조)과 결과 해시를 가져오는 방법에 있습니다. 왜냐하면 256비트 메시지 다이제스트를 얻은 다음 처음 224비트만 사용하여 최종 해시 값을 얻습니다.

H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N) || H6(N)(7워드 * 32비트 = 224비트)
주의: 각 단어의 바이트 순서는 "빅 엔디안"입니다.

알고리즘은 SHA-256과 유사하며 모든 변수와 단어만 64비트입니다.
덧셈 알고리즘에서 "+" 모듈로 2 64 발생 .

i = 1에서 N까지:
{
1. 다음 알고리즘을 사용하는 th 메시지 블록
16워드에서 64비트로 변환( 남 0 (i)~에 남 15 (i))
64비트 80워드로 W0~에 승 79):
W t = M t, t = 0..15에 대해
W t \u003d W t-16 + 델타0(W t-15) + W i-7 + 델타1(W t-2), t = 16..79에 대해

2. 변수 a,b,c,d,e,f,g,h를 초기화합니다.
a = H0(i-1)
b=H1(i-1)
c = H2(i-1)
d=H3(i-1)
e = H4(i-1)
f=H5(i-1)
g=H6(i-1)
h=H7(i-1)

3. 압축 기능의 메인 루프
t = 0 ~ 79의 경우
온도1=h+ 시그마1(e) + 채널(e,f,g) + W t + K t
온도2= 시그마0(a) + 메이저(알파벳)
h = g
g = f
f=e
e = d + TEMP1
d=c
c = b
b = 에이
a = TEMP1 + TEMP2

4. 중간 해시 값 계산
H0(i) = (H0(i-1) + a)
H1(i) = (H1(i-1) + b)
H2(i) = (H2(i-1) + c)
H3(i) = (H3(i-1) + d)
H4(i) = (H4(i-1) + e)
H5(i) = (H5(i-1) + f)
H6(i) = (H6(i-1) + g)
H7(i) = (H7(i-1) + h)
}

결과 해시 값은 512비트 메시지 요약입니다.
H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N) || H6(N) || H7(엔)(8워드 * 64비트 = 512비트)
주의: 각 단어의 바이트 순서는 "빅 엔디안"입니다.

알고리즘은 SHA-512 알고리즘과 동일합니다. 차이점은 H의 초기화 값(위 참조)과 결과 해시를 가져오는 방법에 있습니다. 왜냐하면 512비트 메시지 다이제스트를 얻은 다음 처음 384비트만 사용하여 최종 해시 값을 얻습니다.

H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N)(6워드 * 64비트 = 384비트)
주의: 각 단어의 바이트 순서는 "빅 엔디안"입니다.

알고리즘은 SHA-512 알고리즘과 동일합니다. 차이점은 H의 초기화 값(위 참조)과 결과 해시를 가져오는 방법에 있습니다. 왜냐하면 512비트 메시지 다이제스트를 얻은 다음 처음 224비트만 사용하여 최종 해시 값을 얻습니다.

H0(N) || H1(N) || H2(N) || H3(N)의 처음 32비트(3워드 * 64비트 + 32비트 = 224비트)
주의: 각 단어의 바이트 순서는 "빅 엔디안"입니다.

알고리즘은 SHA-512 알고리즘과 동일합니다. 차이점은 H의 초기화 값(위 참조)과 결과 해시를 가져오는 방법에 있습니다. 왜냐하면 512비트 메시지 다이제스트를 얻은 다음 처음 256비트만 사용하여 최종 해시 값을 얻습니다.

H0(N) || H1(N) || H2(N) || H3(N)(4워드 * 64비트 = 256비트)
주의: 각 단어의 바이트 순서는 "빅 엔디안"입니다.

암호화 기본체
공개 키 알고리즘 RSA DSA
스트림 암호 RC4
해시 함수

SHA-256은 최대 2.31엑사바이트(2⁶⁴ 비트)까지의 입력 데이터에서 고정 길이(256비트, 32바이트) 디지털 지문을 생성하기 위한 단방향 기능이며 SHA-2 암호화 제품군의 알고리즘의 특별한 경우입니다. 알고리즘( 보안 해시 알고리즘 버전 2) 2002년 NSA에서 출판.

패밀리 해시 함수 SHA-2 Merkle - Damgard 구조를 기반으로 구축되었습니다.

추가 후 원본 메시지는 블록으로 나뉘며, 각 블록은 16단어로  - 입니다. 알고리즘은 64회 반복되는 루프를 통해 각 메시지 블록을 전달합니다. 각 반복에서 2개의 단어가 변환되고 변환 기능은 나머지 단어로 설정됩니다. 각 블록의 처리 결과를 합산하여 해시 함수의 값을 합산합니다. 이전 블록을 처리한 결과 내부 상태가 초기화되기 때문에 블록을 병렬로 처리할 방법이 없다. 데이터 블록 처리의 한 번의 반복에 대한 그래픽 표현:

현재, 충돌을 최대 31번까지 구성하는 방법이 알려져 있습니다. 알고리즘 유사성으로 인해 SHA-2와 함께 SHA-1후자에 잠재적인 취약점이 있다는 점에서 SHA-3은 완전히 다른 알고리즘을 기반으로 하기로 결정되었습니다. 2012년 10월 2일 NIST는 Keccak 알고리즘을 SHA-3으로 승인했습니다.

의사 코드 형태의 지문을 계산하는 알고리즘:

설명:
모든 변수는 부호가 없고 크기가 32비트이며 계산 중에 모듈로 232로 합산됩니다.
메시지- 원본 바이너리 메시지
- 변환된 메시지 변수 초기화
(처음 32비트 분수 부분처음 8개 소수의 제곱근 [2 ~ 19]):
h0:=0x6A09E667
h1:=0xBB67AE85
h2:=0x3C6EF372
h3:= 0xA54FF53A
h4:=0x510E527F
h5:=0x9B05688C
h6:=0x1F83D9AB
h7:=0x5BE0CD19 상수 테이블
(처음 32비트 분수 부분처음 64개 소수의 세제곱근 [2에서 311까지]):
k :=
0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 예비 처리:
m:= 메시지 ǁ [ 단일 비트]
m:= m ǁ , 여기서 케이는 다음과 같이 음이 아닌 가장 작은 숫자입니다.
(L + 1 + K) mod 512 = 448, 여기서 L은 메시지의 비트 수입니다(모듈로 512에서 448과 비교 가능).
m:= mǁ 길이(message) - 바이트 순서가 큰 것부터 작은 것까지의 64비트 숫자로 된 원본 메시지의 길이(비트) 다음으로 메시지는 512비트의 연속적인 부분으로 처리됩니다.
메시지를 512비트 청크로 분할
~을 위한각 청크는 청크를 길이가 32비트인 16개의 워드로 분할합니다(단어의 상위에서 하위까지 바이트 순서로): w 추가 48단어 생성:
~을 위한~에서 16 ~ 전에 63
s0:= (w 로터 7) 크소르(w 로터 18) 크소르(w 쉬르 3)
s1:= (w 로터 17) 크소르(w 로터 19) 크소르(w 쉬르 10)
w[i] := w + 0 + + s1
보조 변수 초기화:
a:=h0
b:= h1
c:=h2
d:= h3
전자:= h4
f:= h5
g:= h6
h:= h7 메인 루프:
~을 위한~에서 0 ~ 전에 63
Σ0:= ( 로터 2) 크소르(ㅏ 로터 13) 크소르(ㅏ 로터 22)
마:= (아 그리고비) 크소르(ㅏ 그리고씨) 크소르(비 그리고씨)
t2:= Σ0 + 마
Σ1:= (e 로터 6) 크소르(이자형 로터 11) 크소르(이자형 로터 25)
채널:= (e 그리고에프) 크소르 ((~ 아니다이자형) 그리고 g)
t1:= h + Σ1 + Ch + k[i] + w[i] h:= g
지:= f
f:=e
전자:= d + t1
d:=c
c:=b
ㄴ:=아
에이:= t1 + t2 이전에 계산 된 결과에 얻은 값을 추가하십시오.
h0:= h0 + a
h1:= h1 + b
h2:= h2 + c
h3:= h3 + d
h4:= h4 + e
h5:= h5 + f
h6:= h6 + g
h7:= h7 + h 최종 해시 값을 가져옵니다.
다이제스트 = 해시 = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7

알고리즘이 사용됩니다.

  • 비트코인- 일정 범위의 값을 갖는 지문 검색을 통한 암호화폐 방출
  • DNSSEC- 다이제스트 DNSKEY
  • DSA- 전자 디지털 서명을 만드는 데 사용
  • IPSec- 프로토콜에서 ESP그리고 이케
  • 오픈LDAP- 비밀번호 해시
  • PGP- 전자 디지털 서명을 만드는 데 사용됩니다.
  • S/MIME- 메시지 다이제스트
  • 샤칼-2- 블록 암호화 알고리즘
  • X.509- 인증서의 전자 디지털 서명을 만드는 데 사용

지난 2017년은 암호 화폐의 폭발적인 인기와 "주요" 암호 화폐 비트코인의 비율이 빠르게 성장한 해였습니다. 이러한 상황은 투기와 채굴뿐만 아니라 현상의 본질에 대한 관심을 불러일으켰습니다. 점점 더 많은 사람들이 이 문제의 핵심을 파악하고 싶어 합니다. 모든 것이 어떻게 작동합니까?

Scrypt, SHA-256, X11 등과 같은 불가사의한 약어 뒤에 무엇이 숨어 있는지 가장 접근하기 쉬운 형식으로 설명하려고 하는 일련의 자료를 공개합니다. 암호화폐 세계에서 가장 중요한(최고는 아니지만) 알고리즘인 SHA-256부터 시작하겠습니다. Bitcoin 개발의 기초는 바로 그 사람입니다. 그러나 그 전에 핵심 용어를 정의하겠습니다. "채굴"과 "해시"라는 용어의 의미를 정의합시다.

채굴이란?

대중의 믿음과 달리 채굴은 암호화 지폐 자체의 추출일 뿐만 아니라 사기 행위로부터 바로 이 암호화폐를 보호하기 위한 조치입니다. 위조뿐만이 아닙니다. 예를 들어 같은 사람이 같은 동전을 반복적으로 사용하지 못하도록 보호하는 것이 훨씬 더 중요합니다. 새로운 암호 화폐의 수익은 배출과 밀접한 관련이 있으며 마이닝 알고리즘의 조건을 충족하는 새 블록을 찾는 데 대한 보상으로 구성됩니다.

즉, 다음 암호 화폐가 "나타나기" 위해서는 복잡한 계산의 전체를 수행하고 매우 소중한 "올바른" 블록을 찾아야 합니다. 이것이 매니아들이 장비에서 하는 일입니다. 이 계획은 자체 지원됩니다. 암호 화폐의 보안을 높이고 새로운 단위를 발행하려면 채굴이 필요하며 이를 이해하기 위해 채굴자는 보상을 받습니다.

간단히 말해서, 마이닝 소프트웨어는 이전 컴퓨팅 작업을 단일 블록으로 그룹화한 다음 상상할 수 없는 횟수로 변환하여 특별한 종류의 해시 코드를 발견합니다. 알고리즘의 요구 사항을 충족하는 해시 코드를 찾는 것은 프로세스에 참여자가 많을수록 더 어려워집니다. "올바른" 해시는 극히 드물며 해시를 찾는 것은 복권에 당첨되는 것과 비슷합니다.

해시 란 무엇입니까?

모두에게 명확하지 않은 "해시"라는 용어는 위에서 언급했습니다. 이것은 일반적인 암호화와 특히 SHA-256 알고리즘의 기본 개념 중 하나입니다. 이것이 무엇을 의미하는지 설명하고 가장 중요한 관련 사항을 살펴 보겠습니다.

따라서 해싱은 임의 크기의 들어오는 데이터 세트를 나가는 디지털 문자열로 바꾸는 프로세스입니다. 이 변환은 이전에 개발된 알고리즘에 따라 수행되며 나가는 문자열은 완전히 고유하며 들어오는 배열의 일종의 "각인" 역할을 합니다. 해시 합계, 해시 코드 또는 간단히 해시라고 하는 것은 이 문자열입니다. 그리고 변환 알고리즘은 해시 함수입니다.

예를 들어 보겠습니다. A. S. Pushkin "Eugene Onegin"의 소설 구절과 같이 해시 함수를 "피드"할 수 있으며 출력에서 ​​대략 다음 형식의 16진수 코드를 얻을 수 있습니다. 물론 이 코드를 "언롤(unroll)"해서 "유진 오네긴(Eugene Onegin)"으로 바꾸는 것은 불가능합니다. 그러나 결과 해시가 인식할 수 없을 정도로 변형되기 때문에 시에서 한 문자만 변경하고 공백을 하나만 추가하면 됩니다. 볼륨은 해시 코드의 길이에도 영향을 미치지 않습니다. 따라서 함수의 입력에 한 문자 "a"를 줄 수 있으며 출력은 정확히 같은 길이의 의사 난수 문자 집합과 정확히 동일합니다.

이제 이것이 필요한 이유와 그 과정에서 발생하는 어려움에 대해 자세히 알아보십시오. 이 주제에 관심이 있는 모든 사람은 SHA-256 프로토콜에서 암호화폐 마이닝이 중앙 프로세서, 그래픽 카드 또는 특수 ASIC 장치의 성능을 사용하여 수행될 수 있다는 것을 알고 있습니다. 실제로 Bitcoin의 맥락에서 첫 번째 방법은 더 이상 관련이 없으며 비디오 카드를 사용한 마이닝은 마지막 날을 살고 있습니다. 계산이 너무 복잡해져서 절반 측정값이 더 이상 적합하지 않습니다.

마이닝 소프트웨어의 인터페이스에서 블록을 해시 합계로 변환하는 프로세스는 "Accepted 0aef59a3b"와 같은 간결한 문자열로 표시됩니다. 블록은 수천 또는 수십만 개의 유사한 라인으로 구성될 수 있지만 하나의 블록만이 블록의 "서명" 역할을 할 수 있으며, 이를 검색하는 것이 채굴의 본질입니다.

정확한 해시에 대한 검색은 수많은 문제를 해결한 결과를 단순히 열거함으로써 수행됩니다. SHA-256 알고리즘에서 해시의 "정확도"는 해시 합계의 시작 부분에 있는 0의 수에 의해 결정됩니다. 알고리즘에 의해 결정된 계산에 의해 이러한 해시 코드를 찾을 확률은 무시할 수 있습니다. 수백만 개의 솔루션 중 하나의 기회입니다. 정확한 확률은 특정 암호화폐의 분산 시스템의 현재 복잡성 수준에 따라 결정됩니다.

놀라운 사실. 우리 각자는 암호 화폐 마이닝에 관계없이 SHA-256 알고리즘을 의심하지 않고 반복적으로 처리했습니다. 우리는 많은 웹 사이트를 보호하는 데 사용되는 SSL 보안 인증서에 대해 이야기하고 있습니다. 이러한 사이트를 방문하면 SSL이 구축된 SHA-256과 자동으로 상호 작용하게 됩니다.

SHA-256 프로토콜의 특징

시작하기 위해, 약간의 역사. 처음에 SHA-256 암호화 알고리즘 또는 그 프로토타입은 이제 먼 2002년에 "불길한" NSA(미국 국가안보국)의 벽 안에서 발명되었습니다. 몇 달 만에 연방 차원의 국립 도량형 대학교에서 수정하여 공식 발표했습니다. 2년 후, 두 번째 개선된 버전이 출시되었습니다.

다음 3년 동안 FDA는 알고리즘을 개선하기 위해 노력했고 결국 두 번째 판에 대한 특허를 발행했습니다. 이것은 "평화로운" 목적을 위해 최신 기술을 사용할 수 있도록 하는 로열티 프리 라이센스 하에 수행되었습니다.

궁극적으로 SHA-256은 세계 최초의 암호화폐인 비트코인을 만드는 기반이 되었습니다. 이 경우 프로토콜은 보호를 강화하기 위해 두 번 활성화됩니다.

비트코인 시스템에서 마이닝의 일부로 계산을 수행할 때 결과 해시 코드의 적합성의 표시는 문자열 시작 부분에 있는 0의 수입니다. 17년 말, 18년 초에 필요한 선행 0의 수는 17(+/-)입니다. 이러한 코드를 탐지할 확률은 약 1/1.4*10 20 입니다. 이것은 이해할 수 없고 우리 행성의 모든 모래 사장에서 특정 모양의 모래 알갱이를 찾을 확률과 비교할 수 있을 정도로 극소수입니다. 이것이 비트코인 ​​채굴에 엄청난 컴퓨팅 파워와 많은 전력이 필요한 이유입니다.

"올바른" 해시 검색을 최적화할 수 있는 방법은 없습니다. SHA-256 프로토콜에서 데이터 블록을 가져오는 해시 함수는 출력에서 ​​완전히 예측할 수 없는 값을 생성합니다. 따라서 적절한 코드를 찾을 때까지 반복 후 반복(반복)이 필요함을 다시 강조합니다. 완전히 무작위.

이제 복잡한 기술 정보로 독자를 "로드"해야 합니다. 그렇지 않으면 SHA-256에 대한 이야기가 불완전합니다. 명확하지 않은 경우 기사의 다음 섹션으로 건너뛰십시오.

프로토콜의 작동에는 정보를 각각 512비트(또는 64바이트, 1바이트 = 8비트이므로 동일)의 조각으로 나누는 작업이 포함됩니다. 그런 다음 알고리즘에 명시된 체계에 따라 암호화 "혼합"이 발생하고 256비트 크기의 해시 코드가 출력에서 ​​발행됩니다. 해싱 작업은 64번의 반복으로 수행되며, 이는 특히 새로 부상하는 암호화 알고리즘의 배경에 대해 상대적으로 작습니다.

SHA-256의 주요 기술 매개변수는 다음과 같습니다.

  • 블록 크기: 64바이트;
  • 최대 메시지 길이: 33바이트;
  • 결과 해시 코드의 크기: 32바이트;
  • 한 라운드의 반복 횟수: 64;
  • 최대 속도: 약 140MiB/s(초당 메비바이트).

해당 작업에서 알고리즘은 변경 직후 초기 지표를 블록으로 나누는 잘 알려진 Merkle-Damgard 기술을 사용합니다. 블록은 차례로 16개의 단어로 나뉩니다.

데이터 배열은 64회 반복됩니다. 그들 각각은 블록을 구성하는 단어를 해싱하는 과정을 시작합니다. 단어 쌍이 함수에 의해 처리된 후 결과가 더해지고 올바른 해시 코드가 얻어집니다. 각 다음 블록은 이전 블록의 값을 기반으로 계산됩니다. 이것은 원활한 프로세스입니다. 블록을 서로 별도로 계산하는 것은 불가능합니다.

SHA-256의 진화

이 알고리즘의 암호학적 가치를 이해하기 위해 다시 역사를 살펴보자. 그들은 2003 년에 생성 직후 거의 강도에 대해 진지하게 테스트하기 시작했습니다. 이 사건은 전문가에 의해 처리되었지만 취약점이나 오류는 발견되지 않았습니다.

5년이 지났고 2008년 인도 전문가들은 여전히 ​​22번의 반복에 대해 충돌을 식별할 수 있었습니다. 몇 달 간의 노력 끝에 문제에 대한 성공적인 솔루션이 제안되었습니다.

알고리즘의 기능적 부분을 분석하는 동안 두 가지 유형의 가능한 보호 붕괴 방법에 대한 저항이 테스트되었습니다.

  • preimage: 해시 문자열만을 기반으로 하는 원본 메시지의 역 복호화를 나타냅니다.
  • 충돌 감지를 통해: 들어오는 메시지가 다른 경우 나가는 데이터의 일치를 나타냅니다. 즉, 들어오는 블록은 다르지만 나가는 해시는 동일합니다.

SHA-256의 첫 번째 버전이 두 번째 기준에 대한 테스트에 실패한 후 개발자는 근본적으로 다른 원칙에 따라 새로운 암호화 메커니즘을 만들기로 결정했습니다. 수행 된 작업 - 2012 년에 위의 단점이 완전히없는 차세대 프로토콜이 제시되었습니다.

알고리즘의 단점

개발자가 자신의 실수를 고칠 수 있었다고 해서 SHA-256을 완벽하게 만들 수 있었던 것은 아닙니다. 이 프로토콜은 명백한 취약점을 제거했지만 "기본" 단점이 남아 있습니다.

SHA-256을 Bitcoin의 기초로 사용하는 것은 특히 미국 법률 자체가 이 프로토콜에 충실했기 때문에 가능했습니다. 일부 정부 프로그램에서 데이터 보호용으로 사용이 허용되었으며 상업 분야에서도 사용이 허용되었습니다.

이것은 운명의 아이러니가 나오는 곳입니다. 프로토콜은 한 가지 목적으로 만들어졌으며 완전히 다른 용도에서 가장 광범위한 응용 프로그램을 찾았습니다. 그리고 그 첫 번째 목표의 경우 효과적이고 편리했습니다. 그러나 암호 화폐의 경우 너무 단순한 것으로 판명되었습니다. 같은 중국에는 이미 농장도 없지만 전체 "공장"이 asic 광부로 막힌 경우 농담이 아닙니다.

알고리즘 내의 각 반복은 기본 이진 연산과 32비트 추가로 다소 원시적으로 보입니다. 이것이 SHA-256의 ASIC이 프로세서와 몇 개의 비디오 카드만 있는 "가정" 광부의 모든 희망을 0으로 곱하여 번개처럼 빠르게 나타난 이유입니다.

시간과 조건은 많이 변하고 SHA-256 프로토콜은 다른 고급 솔루션을 자신있게 밟고 있습니다. 동일한 Scrypt는 컴퓨팅 과정에서 먼저 1024개의 서로 다른 해시 라인을 수정한 후 덧셈을 수행하여 최종 결과를 얻습니다. 이것은 암호 화폐 보호 및 보안의 가장 높은 지표를 가진 불균형적으로 더 복잡한 체계입니다.

요약

SHA-256 암호화 알고리즘은 암호화폐의 붐이 시작될 때까지 매우 효과적이고 신뢰할 수 있는 것으로 간주되었습니다. 오늘날 새로운 솔루션의 배경에 대해 이미 다소 약해 보입니다. 그래서 그것을 우회하기 위해 엄격하게 "날카롭게"특별한 장치를 만들 수있었습니다. 이들은 실제로 중앙 프로세서에서 채굴을 파괴하고 이미 비디오 카드에서 채굴을 끝내고 있는 바로 그 ASIC 채굴자입니다.

결국 건전한 경쟁에 문제가 없는 것 같습니다. 그러나 실제로 asics의 사용은 암호화폐를 눈에 띄게 중앙 집중화하여 개념 자체를 평준화합니다. 이 사실은 재능 있는 열광자들이 새롭고 더 발전된 해싱 알고리즘을 만들도록 강요할 수 밖에 없습니다. 그리고 그들은 기다리지 않았습니다.

SHA-256 프로토콜은 현재 암호화폐 시장에서 가장 큰 점유율을 차지하고 있지만 새로운 대안이 이미 자신 있게 이를 추진하고 있습니다. 예를 들어, 두 번째로 인기 있고 "비싼" 크립트인 이더리움은 Dagger라고 불렸던 Ethash 프로토콜을 사용합니다. 이 프로토콜은 이더리움이 여전히 최대의 탈중앙화를 유지하고 생산을 위한 ASIC 채굴기가 자연에 아직 존재하지 않을 정도로 매우 우수합니다. 아마도 구형 SHA-256을 대체할 것은 Ethash일 것입니다.

최초의 대안 알고리즘 중 하나는 가장 인기 있는 알트코인 중 하나인 Litecoin이 기반으로 하는 Scrypt였습니다. 이것은 더 이상 ASIC에 이러한 명백한 이점을 제공하지 않는 훨씬 더 발전된 솔루션입니다. 그럼에도 불구하고 광업으로 인한 엄청난 이익으로 인해 Celestial Empire의 전문가는 Scrypt를 위한 기술 솔루션 개발에 많은 노력을 투자해야 했으며 그럼에도 불구하고 이 프로토콜을 기반으로 하는 ASIC이 나타났습니다.

기술적 뉘앙스에 경험이없는 평범한 사람의 입장에서 마이닝을 고려한다면 그는 Scrypt와 SHA-256 알고리즘의 차이를 느끼지 못할 것입니다. 두 프로토콜의 Asics는 거의 동일하게 보이며 거의 동일한 양의 전력을 소비하고 정확히 같은 방식으로 팬과 함께 울부짖습니다. 또 다른 것은 이러한 동일한 ASIC이 채굴하는 암호화폐 비율이지만 완전히 다른 이야기입니다.

우리는 이 주제의 프레임워크 내에서 언급된 대체 암호화 프로토콜 Scrypt에 대한 다음 자료를 할애할 것입니다.

상위 관련 기사