Sha256 atšifrēšanas un ieguves funkcijas. Kripto ieguves algoritmi paskaidroti Kas ir sha 256 algoritms

Aleksandrs Markovs

Saīsinājums SHA 256 apzīmē Secure Hashing Algorithm – populāru jaukšanas mehānismu, ko izveidojuši NSA speciālisti. Algoritma galvenais uzdevums ir nejaušas informācijas pārveidošana vērtībās ar fiksētu garumu, kas turpmāk tiks izmantota šīs informācijas identificēšanai.

Izskatu vēsture

Mēs uzreiz atzīmējam, ka šis ir otrās paaudzes algoritms, kas izveidots, pamatojoties uz tā priekšgājēju SHA-1, kas savukārt tika izstrādāts 1995. gadā tikai un vienīgi civilai lietošanai. Tagad populārā algoritma atjauninātu versiju Nacionālās drošības aģentūra izveidoja 2002. gadā.

Trīs gadus vēlāk parādījās patents, kas ļāva izmantot algoritmu civiliem mērķiem. Trešā populārā mehānisma versija parādījās 2012. gadā, to izstrādāja Nacionālās standartu aģentūras speciālisti. Laika gaitā SHA-3 pilnībā aizstāja savus priekšgājējus.

Konvertētos datus nav iespējams atšifrēt, jo klasiskajā šī procesa interpretācijā hash summa netiek uzskatīta par šifrēšanas procesu. Vienvirziena šifrēšanas algoritms apstrādā neierobežotu informācijas daudzumu.

Ir vērts atzīmēt, ka absolūti visas esošās Secure Hashing Algorithm versijas tika izveidotas pēc Merkle-Damgard principa: informācija ir sadalīta vienotās kategorijās. Katra grupa tiek pakļauta vienpusējai saspiešanai, kā rezultātā ievērojami samazinās datu garums.

Šai šifrēšanas metodei ir daudz priekšrocību:

  • datu saspiešana tiek veikta ātri;
  • konvertēšanas procesu nav iespējams atgriezt bez atslēgām;
  • sadursmju iespējamība tiek samazināta līdz nullei.

Tehniskās specifikācijas

Protokols ir paredzēts datiem, kas ir sadalīti daļās, katra apjoms ir 64 baiti. Algoritms nodrošina konsolidāciju, kā rezultātā parādās 256 bitu kods. Šifrēšanas tehnoloģija balstās uz salīdzinoši vienkāršu kārtu, kuras cikls ir 64 reizes.

  • 64 baitu bloka lielums.
  • Maksimālais šifrētā koda garums ir 33 baiti.
  • Ziņojuma īssavilkuma parametri — 32 baiti.
  • Noklusējuma vārda lielums ir 4 baiti.
  • Atkārtojumu skaits vienā ciklā ir 64.
  • Algoritma ātrums ir 140 Mbps.

Kā minēts iepriekš, SHA-256 protokols ir balstīts uz Merkle-Damgard koncepciju, kas nozīmē, ka tas vispirms tiek sadalīts blokos un tikai pēc tam atsevišķos vārdos.

Informācijas kopa iziet cauri atkārtojumu diapazonam – 64 vai 80. Katru ciklu pavada vārdu bloka transformācija. Galīgais jaucējkods tiek ģenerēts, summējot sākotnējās vērtības.

Kriptovalūtas ar SHA-256 algoritmu

Apsveriet digitālās valūtas, kuras tiek iegūtas saskaņā ar SHA-256 algoritma principiem:

  • Bitcoin, valūta, kurai nav nepieciešama turpmāka ieviešana, joprojām ir vispopulārākais kriptogrāfijas aktīvs.
  • Peercoin – unikalitāte slēpjas apstāklī, ka koda pamatā ir Bitcoin, bet mehānisms tiek izmantots tīkla aizsardzībai, bet PoW tiek izmantots monētu izplatīšanai.
  • Namecoin ir atvērtā pirmkoda tehnoloģija, kas būtiski uzlabo drošību, privātumu un decentralizāciju.
  • Unobtanium - raksturo minimāla inflācijas iedarbība. Unobtanium monētu ieguve prasīs aptuveni 300 gadus.
  • Deutsche eMark ir digitāls tīkls dažādu aktīvu, piemēram, naudas pārsūtīšanai. Maiņa tiek veikta bez starpniekiem.
  • BetaCoin ir starptautisks maksāšanas līdzeklis, kas darbojas pēc tāda paša principa kā Bitcoin sistēma.
  • Joulecoin - nodrošina ātrāko darījumu apstiprinājumu, pamatojoties uz Bitcoin.
  • IXCoin ir vēl viens atvērtā pirmkoda projekts, kura pamatā ir peer-to-peer tīkla princips.
  • - Blockchain platforma, kas atalgo lietotājus par unikāla satura ievietošanu.

Ir arī vērts atzīmēt, ka SHA-256 algoritms tiek izmantots Litecoin sistēmā, bet tikai apakšprogrammā. Ieguvei tiek izmantots Scrypt protokols.

Kriptovalūtas ieguve pēc SHA-256 algoritma

Sāksim ar to, ka ir trīs veidi, kā iegūt monētas, kuru sistēmas darbojas saskaņā ar šo protokolu:

  • ASIC.

Kalnrūpniecības sarežģītība ir tieši atkarīga no tā, par kādu kriptovalūtu mēs runājam. Tomēr jebkurā gadījumā visefektīvākās ir ASIC ierīces, kuru galvenais trūkums ir to pārmērīgi augstās izmaksas.

Vidēji ASIC kalnracis maksā apmēram 100 tūkstošus rubļu (Asic Miner AVALON 821), taču var iegādāties arī dārgākus modeļus, kuru cena sasniedz pusmiljonu rubļu (Asic Miner BITFURY B8 16NM 50 TH/S).

Kas attiecas uz kriptovalūtas ieguvi procesoros, šī metode tiek uzskatīta par vismazāk efektīvu. It īpaši, ja runa ir par digitālo valūtu Bitcoin.

Vispiemērotākais risinājums ir no videokartēm. Vidēji rentablas saimniecības izmaksas svārstās no 1000 līdz 2000 USD. Kuru videokarti izvēlēties kriptovalūtas ieguvei, izmantojot algoritmu SHA-256?

Ja mēs runājam par Nvidia, tad labākais risinājums būtu videokarte (1400 MH / s). Protams, arī tiešais konkurents AMD priekšā neatpaliek, ieguvei ir piemērotas absolūti visas Vega sērijas kartes. Radeon RX Vega video adapteris nodrošina ieguvi ar ātrumu 1200 MH/S. Tieši šim aprīkojumam ir jādod priekšroka.

Ja meklējat lētāku variantu, šajā gadījumā varat iegādāties Radeon 7970, šāds aprīkojums spēj nodrošināt līdz 800 MH/s. Neaizmirstiet, ka saimniecības vadīšanai papildus videokartēm ir nepieciešams arī cits aprīkojums, piemēram, dzesēšanas radiatori, barošanas bloks, operatīvā atmiņa utt.

Secinājums

Tas ir viss, kas kalnračiem jāzina par SHA-256 algoritmu. Protams, daudzas mūsdienu kriptovalūtas izmanto Scrypt protokolu, taču populārākās monētas (BTC) ieguve joprojām tiek veikta saskaņā ar šo principu.

