Hashcash este un sistem de dovadă a lucrului utilizat pentru a reduce spam-ul și atacurile DoS . Mai târziu a devenit folosit în bitcoin și alte criptomonede [1] ca parte a algoritmului de analiză a datelor . Sistemul Hashcash a fost propus în mai 1997 de Adam Back . [2]
Hashcash este un algoritm de dovadă a lucrului care necesită o cantitate selectivă de date pentru a calcula, dar dovada poate fi verificată eficient. Utilizatorii de e-mail au codificarea textului ștampilei hashcash adăugată la antet pentru a confirma că s-a petrecut ceva timp calculând ștampila înainte de a trimite. Cu alte cuvinte, expeditorul petrece ceva timp calculând ștampila și trimiterea, ceea ce este neobișnuit pentru spammeri. Destinatarul poate, cu prețul unei puteri de calcul reduse, să confirme valabilitatea mărcii. Singura modalitate cunoscută de a găsi un antet cu parametrii necesari este o căutare completă . Și, deși testarea unui singur șir este destul de ușoară, cu un număr suficient de mic de răspunsuri satisfăcătoare, va fi necesar un număr suficient de mare de încercări pentru a găsi răspunsul. Ipoteza este că spammerii, al căror model de afaceri se bazează pe capacitatea lor de a trimite un număr mare de e-mailuri la un cost foarte mic pe mesaj, nu vor mai beneficia chiar dacă costul fiecărui spam pe care îl trimit este mic. Destinatarii pot verifica dacă expeditorul a urmat această procedură și pot folosi rezultatele pentru a ajuta la filtrarea e-mailului.
Titlul mărcii arată astfel: [3]
X-Hashcash: 1:20:1303030600:[email protected]::McMybZIhxKXu57jd:FOvXXAntetul conține:
ver: Versiunea hashcash, 1 (care a înlocuit versiunea 0). biți: numărul de biți „pre-” (nuli) din codul hashed. data: ora la care a fost trimis mesajul, în format AAAMMDD[hhmm[ss]]. resursă: informații despre expeditor, cum ar fi adresa IP sau adresa de e-mail. ext: Extensie (opțional; ignorat în versiunea 1). rand: Un șir de numere aleatorii codificate în format [[Base64|base-64]]. contor: contor binar codificat Base-64.Antetul conține adresa destinatarului, data mesajului, informații care confirmă că au fost efectuate toate calculele necesare. Prezența unei adrese de destinatar necesită ca antetul să fie recalculat pentru altul. Data permite destinatarului să ia în considerare anteturile mesajelor primite recent și să se asigure că antetul mesajului primit este unic.
Expeditorul pregătește antetul și îi adaugă un număr aleatoriu. Apoi calculează un hash SHA-1 de 160 de biți al antetului . Dacă primii 20 de biți ai hashului sunt zero, atunci acest antet este acceptabil. În caz contrar, expeditorul crește contorul și încearcă din nou. Din cele 2.160 de valori hash posibile, 2.140 îndeplinesc acest criteriu. Astfel, probabilitatea ca un hash ales aleatoriu să înceapă cu 20 de zerouri este 1 în 2 20 . Numărul de încercări pe care expeditorul este forțat să le facă înainte de a primi o valoare hash validă este modelat printr -o distribuție geometrică . Prin urmare, expeditorul, în medie, trebuie să încerce 220 (puțin peste un milion ) de numere aleatorii pentru a găsi antetul corect. Având în vedere estimări rezonabile ale timpului necesar pentru a calcula hash-ul, aceasta va dura aproximativ 1 secundă. În același timp, nu există o metodă eficientă pentru găsirea unui titlu valabil, în afară de forța brută.
Utilizatorul mediu de computer nu va întâmpina probleme semnificative din cauza timpului necesar pentru a genera un șir de hashcash. În același timp, spammerii vor întâmpina probleme semnificative, deoarece trimit un număr foarte mare de scrisori.
Din punct de vedere tehnic, sistemul este implementat în următorii pași: computerul destinatarului calculează un hash SHA-1 de 160 de biți a întregului șir (de exemplu, "1:20:060408:[email protected]::1QTjaYd7niiQA/sc:ePa"). Acest lucru durează aproximativ două microsecunde pe un procesor de 1 GHz, ceea ce este mult mai puțin decât timpul necesar pentru a descărca restul mesajului de e-mail. Dacă primii 20 de biți sunt non-zero, hash-ul este invalid (poate fi necesari mai mulți biți zero în versiunile recente pe măsură ce puterea de procesare crește). Computerul destinatarului verifică data din antet (de exemplu, "060408", ceea ce înseamnă 8 aprilie 2006). Dacă diferența față de data curentă este mai mare de două zile, hash-ul este invalid (fereastra de două zile compensează diferența de timp și timpul de călătorie în rețea între diferite sisteme). Computerul destinatarului verifică dacă e-mailul din linia hash se potrivește cu orice adresă de e-mail înregistrată de destinatar sau cu orice adresă din lista celor la care destinatarul este abonat. Dacă nu există potriviri, hash-ul este invalid. Computerul destinatarului adaugă șirul hash la baza de date. Dacă un astfel de șir este deja prezent în baza de date (astfel, se dovedește că s-a încercat reutilizarea șirului hash), hash-ul este invalid. Dacă șirul hash trece toate testele, este considerat valid. Toate aceste teste nu ocupă mult timp și spațiu pe disc, în comparație cu primirea părții principale a e-mailului.
Timpul necesar pentru a calcula aceste coliziuni hash crește exponențial pe măsură ce crește numărul de biți nuli. Adică, zero biți pot fi adăugați până când generarea de noi șiruri hash valide devine prea costisitoare pentru spammeri (dublarea timpului necesar pentru a calcula un hash cu fiecare zero suplimentar). Confirmarea că titlul este valid durează același timp. Nu contează câte zerouri sunt necesare pentru un antet valid, deoarece este necesară o singură operație hash.
Sistemul hashcash are un avantaj fata de ofertele de microplata aplicate pe e-mail, intrucat nu presupune implicarea de bani reali. Nici expeditorul, nici destinatarul nu trebuie să plătească. În acest fel, sunt evitate toate problemele administrative asociate cu microplățile.
Pe de altă parte, hashcash necesită resurse de calcul semnificative pentru a trimite fiecare mesaj. Este destul de dificil să găsești cu succes timpul mediu pe care clienții sunt dispuși să îl aloce calculării titlului. Acest lucru ar putea însemna că sistemele încorporate de nivel scăzut fie sacrifică disponibilitatea, fie nu oferă suficientă protecție împotriva gazdelor ostile pentru a filtra eficient spamul.
Hashcash este destul de ușor de implementat pentru agenții de e-mail personalizat și filtrele de spam. Nu este necesar un server central. Sistemul poate fi aplicat în mod consecvent - antetul hashcash suplimentar este ignorat atunci când este primit de un client de e-mail care nu îl înțelege.
Una dintre analize [4] a ajuns la concluzia că, cel mai probabil, fie e-mailul se va bloca din cauza lipsei puterii de procesare a expeditorului, fie spamul va ajunge în continuare. Exemple pentru fiecare include, respectiv, o topologie centralizată de e-mail (cum ar fi o listă de corespondență ), în care unele servere trebuie să trimită cantități uriașe de e-mailuri legitime; și botnet -urile sau fermele de cluster, de la care spammerii își pot crește enorm puterea de procesare. Majoritatea acestor probleme pot fi rezolvate. De exemplu, rețelele bot pot fi detectate mai rapid, deoarece utilizatorii observă utilizarea ridicată a procesorului și pot riposta, iar serverele care folosesc o listă de corespondență pot fi trecute pe lista albă de clienții abonați și sunt astfel scutite de problemele Hashcash. Dar, în general, ele reprezintă obstacole serioase în calea implementării Hashcash, care nu au fost încă rezolvate.
O altă problemă previzibilă este că computerele continuă să crească puterea în conformitate cu Legea lui Moore . Astfel, complexitatea calculelor necesare trebuie crescută. Cu toate acestea, țările în curs de dezvoltare vor continua să folosească echipamente vechi, ceea ce înseamnă că vor avea dificultăți în utilizarea sistemului de e-mail. Acest lucru se aplică și persoanelor cu venituri mici din țările dezvoltate, care nu își pot permite cele mai noi echipamente.
Hashcash este conceptual similar cu sistemele de validare utilizate în „ Bitcoin ”. Acolo unde aplicațiile de e-mail presupun că destinatarul controlează manual volumul de lucru al sistemelor de validare pentru a obține putere de procesare prin Legea lui Moore, atunci Bitcoin reprezintă o rețea p2p care ajustează automat volumul de lucru. De asemenea, spre deosebire de mail, care folosește 20 de biți (de ordinul a 1 milion de încercări pentru a căuta cu succes), bitcoin folosește 67,5 biți (este nevoie de ordinul a 200 de milioane de trilioane de încercări) și un criteriu de dificultate diferit pentru a genera unul dintre blocurile care sunt create la fiecare 10 minute. În Bitcoin, algoritmul a fost ajustat pentru a suporta biți fracționali (specificația originală HashCash a fost limitată la ajustarea puterilor întregi de 2), obținând astfel o precizie mai mare.
Hashcash este folosit ca o soluție potențială la problema filtrelor automate de spam false pozitive, deoarece utilizatorul obișnuit nu se confruntă cu timpul suplimentar necesar pentru semnalare. [5]
SpamAssassin a căutat ștampile hashcash începând cu versiunea 2.70, atribuind scoruri negative (adică mai puțin spam) ștampilelor hashcash neutilizate anterior. În versiunea 3.3x (cea mai recentă versiune la momentul scrierii), sistemul oferă puncte bonus pentru orice note de 20 de biți sau mai multe (maximum -5 puncte pentru note de 26 de biți sau mai multe). Cu toate acestea, se înregistrează o mică penalizare pentru un punct deja folosit. [6]
Penny Post [7] de pe SourceForge implementează Hashcash pentru clientul de e-mail Mozilla Thunderbird . [8] Proiectul poartă numele unui serviciu de poștă accesibil, care a costat expeditorul doar un ban (puteți citi despre astfel de servicii de e-mail pe pagina Penny Post ).
De asemenea, Microsoft a proiectat și implementat o specificație deschisă acum învechită [9] similară, dar incompatibilă cu hashcash, Email Postmark, [10] care a devenit parte a Inițiativei coordonate de reducere a spamului (CSRI). [11] Varianta hashcash propusă de Microsoft este implementată în componente ale serviciilor de poștă Microsoft precum Exchange, Outlook și Hotmail. Diferența de format dintre ștampilele hashcash și Microsoft este că ștampila Microsoft are și corpul e-mailului și folosește, de asemenea, un SHA-1 modificat ca funcție hash.
Într -un mod foarte asemănător, blogurile cad pradă spam-ului de comentarii. Unii proprietari de blog au folosit scripturi hashcash scrise în JavaScript pentru a încetini comentariile spammerilor. [12] Unele script-uri (cum ar fi wp-hashcash) pretind că implementează Hashcash, dar se bazează pe obscurcarea JavaScript pentru a forța clientul să genereze cheia corespunzătoare; deși necesită o oarecare putere de procesare, ei nu folosesc algoritmul de ștampilă Hashcash sau Hashcash.
Hashcash nu este brevetat, iar implementarea de referință [13] și majoritatea celorlalte implementări sunt software liber. Hashcash este inclus sau disponibil pentru multe distribuții Linux . RSA a făcut declarații IPR către IETF despre algoritmii client-puzzle [14] în contextul unui RFC [ 15] care descrie diverse client-puzzle (nu hashcash). RFC a inclus hashcash în articol și a menționat algoritmul, dar mecanismul descris în el rezolvă mai mult o problemă interactivă, care seamănă mai mult cu Client-Puzzle. Hashcash nu este interactiv și, prin urmare, nu are soluții cunoscute. În orice caz, declarația RSA IPR nu poate fi aplicată hashcash-ului, întrucât hashcash precede [2] (martie 1997) publicării Client-puzzle [16] (februarie 1999) și cererea de brevet US7197639 [17] (februarie 2000).