A Hashcash egy munkaellenőrző rendszer, amelyet a spam és a DoS támadások csökkentésére használnak . Később bitcoinban és más kriptovalutákban [1] használták az adatelemző algoritmus részeként . A Hashcash rendszert Adam Back javasolta 1997 májusában . [2]
A Hashcash egy proof-of-work algoritmus, amelynek kiszámításához szelektív mennyiségű adatra van szükség, de a bizonyíték hatékonyan ellenőrizhető. Az e-mail felhasználóknak a fejléchez hozzáadták a hashcash bélyegző szövegkódolását, hogy megbizonyosodjanak arról, hogy eltöltött egy kis időt a bélyegző kiszámításával a küldés előtt. Más szóval, a feladó némi időt tölt a bélyegző kiszámításával és a küldéssel, ami szokatlan a spammerek számára. A címzett csekély számítási teljesítmény árán megerősítheti a védjegy érvényességét. A szükséges paraméterekkel rendelkező fejléc megtalálásának egyetlen ismert módja a teljes keresés . És bár egyetlen karakterlánc tesztelése elég egyszerű, kellően kis számú kielégítő válasz esetén kellően sok próbálkozásra lesz szükség a válasz megtalálásához. A hipotézis az, hogy a spammerek, akiknek üzleti modellje azon a képességen alapul, hogy nagyszámú e-mailt küldenek nagyon alacsony üzenetenkénti költséggel, már akkor sem fognak hasznot húzni, ha az általuk küldött spamek költsége alacsony. A címzettek ellenőrizhetik, hogy a feladó követte-e ezt az eljárást, és az eredményeket felhasználhatják az e-mailek szűrésére.
A védjegy címe így néz ki: [3]
X-Hashcash: 1:20:1303030600:[email protected]::McMybZIhxKXu57jd:FOvXXA fejléc a következőket tartalmazza:
ver: A hashcash verzió, 1 (amely felváltotta a 0-s verziót). bitek: A "pre-" (null) bitek száma a hashed kódban. dátum: Az üzenet elküldésének időpontja, ÉÉHHNN[óóó[ss]] formátumban. erőforrás: Információk a feladóról, például IP-cím vagy e-mail cím. ext: Kiterjesztés (opcionális; figyelmen kívül hagyva az 1-es verzióban). rand: [[Base64|base-64]] formátumban kódolt véletlen számokból álló karakterlánc. számláló: Base-64 kódolású bináris számláló.A fejléc tartalmazza a címzett címét, az üzenet dátumát, valamint az összes szükséges számítás elvégzését igazoló információkat. A címzett címének jelenléte megköveteli, hogy a fejlécet egy másik címhez újra kell számítani. A dátum lehetővé teszi a címzett számára, hogy figyelembe vegye a nemrégiben kapott üzenetek fejléceit, és megbizonyosodjon arról, hogy a bejövő üzenet fejléce egyedi.
A feladó elkészíti a fejlécet, és véletlen számot ad hozzá. Ezután kiszámítja a fejléc 160 bites SHA - 1 hash -jét. Ha a hash első 20 bitje nulla, akkor ez a fejléc elfogadható. Ellenkező esetben a küldő növeli a számlálót, és újra próbálkozik. A 2160 lehetséges hash-érték közül 2140 felel meg ennek a kritériumnak. Így annak a valószínűsége, hogy egy véletlenszerűen kiválasztott hash 20 nullával kezdődik, 1 a 2-hoz 20 . Geometriai eloszlás modellezi azoknak a próbálkozásoknak a számát, amelyeket a küldőnek meg kell tennie, mielőtt érvényes hash-értéket kapna . Ezért a küldőnek átlagosan 220 (valamivel több mint egymillió ) véletlen számot kell kipróbálnia, hogy megtalálja a megfelelő fejlécet. A hash kiszámításához szükséges idő ésszerű becslései alapján ez körülbelül 1 másodpercet vesz igénybe. Ugyanakkor nincs más hatékony módszer az érvényes cím megtalálására, mint a nyers erő.
Az átlagos PC-felhasználó nem tapasztal jelentős problémákat a hashcash karakterlánc létrehozásához szükséges idő miatt. Ugyanakkor a spammerek jelentős problémákkal szembesülnek, mivel nagyon sok levelet küldenek.
Technikailag a rendszer megvalósítása a következő lépésekben történik: a címzett számítógépe kiszámítja a teljes karakterlánc 160 bites SHA-1 kivonatát (például "1:20:060408:[email protected]::1QTjaYd7niiQA/sc:ePa"). Ez körülbelül két mikroszekundumot vesz igénybe egy 1 GHz-es processzoron, ami sokkal kevesebb, mint az e-mail üzenet többi részének letöltéséhez szükséges idő. Ha az első 20 bit nem nulla, akkor a hash érvénytelen (a legutóbbi verziókban több nulla bitre lehet szükség a feldolgozási teljesítmény növekedésével). A címzett számítógépe ellenőrzi a dátumot a fejlécben (például , "060408"ami 2006. április 8-át jelenti). Ha az aktuális dátumtól való eltérés több mint két nap, a hash érvénytelen (a kétnapos ablak kompenzálja a különböző rendszerek közötti idő- és utazási idő különbségét a hálózaton). A címzett számítógépe ellenőrzi, hogy a hash sorban lévő e-mail egyezik-e a címzett által regisztrált e-mail címekkel, vagy a címzett által előfizetett listán szereplő bármely címmel. Ha nincs egyezés, a hash érvénytelen. A címzett számítógépe hozzáadja a hash karakterláncot az adatbázishoz. Ha egy ilyen karakterlánc már jelen van az adatbázisban (így kiderül, hogy megpróbálták újrafelhasználni a hash karakterláncot), akkor a hash érvénytelen. Ha a hash karakterlánc minden teszten megfelel, akkor érvényesnek minősül. Mindezek a tesztek nem foglalnak sok időt és lemezterületet az e-mail nagy részének megérkezéséhez képest.
A hash ütközések kiszámításához szükséges idő exponenciálisan növekszik a null bitek számának növekedésével. Ez azt jelenti, hogy nulla bitet lehet hozzáadni mindaddig, amíg az új érvényes hash karakterláncok létrehozása túl drága lesz a spammerek számára (minden további nullával megkétszerezi a hash kiszámításához szükséges időt). A cím érvényességének megerősítése ugyanennyi időt vesz igénybe. Nem számít, hány nulla kell egy érvényes fejléchez, mivel csak egy hash műveletre van szükség.
A hashcash rendszer előnye az e-mailekre alkalmazott mikrofizetési ajánlatokkal szemben, mivel nem jár valódi pénz bevonásával. Sem a feladónak, sem a címzettnek nem kell fizetnie. Ily módon elkerülhető a mikrofizetésekkel kapcsolatos minden adminisztratív probléma.
Másrészt a hashcash jelentős számítási erőforrásokat igényel az egyes üzenetek elküldéséhez. Meglehetősen nehéz sikeresen megtalálni azt az átlagos időt, amelyet az ügyfelek hajlandóak a cím kiszámítására fordítani. Ez azt jelentheti, hogy az alacsony szintű beágyazott rendszerek vagy feláldozzák a rendelkezésre állást, vagy nem nyújtanak elegendő védelmet az ellenséges gazdagépekkel szemben a spam hatékony kiszűréséhez.
A Hashcash könnyen megvalósítható egyéni levelezőprogramokhoz és spamszűrőkhöz. Nincs szükség központi szerverre. A rendszer következetesen alkalmazható – az extra hashcash fejlécet figyelmen kívül hagyja, ha olyan levelezőkliens kapja meg, amely nem érti.
Az egyik elemzés [4] arra a következtetésre jutott, hogy nagy valószínűséggel vagy a feladó feldolgozási teljesítményének hiánya miatt akad el a levél, vagy a spam mégis átjut. Példák mindegyikre egy központi e-mail topológia (például egy levelezőlista ), amelyben egyes szervereknek hatalmas mennyiségű legitim e-mailt kell küldeniük; és botneteket vagy klaszterfarmokat, amelyekből a spammerek óriási mértékben növelhetik feldolgozási teljesítményüket. A legtöbb ilyen probléma megoldható. Például a botneteket gyorsabban lehet észlelni, mert a felhasználók észreveszik a magas CPU-használatot, és megtorolhatják, a levelezőlistát használó szervereket pedig az előfizetői kliensek engedélyezőlistára tehetik, így mentesülnek a Hashcash-problémák alól. Általában azonban komoly akadályokat jelentenek a Hashcash bevezetése előtt, amelyeket még meg kell oldani.
Egy másik előre látható probléma az, hogy a számítógépek teljesítménye a Moore-törvénynek megfelelően tovább növekszik . Így a szükséges számítások bonyolultságát növelni kell. A fejlődő országok azonban továbbra is régi berendezéseket fognak használni, ami azt jelenti, hogy nehézséget okoz számukra az e-mail rendszer használata. Ez vonatkozik a fejlett országok alacsony jövedelmű egyénekre is, akik nem engedhetik meg maguknak a legújabb felszerelést.
A Hashcash elvileg hasonló a " Bitcoin "-ban használt érvényesítési rendszerekhez. Ha a levelezőalkalmazások azt feltételezik, hogy a címzett manuálisan szabályozza az érvényesítő rendszerek munkaterhelését, hogy a Moore-törvény szerint feldolgozási teljesítményt nyerjen, akkor a Bitcoin egy p2p hálózatot képvisel, amely belsőleg automatikusan beállítja a munkaterhelést. Ezenkívül a levéltől eltérően, amely 20 bitet használ (nagyságrendileg 1 millió próbálkozás a sikeres kereséshez), a bitcoin 67,5 bitet (nagyságrendileg 200 millió billió próbálkozásra van szükség) és változó nehézségi feltételt használ az egyik blokk létrehozásához, amely 10 percenként jönnek létre. A Bitcoinban az algoritmust úgy igazították, hogy támogassa a tört biteket (az eredeti HashCash specifikáció a 2-es egész hatványok beállítására korlátozódott), ezáltal nagyobb pontosságot ért el.
A Hashcash-t potenciális megoldásként használják az automatikus spamszűrés problémájára, mivel az átlagos felhasználó nem tapasztalja meg a megjelöléshez szükséges plusz időt. [5]
A SpamAssassin a 2.70-es verzió óta ellenőrzi a hashcash bélyegeket úgy, hogy negatív pontszámokat (azaz kevésbé spamszerűt) rendel a korábban nem használt hashcash bélyegekhez. A 3.3x verzióban (a cikk írásakor a legújabb verzió) a rendszer bónuszpontokat ad minden 20 bites vagy több pontért (maximum -5 pontot 26 bites vagy több pontért). Azonban egy kis büntetés kerül rögzítésre a már használt jelért. [6]
A SourceForge Penny Post [7] a Hashcash-t implementálja a Mozilla Thunderbird e- mail klienshez . [8] A projekt egy megfizethető postaszolgáltatásról kapta a nevét, amely csak egy fillérbe került a feladónak (ilyen levelezőszolgáltatásokról a Penny Post oldalán olvashat ).
A Microsoft egy már elavult [9] nyílt specifikációt is tervezett és implementált, amely hasonló a hashcash-hez, de azzal nem kompatibilis, az Email Postmark [10] , amely a Coordinated Spam Reduction Initiative (CSRI) részévé vált. [11] A Microsoft által javasolt hashcash-változatot a Microsoft levelezőszolgáltatásainak összetevőiben valósítják meg, mint például az Exchange, az Outlook és a Hotmail. A hashcash és a Microsoft bélyegzők közötti formátumbeli különbség az, hogy a Microsoft bélyegzője az e-mail törzsét is kivonatolja, és egy módosított SHA-1- et is használ hash funkcióként.
Nagyon hasonló módon a blogok a kommentspam áldozatává válnak. Egyes blogtulajdonosok JavaScriptben írt hashcash szkripteket használtak a spamküldők megjegyzéseinek lassítására. [12] Egyes szkriptek (mint például a wp-hashcash) azt állítják, hogy implementálják a Hashcash-t, de a JavaScript obfuszkációra támaszkodnak, hogy a klienst a megfelelő kulcs generálására kényszerítsék; bár némi feldolgozási teljesítményt igényel, nem használják a Hashcash vagy Hashcash bélyegző algoritmust.
A Hashcash nincs szabadalmaztatva, a referencia megvalósítás [13] és a legtöbb egyéb megvalósítás ingyenes szoftver. A Hashcash számos Linux disztribúció része vagy elérhető . Az RSA IPR-nyilatkozatokat tett az IETF -nek a kliens-rejtvények algoritmusairól [14] egy RFC [ 15] kontextusában, amely különféle kliens-rejtvényeket (nem hashcash-t) ír le. Az RFC beépítette a hashcash-t a cikkbe, és megemlítette az algoritmust, de az abban leírt mechanizmus inkább egy interaktív problémát old meg, ami inkább a Client-Puzzle-hoz hasonlít. A Hashcash nem interaktív, ezért nincsenek ismert megoldásai. Mindenesetre az RSA IPR nyilatkozata nem alkalmazható hashcash-re, mivel a hashcash megelőzi [2] (1997. március), a Client-puzzle [16] (1999. február) és az US7197639 [17] (2000. február ) szabadalmi bejelentést .