Mūsdienās daudzi jau ir dzirdējuši par kriptovalūtām, bitkoiniem un citiem saistītiem jēdzieniem, taču tikai ar virspusējām zināšanām, lai saprastu pašu digitālās naudas infrastruktūru, nepietiks. Aiz ārējā apvalka slēpjas interesantāki un sarežģītāki mehānismi, kas padara kriptovalūtas unikālas. Viens no šiem elementiem ir SHA-256 algoritms, kas ir pamatā Bitcoin un lielākajai daļai mūsdienu altcoin. Apsveriet tā darbības pamatprincipus.

Kā darbojas SHA-256 algoritms?

Nav noslēpums, ka ieguves procesa laikā kalnrači atrisina noteiktas matemātiskas problēmas, kas ļauj pārbaudīt darījumus un pievienot tos blokķēdei, taču kā šis process tiek īstenots no iekšpuses? Šeit tiek izmantots SHA-256 algoritms.

Precīzāk sakot, SHA-256 nav tik daudz algoritms, cik kriptogrāfiska jaukšanas funkcija, ko izstrādājusi ASV NSA (Nacionālās drošības aģentūra). Tās galvenais uzdevums ir pārvērst patvaļīgu datu kopu vērtībās, kurām ir noteikts garums. Tas ir, ja jums ir kāds datu masīvs, kas sastāv no desmitiem, simtiem vai tūkstošiem elementu, to var samazināt līdz noteikta izmēra vispārīgai formai.

Galīgās vērtības īpatnība ir tāda, ka to var salīdzināt ar sākotnējo masīvu, bet nevar pārvērst sākotnējā formā.

Kāds sakars SHA-256 algoritmam ar ieguvi?

Iegūstot monētas grafiskajās kartēs vai procesoros, mēs redzam ziņojumus šādā formātā konsolē: “Accepted 0aef41a3b”. 0aef41a3b ir hash, ko meklē visi kalnrači, tas ir, kāda liela datu masīva samazināta kopija. Šīs dažas rakstzīmes būtībā ir simtiem, tūkstošiem un miljoniem līdzīgu līniju bloks.

Kalnraču un viņu skaitļošanas tehnikas galvenais uzdevums ir atrast jaucējkodu blokam ar noteiktu skaitu sākuma nullēm. Tas prasa milzīgu skaitļošanas jaudu, jo visu iespējamo opciju uzskaitīšanai ir nepieciešama atbilstoša datora jauda.

Turklāt ieguves sarežģītību pastiprina dabiskā konkurence. Tie, kuriem ir jaudīgāki datori vai kalnrači, ātrāk sašķiro iespējas, atrodot jaucējkodu. Tāpēc cerēt, ka šodien, izmantojot centrālo procesoru, izdosies “atšķetināt” vismaz 1 hash, ir vienkārši muļķīgi. Šāda notikuma iespējamība ir 1 no vairākiem miljoniem vai pat desmitiem miljonu.

Kurām monētām tiek izmantots algoritmsSHA-256?

Mūsdienās SHA-256 papildus bitcoin darbojas arī citas kriptovalūtas, piemēram:

  • Zetacoin.
  • namemonēta.
  • peercoin.
  • emercoin.

Neskatoties uz dažiem tās trūkumiem kriptovalūtas segmenta kontekstā, monētas, kuru pamatā ir SHA-256 algoritms, turpina ieņemt savas pozīcijas. Kas ir vērts tikai bitcoin, kas šodien tiek pārdots par cenu aptuveni 7,5 tūkstoši dolāru par monētu, un arī ieņem pirmo vietu reitingā pēc kapitalizācijas.

Daudzi interesējas par kriptovalūtu tehniskajiem pamatiem, bet tikai daži ir pazīstami ar kriptogrāfiju. Lai tiktu skaidrībā ar Bitcoin protokolā notiekošo, ir jābrien pa kriptogrāfijas terminu džungļiem, noslēpumainiem un neērtiem akronīmiem, piemēram, SHA-256, Scrypt, base58check, RIPMD-160 utt. Dažus mēs jau esam apskatījuši iepriekš. Šajā rakstā mēs centīsimies runāt par vienu no tā svarīgākajiem aspektiem - kripto-algoritmiem.

Klasika: SHA-256

Sāksim savu pārskatu, protams, ar klasisko SHA-256, ar kuru viss sākās - tieši uz šī algoritma tiek veidota bitcoin ieguve, kā arī lielākā daļa bitcoin klonu ().

Tātad, kas ir šis SHA-256? Šī ir kriptogrāfijas jaucējfunkcija, ko izstrādājuši mūsu "draugi" - ASV Nacionālās drošības aģentūra. Pagaidiet, nesteidzieties ar prostrāciju, nav par ko uztraukties. Esiet nedaudz pacietīgs, es apsolu, ka jums noteikti nebūs garlaicīgi.

Jebkuras jaukšanas funkcijas galvenais uzdevums ir pārvērst (vai jaukt) patvaļīgu datu vienumu kopu fiksēta garuma vērtībā ("pirkstu nospiedums" vai "savilkums"). Šī vērtība viennozīmīgi raksturos sākotnējo datu kopu (kalpos par tās parakstu), bez iespējas šos sākotnējos datus izvilkt. Tas ir oficiālais skaidrojums no Vikipēdijas, brīnišķīgs un zinātniski pamatots, bet es, piemēram, nerunāju tādā valodā. Un es esmu pārliecināts, ka lielākā daļa no jums arī to dara. Un tāpēc ļaujiet man izskaidrot šī "fenomena" nozīmi mūsu pašu veidā, vienkārši.

Kā mēs visi zinām, iegūstot SHA-256 kriptomonētas, mēs risinām uzdevumu ar CPU, GPU vai specializēta procesora palīdzību. Konversijas procesi tiek parādīti ieguvei paredzētās programmas saskarnē, piemēram, kā virkne "Accepted 0aef41a3b". Vērtība 0aef41a3b ir hash. Tas it kā ir lielas datu kopas paraksts (faktiski nākamais darījumu bloks ar tam pievienotu nejaušu skaitli). Šī īsā līnija it kā ir bloks, kas sastāv no vairākiem tūkstošiem, ja ne miljoniem līdzīgu līniju.

Tas arī izskaidro, kāpēc jums ir jāpieliek daudz problēmu, pirms varat atrast pareizo jaucējfunkciju jaunam blokam. Galu galā mēs nemeklējam nekādu hash, bet gan tādu, kas sākas ar noteiktu nulles skaitu. Jums ir viena iespēja no tūkstoš, desmitiem, simtiem tūkstošu, miljoniem lēmumu, ka nejaušam jauktam būs pareizais sākuma nulles skaits. Cik tieši? To nosaka sarežģītības parametrs, ko iestatījis jūsu ieguves baseins. Nav iespējams iepriekš saprast, vai jūs saņemsiet "skaistu hash" vai nē. Tas ir kā spēlēt loterijā, bet ar mašīnām, kas var ātrāk un labāk aprēķināt laimestu kombināciju nekā jebkurš no mums.

Vai jūs domājat, ka jums ir nepieciešams spēcīgs? Tam ir kāda jēga. Jo lielāka apstrādes jauda tiek izmantota, jo labāk, jo palielinās monētu ieguves iespēja. Bet paturiet prātā, ka jūs neesat vienīgais ieguvējs. Ir cilvēki, kuriem ir vairāk. Neuztraucieties, jums ir visas iespējas uzvarēt. Tas ir kā spēlēt loterijā, nekad nevar zināt, kad tev paveicas!

Tagad atgriezieties pie SHA-256 algoritma. Kriptovalūta nav vienīgais piemērs, kur tiek izmantots SHA-256. Ir vairāki protokoli, par kuriem jūs, visticamāk, esat dzirdējuši un kuri izmanto šo algoritmu. Šie protokoli ir SSL, SSH, PGP un daudzi citi. Katru reizi, kad piekļūstat drošai vietnei, izmantojot SSL sertifikātu, tiek izmantots SHA-256. Varu derēt, ka tu par to nedomāji, vai ne? Mēs visi laika gaitā iemācāmies kaut ko jaunu!

Tas ir SHA-256 algoritms, kas tiek ieviests visos specializētajos ASIC kalnračos, kas ir izlaisti līdz šim, ASIC aprīkojums citiem ieguves algoritmiem joprojām tiek izstrādāts. Papildus Bitcoin, ieguve, kuras pamatā ir SHA-256, tiek izmantota vairākās citās klonu digitālajās valūtās. Piemēram, altcoins, piemēram, Peercoin un Namecoin, to izmanto. Nesen ir bijis jaunu SHA-256 monētu pieaugums: Zetacoin, Ocoin, Tekcoin un desmitiem citu.

Grūtākas mīklas: Scrypt

SHA-256 algoritms nav vienīgais algoritms, kas interesē kalnračus. Otrs populārākais ieguves algoritms kriptovalūtu pasaulē ir Scrypt. Scrypt vēsture ir saistīta ar to, ka jau bitcoin pastāvēšanas sākumposmā kļuva skaidrs, ka SHA-256 funkcijas vienkāršība ļauj izveidot aparatūras risinājumus, kas šādus aprēķinus veiks daudz efektīvāk nekā uz parastais datora procesors (CPU). Patiešām, bitkoinu ieguve ļoti ātri pārgāja no CPU uz grafiskajām apstrādes vienībām (GPU), pēc tam uz programmējamām aparatūras ierīcēm (FPGA), pēc tam tika izstrādātas īpaši pielāgotas mikroshēmas (ASIC). specializētā ASIC jauda ir izaicinājums decentralizētai valūtai.

Jaukšanas funkcija Scrypt tika īpaši izstrādāta, lai sarežģītu aparatūras ieviešanu, palielinot aprēķiniem nepieciešamo resursu apjomu. Tāpēc (vismaz teorētiski) tādai ieguves resursu koncentrācijai kā bitcoin nevajadzētu notikt, un tā paliks decentralizēta.

Savā būtībā Scrypt ieguve daudz neatšķiras no Bitcoin ieguves. Datu bloks tiek dots kā ievade, tam tiek piemērota jaucējfunkcija, izejā mēs cenšamies iegūt "skaistu hash". Bet pašu jaucējfunkciju ir daudz grūtāk aprēķināt. Šis algoritms izmanto vairāk RAM (brīvpiekļuves atmiņa) nekā SHA-256. Scrypt atmiņa tiek izmantota, lai saglabātu lielu pseidogadījuma bitu secību vektoru, kas ģenerēts algoritma pašā sākumā. Kad vektors ir izveidots, tā elementi tiek jautāti pseidogadījuma secībā un apvienoti viens ar otru, lai iegūtu galīgo atslēgu.

Tā kā vektoru ģenerēšanas algoritms ir zināms, principā ir iespējams ieviest scrypt, kas neprasa daudz atmiņas, bet aprēķina katru elementu piekļuves brīdī. Tomēr elementa aprēķināšana ir salīdzinoši sarežģīta, un šifrēšanas funkcijas laikā katrs elements tiek nolasīts daudzas reizes. Scrypt ir tāds līdzsvars starp atmiņu un laiku, ka ieviešana bez atmiņas ir pārāk lēna.

Šī mākslīgi radītā sarežģītība, visas šis laikietilpīgais skaitļošanas process un atmiņas prasības noved pie tā, ka jebkura specializētā Scrypt ieguves iekārta nebūs daudz efektīvāka par vispārējas nozīmes ierīcēm (GPU, CPU).Ideālā gadījumā uz Scrypt balstītas monētas vajadzētu iegūt vienā (vai vairākos) datoros ar lielu atmiņu. Šeit liela nozīme ir videokartēm. Ja apsverat iespēju iegādāties videokartes ieguvei, izmantojot Scrypt protokolu, vislabākais risinājums būtu iegādāties produktu no ATI. Arhitektūras atšķirību dēļ ATI grafisko karšu ieguves veiktspēja tagad ir daudz augstāka nekā Nvidia, lai gan nākotnē tas var mainīties.

Galu galā tas viss izpaužas šādi: SHA-256 un Scrypt protokoli darbojas ar vienu un to pašu mērķi - ar brutālu spēku iegūt "diezgan jauktu", kas dos mums (vai drīzāk, baseinam, kurā mēs strādājam) tiesības pagarināt. blokķēdi un saņemiet par to atlīdzību. Viņi vienkārši atrisina problēmu dažādos veidos: SHA-256 uzsvars tiek likts uz aparatūras tehniskajām iespējām - jo augstāka veiktspēja, jo labāks rezultāts. Un Scrypt palaišanai ir nepieciešams liels atmiņas apjoms. Attiecīgi veiktspēja ir tieši atkarīga no brīvpiekļuves atmiņas (RAM) un datorā instalēto video karšu lieluma.

Litecoin ir slavenākais altkoīns, ko izmanto Scrypt ieguvē. Ir arī Dogecoin, Digitalcoin, Franco, Bottlecaps un daudzi citi. Scrypt monētu, īpaši Litecoin, popularitāte ir ievērojami pieaugusi pēc tam, kad bitkoinu ieguve masveidā pārgāja uz ASIC un bijušie kalnrači ar videokartēm palika bez darba – viņu aprīkojums nespēj konkurēt ar specializētajiem kombainiem. Tāpēc viņi pielāgoja savus videoklipus gaismas monētu ieguvei vai citu eksotikas ieguvei, ko joprojām var pārdot lētticīgiem, nelaimīgiem investoriem.

Kriptodejas: Scrypt-Jane


Iepazīstieties ar Džeinu! Nē, nē, viņa un Scrypt nav precējušies, lai gan starp viņiem joprojām pastāv zināmas ģimenes attiecības. Scrypt-Jane patīk labi pavadīt laiku tāpat kā jebkurai citai meitenei. Un viņas datu jaukšanas spējas un algoritmu draugi aizvedīs jūs uz eksotiskākajām vietām! Nesaprotu? Tagad es visu paskaidrošu.

Scypt-Jane atbalsta vismaz trīs dažādas straumes šifrēšanas sistēmas. Pirmkārt, mums ir Salsa20/8. Nē, šī nav Latīņamerikas deja - patiesībā tā ir diezgan vienkārša funkcija. Tās galvenais uzdevums ir saņemt 192 baitu virkni (burtu vai ciparu) un pēc tam pārvērst to par 64 baitu Salsa20 (x) virkni.

Nav skaidrs, vai ne? Labi, es mēģināšu izmantot mazāk teorijas. Salsa20 sastāv no divām daļām: straumes šifra datu šifrēšanai (tam ir jāizklausās pazīstamāk) un saspiešanas funkcijas (ko sauc par Rumba20 algoritmu), lai saspiestu 192 baitu virkni 64 baitu vērtībā. Lai izmantotu "tējkannas" leksikonu, varat teikt šādi: jūsu virkne var būt garāka par 64 baitiem, līdz tā ir vienāda ar vērtību 192 baiti, un tādā gadījumā virkne tiks saspiesta (lasi: pārveidota) par 64 baitu virkni.

Tagad, kad esam nedaudz iesildījušies pēc salsas un rumbas, ir pienācis laiks iepazīstināt ar otro funkciju - ChaCha20. Godīgi sakot, ne es izdomāju šādus nosaukumus. ChaCha20 ir ļoti līdzīgs Salsa20: tas ir tas pats straumes šifrs. Un tomēr tas piedāvā dažus papildu pakalpojumus, piemēram, paaugstinātu izturību pret kriptonalīzi. Tas arī uzlabo datu sajaukšanu katrā kārtā. Tas ir, ja jūs iegūstat kriptovalūtu kā daļu no ieguves pūla, tad varat redzēt, ka viena ieguves kārta (laika periods, kurā baseins atrod vienu bloku) var būt gan garš, gan īss laika periods. Šo raundu ilgums daļēji ir atkarīgs arī no uzlabotās miksēšanas, ko piedāvā Scrypt-Jane's ChaCha20. Ir arī citi faktori, kas ietekmē apaļā laika samazināšanos, bet par to vēlāk.

Visbeidzot, trešā datu sajaukšanas funkcija ir Salsa6420/8. Seksīgs nosaukums, vai ne? Salsa6420/8 ir Salsa20/8 64 baitu versijas koncepcijas pierādījums. Tā ir tikai uzlabota Salsa20/8 versija, kas ļauj strādāt ar lielāku baitu blokiem. Es varētu turpināt ar detalizētu tehnisko informāciju, bet baidos, ka puse no jums, mani dārgie lasītāji, jau ir aizmiguši, bet pārējie ir sākuši spēlēt rotaļlietas savos viedtālruņos, tāpēc nekavēsimies pie šī. Vienkārši atcerieties, ka Scrypt-Jane ir trīs lieliski "miksēšanas partneri".

Bet atpakaļ uz realitāti! Scrypt-Jane atbalsta arī vairākas jaucējfunkcijas. Viens no tiem mums visiem jau ir ļoti labi zināms - tas ir SHA-256. Tā atbalsta arī uzlaboto SHA-512. Citas atbalstītās jaucējfunkcijas ietver BLAKE256/512, Skein512 un Keccak256/512 (vai tikai SHA -3).

BLAKE256-512 ir ļoti vienkāršs lietošanā dizains, un tas balstās uz komponentiem, kurus jau esam analizējuši: HAIFA struktūru (šobrīd mēs to neapskatīsim) un ChaCha galveno funkciju (kurai mēs pieskārāmies iepriekš). BLAKE raksturīgākās iezīmes ir augsta drošības rezerve (diezgan svarīga īpašība, bet ne par to tagad) un augstas veiktspējas daudzpusība (kas ir ļoti svarīga arī kalnračiem). Lieta, kas jāatceras par BLAKE, ir tā, ka tas var un būs ātrāks par SHA-2(56) vairākās platformās.

No otras puses, mums ir Skein512. Tie, kas izdomā tik lieliskus vārdus, ir jāapbalvo ar medaļu... Šķēle (krievu val. “Lalka”) ir jaucējfunkcija, kas tiek prezentēta kriptogrāfijas jaucējalgoritmu konkursā. Tas apvieno ātrumu, drošību, vienkāršību un elastību. Mēs visi to ļoti mīlam, vai ne? Tas ir arī ļoti efektīvs vairākās platformās gan aparatūras, gan programmatūras vidēs. Skein algoritmu var atrast arī mazās viedkartēs, ar kurām lielākajai daļai no mums ir liela pieredze.

Jā, deju kriptogrāfijas terminoloģija šeit ir vienkārši nikna. Bet pietiek ar teoriju, apskatīsim, ko Scrypt-Jane var darīt mūsu labā. Scrypt-Jane ir savs veids, kā mērogot problēmu sarežģītību. Scrypt-Jane izmanto N koeficientu (kas ir skaitlis), un šis skaitlis nosaka problēmu risināšanai nepieciešamo atmiņas apjomu. N koeficienta vērtība ar noteiktiem intervāliem palielinās. Tas parasti notiek, ja blokķēdē tiek atrasts noteikts bloku skaits. Ikreiz, kad šis N faktora skaitlis palielinās, kriptovalūtu ieguves efektivitāte samazinās, jo to pašu uzdevumu veikšanai ir nepieciešams arvien vairāk atmiņas. Vienkārši sakot, samazināsies izpildīto uzdevumu skaits, tas ir, samazināsies arī iespēja atrast risinājumu.

Scrypt-Jane sākotnēji tika izstrādāta tikai CPU ieguvei kā vēl sarežģītāks Scrypt aizstājējs. Bet diemžēl arī šeit CPU ieguves dominēšana nebija ilga. GPU kalnrači riņķoja kā vārnas ap Scrypt-Jane monētām, cenšoties palielināt ieguves efektivitāti un līdz ar to arī peļņu. Vai jūs domājat, ka pat tad, ja peļņa samazināsies, jūs varēsit iegūt ar GPU ilgāku laiku, salīdzinot ar ieguvi uz CPU? Baidos, ka tu kļūdies. Galu galā N koeficients būs tik augsts, ka GPU būs mazāk efektīvi nekā CPU ieguvei Scrypt-Jane. Šī iemesla dēļ Scrypt-Jane nav tik viegli pārvērst specializētā ASIC ieguvē kā SHA-256 vai pat Scrypt.

Viena no pirmajām Scrypt-Jane monētām, kas ieguva zināmu popularitāti, bija Yacoin (yes, Yes, Yet Another Coin - "cita monēta"), tomēr šīs monētas popularitāte strauji kritās līdz ar kalnraču intereses samazināšanos par to. Pavisam nesen mēs esam redzējuši tādas monētas kā Copperbars (arī GPU ieguves efektivitāte ir samazinājusies), un jaunākie saraksta papildinājumi ir TIX un Cryptonerd valūtas.

Nāk visur

Trīs aprakstītie algoritmi aptver vairāk nekā 90% no visa kriptovalūtu zoodārza, taču, protams, ir arī citi. Gandrīz katru nedēļu tiek piedāvāti arvien jauni un gudri ieguves algoritmi - nav iespējams aptvert visu. No salīdzinoši jaunajiem var minēt īpaši "ASIC izturīgu" algoritmu, kas tiks izmantots jaunās paaudzes kriptovalūtu platformā.

Mēs ceram, ka šis raksts ir devis jums labāku priekšstatu par to, kādi ir visizplatītākie ieguves kriptogrāfijas algoritmi. Ja nodarbojaties ar ieguvi, tagad jums ir labāka izpratne par to, kas tieši notiek jūsu dūcojošās un pārkarstošās kalnrūpniecības mašīnas zarnās un kam tieši tiek tērēta jūsu elektrība.

, "Secure Hash Standard (SHS)", ASV Tirdzniecības departaments, 2012. gada marts

Noteikumi:
FIPS federālais informācijas apstrādes standarts.
SHA Secure Hash Algorithm (spēcīgs jaukšanas algoritms).
Vārds ir neparakstīts mainīgais, kura garums ir 32 biti (4 baiti) vai 64 biti (8 baiti) atkarībā no izvēlētā SHA algoritma.

SECRE HASH STANDARD (SHA-1 un SHA-2 kriptogrāfisko funkciju saime)

SHA kriptogrāfisko funkciju saime ir sadalīta divās apakškopās: pats algoritms SHA-1(publicēts 1995. gadā — FIPS PUB 180-1) un vairāki algoritmi ar vispārējo nosaukumu SHA-2(publicēts 2002. gadā — FIPS PUB 180-2, atjaunināts 2008. gadā — FIPS PUB 180-3): SHA-224, SHA-256, SHA-384, SHA-512; algoritmi, kas 2012. gadā tika pievienoti FIPS PUB 180-4 SHA-512/224 un SHA-512/256. Mēs apskatīsim FIPS PUB 180-4 standartu, kas apvieno visu SHA-1 un SHA-2 jaucējfunkciju saimi.

Šis standarts definē šādus jaukšanas algoritmus: SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 un SHA-512/256, kas aprēķina saspiestu digitālo datu (ziņojumu) attēlojumu. Ja jaukšanas algoritma ievade ir jebkura garuma ziņojums, bet mazāks par 2 64 bitiem (par SHA-1, SHA-224 un SHA-256) vai mazāk nekā 2128 biti (par SHA-384, SHA-512, SHA-512/224 un SHA-512/256), tad rezultāts tiks izsaukts datiem ziņojuma īssavilkuma vai jaucējvērtība. Ziņojuma jaucējvērtības lielums ir diapazonā no 160 līdz 512 bitiem (vai no 20 līdz 64 baitiem), atkarībā no izvēlētā algoritma. SHA algoritmus parasti izmanto kopā ar citiem kriptogrāfijas algoritmiem, piemēram, digitālā paraksta algoritmiem vai jaukšanai ar atslēgu ziņojumu autentifikācijai (HMAC), vai ģenerējot nejaušus skaitļus (bitus).

Tiek uzskatīts, ka šajā standartā norādītie jaukšanas algoritmi ir droši, jo no dotā algoritma nav iespējams aprēķināt sekojošo: 1) atkopt ziņojumu no konkrēta ziņojuma īssavilkuma vai 2) atrodiet divus dažādus ziņojumus, kuriem ir vienāds ziņojumu kopsavilkums (atrast sadursmi). Jebkuras izmaiņas ziņojumā ar ļoti lielu varbūtību radīs dažādas jaucējvērtības. Šis rekvizīts ir noderīgs, veidojot un pārbaudot ciparparakstus, autentificējot ziņojumus un ģenerējot nejaušus skaitļus.

Katrs algoritms sastāv no diviem posmiem: Iepriekšēja apstrāde un hash aprēķins. Iepriekšēja apstrāde ietver ziņojuma pabeigšana, papildinātā ziņojuma sadalīšana M-bitu bloki, un inicializācijas vērtību iestatīšana Izmantotais hash aprēķinā. Jaukšanas aprēķins ir iteratīvs, apstrādājot katru M polsterētā ziņojuma bitu bloks un izmanto funkcijas, konstantes un vārdu darbības, lai iegūtu jaucējvērtību. Jaukšanas aprēķina procedūras rezultāts ir ziņojuma īssavilkums.

Algoritmi atšķiras pēc jaukto datu bloku un vārdu lieluma un jaucējvērtībām - skatiet 1. tabulu.

Algoritms Ziņojuma lielums (bitos) Bloka lielums (bitos) Vārda lielums (bitos) Ziņojuma īssavilkuma lielums (bitos)
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
Funkcijas

SHA-1 izmanto nelineāru funkciju secību f 0 , f 1 ,…, f 79. Katra funkcija f t, kur 0 ≤ t< 79 , darbojas ar trim 32 bitu mainīgajiem: x, y, un z, kā rezultātā tiek iegūts viens 32 bitu vārds. SHA-1 algoritms izmanto šādu nelineāro funkciju kopu f t (x, y, z):
00 ≤ t ≤ 19Ch(x, y, z)
20 ≤ t ≤ 39Paritāte(x, y, z)= x XOR y XOR z
40 ≤ t ≤ 59Maj(x, y, z)
60 ≤ t ≤ 79Paritāte(x, y, z)= x XOR y XOR z

Būla algebra.
Ņemiet vērā, ka, piemēram, funkcija Ch var izteikt citā veidā:
z XOR (x UN (y XOR z))
Rezultāts nemainīsies. Dažādās algoritma realizācijās šādas iespējas var atrast.

SHA-224 un SHA-256 izmanto sešas nelineāras funkcijas:

Ch(x, y, z)= (x UN y) XOR (NAV x UN z)
Maj(x, y, z)= (x UN y) XOR (x UN z) XOR (y UN z)

Sigma0(x)= ROTR(x, 2) XOR ROTR(x, 13) XOR ROTR(x, 22)
Sigma1(x)= ROTR(x, 6) XOR ROTR(x, 11) XOR ROTR(x, 25)

Delta0(x)= ROTR(x, 7) XOR ROTR(x, 18) XOR SHR(x, 3)
Delta1(x)= ROTR(x, 17) XOR ROTR(x, 19) XOR SHR(x, 10)


n mazliet:
ROTR(x, n) = (x » n) | (x "(32-n))
SHR — pārbīde pa labi par n mazliet:
SHR(x, n) = x » n

SHA-384, SHA-512, SHA-512/224, SHA-512/384 izmanto sešas nelineāras funkcijas:

Ch(x, y, z)= (x UN y) XOR (NAV x UN z)
Maj(x, y, z)= (x UN y) XOR (x UN z) XOR (y UN z)

Sigma0(x)= ROTR(x, 28) XOR ROTR(x, 34) XOR ROTR(x, 39)
Sigma1(x)= ROTR(x, 14) XOR ROTR(x, 18) XOR ROTR(x, 41)

Delta0(x)= ROTR(x, 1) XOR ROTR(x, 8) XOR SHR(x, 7)
Delta1(x)= ROTR(x, 19) XOR ROTR(x, 61) XOR SHR(x, 6)

Darbības ar vārdiem (64 bitu).
ROTR — cikliska nobīde pa labi par n mazliet:
ROTR(x, n) = (x » n) | (x "(64-n))
SHR — pārbīde pa labi par n mazliet:
SHR(x, n) = x » n

Konstantes

Konstantes K t
00 ≤ t ≤ 19 0x5a827999
20 ≤ t ≤ 39 0x6ed9eba1
40 ≤ t ≤ 59 0x8f1bbcdc
60 ≤ t ≤ 79 0xca62c1d6

(Ja jūs interesē jautājums par to, no kurienes nāk šie skaitļi, mēs norādīsim to avotu:
0x5A827999 = $\sqrt(2) / 4$ , 0x6ED9EBA1 = $\sqrt(3) / 4$ , 0x8F1BBCDC = $\sqrt(5) / 4$ , 0xCA62C1D6 = $\sqrt(10) / 4; viss tiek reizināts ar 232).

64 konstantes (32 bitu vārdi): K 0 , K 1 ... K 63. (Ziņkārīgajiem šīs konstantes attēlo pirmos 32 bitus no pirmo 64 pirmskaitļu daļskaitļa kuba saknēm.)

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
]

80 konstantes (64 bitu vārdi): K 0 , K 1 ... K 79. (Ziņkārīgajiem šīs konstantes attēlo pirmos 64 bitus no pirmo 80 pirmskaitļu daļskaitļa kuba saknēm.)

K = [
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
]

Iepriekšēja apstrāde
1. Ziņojuma aizpildīšana

Mērķis ir padarīt ziņojumu par 512 vai 1024 bitu daudzkārtni atkarībā no izvēlētā SHA algoritma. Aizpildīšanu var veikt pirms jaucējvērtības aprēķināšanas procedūras vai jaukšanas izpildes laikā, bet pirms bloka(-u) apstrādes, kurā(-os) būs pildījums.

M ir vienāds ar l "viens" k- lai saņemtā ziņojuma lielums būtu par 64 bitiem mazāks nekā 512 daudzkārtnis ( l+1+k = 448 mod 512). Pēc tam rezultātam tiek pievienots 64 bitu lieluma attēlojums l oriģinālā ziņa M "abc" "viens", tad 448 - (24 +1) = 423 biti «0» , un visbeidzot 64 bitu attēlojums ar izmēru 24 = 00…011000. Rezultātā mēs saņemam 512 bitu ziņojumu šādā formā:

Pieņemsim, ka ziņojuma garums M ir vienāds ar l mazliet. Vispirms tika pievienots ziņojuma beigās "viens", un tad nulles - summā k- lai saņemtā ziņojuma lielums būtu par 128 bitiem mazāks nekā 896 ( l+1+k = 896 mod 1024). Pēc tam rezultātam tiek pievienots 128 bitu lieluma attēlojums l oriģinālā ziņa M. Piemēram, (ASCII teksts) mums ir ziņojums "abc", garums 8 * 3 = 24 biti. Pievienošana ziņojumam "viens", tad 896 - (24 +1) = 871 bits «0» , un visbeidzot 128 bitu attēlojums ar izmēru 24 = 00…011000. Rezultātā mēs saņemam 1024 bitu ziņojumu šādā formā:

2. Papildinātā ziņojuma sadalīšana M-bitu bloki.

N M-bitu bloki.

Paplašinātais ziņojums ir sadalīts Nr.512-bitu bloki: M(1) , M(2) ... M(N). Jo 512 bitus var izteikt kā 16 (sešpadsmit) 32 bitu vārdus, tad pirmos 32 bitus i M 0 (i), nākamie 32 biti M 1 (i), un tā mēs nonākam pie M 15(i).

Paplašinātais ziņojums ir sadalīts N 1024-bitu bloki: M(1) , M(2) ... M(N). Jo 512 bitus var izteikt kā 16 (sešpadsmit) 64 bitu vārdus, pēc tam pirmos 64 bitus i no ziņojuma bloka, apzīmējiet M 0 (i), nākamie 64 biti M 1 (i), un tā mēs nonākam pie M 15(i).

3. Inicializācijas vērtību iestatīšana

Pirms hash aprēķināšanas procedūras algoritms nosaka sākotnējās vērtības H. Vārdu lielums un skaits H ir atkarīgs no izvēlētā algoritma.

Četri 32 bitu vārdi.
H0 = 0x67452301
H1 = 0xefcdab89
H2=0x98badcfe
H3 = 0x10325476
H4 = 0xc3d2e1f0

Astoņi 32 bitu vārdi.

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

Astoņi 32 bitu vārdi.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19)

(Ziņkārīgajiem: šīs vērtības ir pirmskaitļu kvadrātsaknes daļdaļas pirmie 32 biti - skaitļu sērijas numuri: pirmie 8).

Astoņi 64 bitu vārdi.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17,
0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511,
0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4)

(Ziņkārīgajiem: šīs vērtības atspoguļo pirmskaitļu kvadrātsaknes daļdaļas pirmos 64 bitus - skaitļu sērijas numurus: no 9. līdz 16.).

Astoņi 64 bitu vārdi.
H0, H1, H2, H3, H4, H5, H6, H7 = (


(Ziņkārīgajiem: šīs vērtības ir pirmskaitļu kvadrātsaknes daļdaļas pirmie 64 biti - skaitļu sērijas numuri: pirmie 8).



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











Astoņi 64 bitu vārdi.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x8C3D37C819544DA2, 0x73E1996689DCD4D6, 0x1DFAB7AE32FF9C82,
0x679DD514582F9FCF, 0x0F6D2B697BD44DA8, 0x77E36F7304C48942,
0x3F9D85A86A1D36C8, 0x1112E6AD91D692A1)

"SHA-512/t" ir vispārīgs nosaukums t-bitu jaucējfunkcijai, kuras pamatā ir SHA-512, kuras rezultāts ir saīsināts līdz t bitiem. Katrai t-bitu jaucējfunkcijas versijai ir nepieciešama cita inicializācijas vērtība. Šim nolūkam ir ieviesta īpaša procedūra SHA-512/t sākotnējo vērtību noteikšanai konkrētam variantam t.

SHA-512/t sākotnējo vērtību noteikšanas procedūra.
1. Mēs ņemam sākotnējās H vērtības no SHA-512 algoritma.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b,
0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f,
0x1f83d9abfb41bd6b, 0x5be0cd19137e2179)

2. Veicam šādus aprēķinus:
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. Aprēķiniet jaucējvērtību no virknes SHA-512 ("SHA-512/t") (kur t var būt "224" vai "256") ar sākotnējām vērtībām H'. Jaucējvērtība būs SHA-512/t algoritma sākotnējās vērtības:
H SHA-512/224 = SHA512(H', "SHA-512/224")
H SHA-512/256 = SHA512(H', "SHA-512/256")

Astoņi 64 bitu vārdi.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x22312194FC2BF72C, 0x9F555FA3C84C64C2, 0x2393B86B6F53B151,
0x963877195940EABD, 0x96283EE2A88EFFE3, 0xBE5E1E2553863992,
0x2B0199FC2C85B8AA, 0x0EB72DDC81C52CA2)

Hash aprēķins

Papildināšanas algoritmā "+" notiek modulo 2 32 .

Ja i = 1 līdz N:
{
1. i
M 0 (i) ieslēgts M 15 (i))
80 vārdos pa 32 bitiem (ar W0 ieslēgts W 79):
W t = M t, ja t = 0..15
W t = ROTL(W t-3 XOR W t-8 XOR W t-14 XOR W t-16 , 1), ja t = 16..79
(Interesanti, ka sākotnējā SHA specifikācija (SHA-0 algoritms) tā nebija
cikliska nobīde pa kreisi ROTL(x, 1))

2. Mēs inicializējam mainīgos 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. Kompresijas funkcijas galvenā cilpa
Ja t = 0 līdz 79
TEMP= ROTL(a, 5) + f t (b, c, d) + e + W t + K t
e=d
d=c
c= ROTL(b, 30)
b = a
a = TEMP

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)
}

Iegūtā jaucējvērtība ir 160 bitu ziņojuma īssavilkums:
H0(N) || H1(N) || H2(N) || H3(N) || H4(N)(5 vārdi * 32 biti = 160 biti)

Darbības ar vārdiem (32 bitu).
ROTL — cikliska nobīde pa kreisi par n mazliet:
ROTL(x, n) = (x « n) | (x" (32-n))

Papildināšanas algoritmā "+" notiek modulo 2 32 .

Ja i = 1 līdz N:
{
1. i ziņojumu bloku, izmantojot šādu algoritmu
pārveidots no 16 vārdiem uz 32 bitiem (ar M 0 (i) ieslēgts M 15 (i))
64 vārdos pa 32 bitiem (ar W0 ieslēgts W 63):
W t = M t, ja t = 0..15
W t \u003d W t-16 + Delta0(W t-15) + W i-7 + Delta1(W t-2), ja 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. Kompresijas funkcijas galvenā cilpa
Ja t = 0 līdz 63
TEMP1=h+ Sigma1(e) + Ch(e,f,g) + Wt + K t
TEMP2= Sigma0(a)+ Maj(a, b, c)
h = g
g = f
f=e
e = d + TEMP1
d=c
c = b
b = a
a = TEMP1 + TEMP2

4. Aprēķināt starpposma jaucējvērtību
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)
}

Iegūtā jaucējvērtība ir 256 bitu ziņojuma īssavilkums:
(8 vārdi * 32 biti = 256 biti)
Uzmanību: baitu secība katrā vārdā ir "big-endian"

Algoritms ir identisks SHA-256 algoritmam. Atšķirība ir H inicializācijas vērtībās (skatīt iepriekš) un iegūtā jaucējkoda ņemšanu. Jo mēs iegūstam 256 bitu ziņojuma īssavilkumu, pēc tam mēs ņemam tikai pirmos 224 bitus, lai iegūtu galīgo jaucējvērtību:

H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N) || H6(N)(7 vārdi * 32 biti = 224 biti)
Uzmanību: baitu secība katrā vārdā ir "big-endian"

Algoritms ir līdzīgs SHA-256, tikai visi mainīgie un vārdi ir 64 bitu.
Papildināšanas algoritmā "+" notiek modulo 2 64 .

Ja i = 1 līdz N:
{
1. i ziņojumu bloku, izmantojot šādu algoritmu
pārveidots no 16 vārdiem uz 64 bitiem (ar M 0 (i) ieslēgts M 15 (i))
80 vārdos pa 64 bitiem (ar W0 ieslēgts W 79):
W t = M t, ja t = 0..15
W t \u003d W t-16 + Delta0(W t-15) + W i-7 + Delta1(W t-2), ja t = 16..79

2. Mēs inicializējam mainīgos 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. Kompresijas funkcijas galvenā cilpa
Ja t = 0 līdz 79
TEMP1=h+ Sigma1(e) + Ch(e,f,g) + Wt + K t
TEMP2= Sigma0(a)+ Maj(a, b, c)
h = g
g = f
f=e
e = d + TEMP1
d=c
c = b
b = a
a = TEMP1 + TEMP2

4. Aprēķināt starpposma jaucējvērtību
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)
}

Iegūtā jaucējvērtība ir 512 bitu ziņojuma īssavilkums:
H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N) || H6(N) || H7(N)(8 vārdi * 64 biti = 512 biti)
Uzmanību: baitu secība katrā vārdā ir "big-endian"

Algoritms ir identisks SHA-512 algoritmam. Atšķirība ir H inicializācijas vērtībās (skatīt iepriekš) un iegūtā jaucējkoda ņemšanu. Jo mēs iegūstam 512 bitu ziņojuma īssavilkumu, pēc tam mēs ņemam tikai pirmos 384 bitus, lai iegūtu galīgo jaucējvērtību:

H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N)(6 vārdi * 64 biti = 384 biti)
Uzmanību: baitu secība katrā vārdā ir "big-endian"

Algoritms ir identisks SHA-512 algoritmam. Atšķirība ir H inicializācijas vērtībās (skatīt iepriekš) un iegūtā jaucējkoda ņemšanu. Jo mēs iegūstam 512 bitu ziņojuma īssavilkumu, pēc tam mēs ņemam tikai pirmos 224 bitus, lai iegūtu galīgo jaucējvērtību:

H0(N) || H1(N) || H2(N) || pirmie 32 biti H3 (N)(3 vārdi * 64 biti + 32 biti = 224 biti)
Uzmanību: baitu secība katrā vārdā ir "big-endian"

Algoritms ir identisks SHA-512 algoritmam. Atšķirība ir H inicializācijas vērtībās (skatīt iepriekš) un iegūtā jaucējkoda ņemšanu. Jo mēs iegūstam 512 bitu ziņojuma īssavilkumu, pēc tam mēs ņemam tikai pirmos 256 bitus, lai iegūtu galīgo jaucējvērtību:

H0(N) || H1(N) || H2(N) || H3(N)(4 vārdi * 64 biti = 256 biti)
Uzmanību: baitu secība katrā vārdā ir "big-endian"

Kriptogrāfiskie primitīvi
Publiskās atslēgas algoritmi RSA DSA
Straumes šifri RC4
Jaucējfunkcijas
  • Tulkošana

Vienā brīdī es gribēju noskaidrot, cik ātri jūs varat manuāli iegūt bitkoīnus. Izrādījās, ka SHA-256 jaukšana tiek izmantota ieguvei, un tā ir diezgan vienkārša un to var aprēķināt pat bez datora. Protams, process ir ļoti lēns un pilnīgi nepraktisks. Bet, izejot visas darbības uz papīra, jūs varat labi saprast algoritma detaļas.

Viena kriptogrāfijas kārta

Kalnrūpniecība

Galvenā visas Bitcoin drošības sistēmas daļa ir ieguve. Pamatideja ir tāda, ka kalnrači grupē bitcoin darījumus vienā blokā, kurā jau ir sajaukts neskaitāms skaits, lai atrastu ļoti retu jaucējvērtību, uz kuru attiecas īpaši nosacījumi. Kad šāda vērtība tiek atrasta, bloks tiek uzskatīts par mīnu un nonāk bloku ķēdē. Jaukšanai pašam nav cita lietderīga mērķa kā tikai palielināt grūtības atrast pareizo bloku. Tādējādi šī ir viena no garantijām, ka neviens viens pats ar kādu esošo resursu kopumu nevarēs pārņemt kontroli pār visu sistēmu. Vairāk par kalnrūpniecību varat lasīt manā pēdējā rakstā.

Kriptogrāfiskā jaukšanas funkcija saņem datu bloku kā ievadi un rada nelielu, bet neparedzamu izvadi. Tas ir izstrādāts tā, lai nebūtu iespējams ātri iegūt vēlamo rezultātu, un jums ir jāturpina atkārtot, līdz atrodat piemērotu vērtību. Bitcoin kā šādu funkciju izmanto SHA-256. Turklāt, lai uzlabotu drošību, SHA-256 tiek uzklāts uz bloku divas reizes, un to jau sauc par dubulto SHA-256.

Bitcoin derīguma kritērijs ir pietiekams sākuma nulles skaits. Atrast šādu hash ir tikpat grūti kā, piemēram, atrast automašīnu vai tālruņa numuru, kas beidzas ar vairākām nullēm. Bet, protams, ar hash, tas ir eksponenciāli grūtāk. Pašlaik derīgā jauktā ir jāietver aptuveni 17 nulles, kas ir tikai 1 no 1,4 x 10 20. Ja mēs zīmējam analoģiju, tad atrast šādu vērtību ir grūtāk nekā atrast konkrētu daļiņu starp visām smiltīm uz Zemes.

Zilie bloki nelineāri sajauc bitus, lai padarītu kriptogrāfisko analīzi grūtāku. Turklāt, lai nodrošinātu vēl lielāku uzticamību, tiek izmantotas dažādas sajaukšanas funkcijas (ja varat atrast matemātisku nepilnību, lai ātri ģenerētu derīgus jaucējus, tad jūs pārņemsit kontroli pār visu bitcoin ieguves procesu).

Vairākuma funkcija (Ma bloks) darbojas pa bitiem vārdiem A, B un C. Katrai bita pozīcijai tā atgriež 0, ja lielākā daļa ievades bitu šajā pozīcijā ir nulles, pretējā gadījumā tā atgriež 1.

Bloks Σ0 pagriež A par 2 bitiem, tad sākotnējais vārds A tiek pagriezts par 13 bitiem un līdzīgi par 22 bitiem. Rezultātā iegūtās trīs nobīdītās A versijas tiek pievienotas bitu pa daļām modulo 2 ( parastais xor, (A ror 2) xor (A ror 13) xor (A ror 22)).

Ch īsteno atlases funkciju. Katrā bita pozīcijā tiek pārbaudīts bits no E, ja tas ir vienāds ar vienu, tad bits no F no šīs pozīcijas nonāk izejā, pretējā gadījumā bits no G. Tādējādi biti no F un G tiek sajaukti, pamatojoties uz E vērtība.

Σ1 pēc struktūras ir līdzīga Σ0, bet darbojas ar vārdu E, un atbilstošās nobīdes konstantes ir 6, 11 un 25.

Sarkanie bloki veic 32 bitu pievienošanu, ģenerējot jaunas vērtības izvades vārdiem A un E. Vērtība Wt tiek ģenerēta, pamatojoties uz ievades datiem (tas notiek tajā algoritma daļā, kas saņem un apstrādā jauktos datus . Tas nav mūsu uzmanības centrā). K t ir sava konstante katrai kārtai.

Iepriekš redzamajā diagrammā ir pamanāms, ka vienā kriptogrāfijas kārtā mainās tikai A un E. Atlikušie vārdi nemainās, bet tiek nobīdīti izejā - vecais A kļūst par izeju B, vecais B kļūst par jauno C utt. Lai gan viena algoritma kārta datus īpaši nemaina, taču pēc 64 kārtām ievades informācija tiks pilnībā šifrēta.

Samaziniet manuāli

Videoklipā es parādu, kā ar pildspalvu un papīru var iziet visas aprakstītās darbības. Es veicu pirmo jaukšanas kārtu, lai iegūtu bloku. Man tas aizņēma 16 minūtes, 45 sekundes.


Ļaujiet man nedaudz paskaidrot, kas notiek: es uzrakstīju vārdus no A līdz H heksadecimālā formā, un zem katra es veicu bināro tulkojumu. Bloka Ma izpildes rezultāts ir zem vārda C, un A vērtības pēc nobīdēm un pati izvade Σ0 atrodas virs līnijas ar A. Izvēles funkcija parādās zem G, un visbeidzot atbilstošās nobīdītās versijas E un vērtība aiz bloka Σ1 iet virs līnijas ar E. In apakšējā labajā stūrī veica saskaitīšanu, kuras rezultāts tiek iesaistīts gan jaunā A, gan jaunā E (pirmie trīs sarkanie summēšanas bloki) aprēķinā. ). Augšējā labajā pusē es aprēķināju jauno A vērtību, un vidū ir jaunās E vērtības aprēķins. Visas šīs darbības tika apspriestas iepriekš, un tās var viegli izsekot diagrammā.

Papildus kārtai, kas ir redzama videoklipā, es veicu vēl vienu - pēdējo 64. jaukšanas kārtu konkrētam bitcoin blokam. Fotoattēlā jaucējvērtība ir iezīmēta dzeltenā krāsā. Nulles skaits apstiprina, ka šis ir derīgs bitcoin hash. Ņemiet vērā, ka nulles atrodas hash beigās, nevis sākumā, kā es rakstīju iepriekš. Iemesls ir tāds, ka bitkoīns vienkārši apvērš SHA-256 saņemtos baitus.


Pēdējā SHA-256 kārta, kā rezultātā tika veiksmīgi iegūts bitcoin bloks

Ko tas viss nozīmē "dzelzs" kalnraču dizainam?

Katrs SHA-256 solis digitālajā loģikā izskatās ļoti vienkāršs – vienkāršas bitu darbības un 32 bitu summas (ja kādreiz esat pētījis shēmas, droši vien jau esat iedomājies, kā tas varētu izskatīties aparatūrā). Tāpēc ASIC ļoti efektīvi ievieš SHA-256, paralēli izvietojot simtiem SHA-256 izpildes bloku. Zemāk esošajā fotoattēlā ir redzama ieguves mikroshēma, kas var aprēķināt 2–3 miljardus jaucējvārdu sekundē. Vairāk fotoattēlu varat redzēt vietnē Zeptobars.


Bitfury ASIC, kas var iegūt bitkoīnu ar ātrumu 2–3 gigahaši sekundē, silīcija štats. Bilde no Zeptobars. (CC BY 3.0)

Atšķirībā no bitcoin, Litecoin, Dogecoin un citas līdzīgas alternatīvas monētu sistēmas izmanto šifrēšanas jaukšanas algoritmu, ko pēc būtības ir grūti ieviest aparatūrā. Šis algoritms izpildes laikā atmiņā saglabā 1024 dažādas jaucējvērtības un apvieno tās izejā, lai iegūtu gala rezultātu. Tāpēc, lai aprēķinātu šifrēšanas jaucējus, ir nepieciešams daudz vairāk atmiņas un shēmu, salīdzinot ar SHA-256 jaucējiem. Jaukšanas algoritma maiņas ietekme ir skaidri redzama, salīdzinot atbilstošo ieguves aparatūru - šifrētās versijas (Litecoin un citas) ir tūkstošiem reižu lēnākas nekā SHA-256 versijas (Bitcoin).

Secinājums

SHA-256 ir negaidīti tik vienkāršs, ka to var pat aprēķināt ar roku (eliptiskās līknes algoritms, ko izmanto Bitcoin darījuma parakstīšanai, būtu daudz sāpīgāks, jo tas satur virkni 32 baitu skaitļu reizinājumu). Viena SHA-256 kārtas aprēķināšana man aizņēma 16 minūtes, 45 sekundes. Ar šo veiktspēju visa bitcoin bloka jaukšana (128 kārtas) aizņems 1,49 dienas, tas ir, mēs iegūstam jaucējvērtību 0,67 jaukšanas reizes dienā (patiesībā, protams, ar praksi process paātrinātos). Salīdzinājumam, pašreizējā bitkoinu kalnraču paaudze saražo vairākas terahašas sekundē, kas ir aptuveni kvintiljonu reižu ātrāk nekā es. Manuprāt, ir acīmredzams, ka manuāla bitkoinu ieguve nav īpaši praktiska.

Lasītājs no reddit "a jautāja par maniem enerģijas izdevumiem. Tā kā es nepielieku nopietnu fizisku piepūli, varam pieņemt, ka vielmaiņas ātrums būs 1500 kilokalorijas dienā, tad mēs atklājam, ka manuālai jaukšanai ir nepieciešami gandrīz 10 megadžouli uz vienu hash. Tipiski enerģijas patēriņš dzelzs kalnračiem ir 1000 MH/J. Tātad es esmu 10^16 reizes mazāk energoefektīvs nekā specializēts dzelzs gabals (10 kvadriljoni). Vēl viena problēma ir enerģijas izmaksas. Lēts enerģijas avots ir virtuļi ar 23 centi par 200 kilokalorijām.Elektrība man maksā 15 centus par kilovatstundu, kas ir 6,7 reizes lētāk nekā virtuļi.Rezultātā enerģijas izmaksas man kā kalnračiem ir 67 kvadriljonus reižu lielākas.labi veiksmi ar manuālu bitkoinu ieguvi, un tas pat neņem vērā papīra un pildspalvu izmaksas!