Ondo egindako webgune batek ez daki zure pasahitza. Ez da nahi ez duelako: ezin duelako baizik.
Iruzurra dirudi, idazten duzun bakoitzean sistemak sartzen uzten dizulako, eta sartzen uzteko zerbait egiaztatu behar duelako. Baina egiaztatzea ez da jakitea. Zerbitzariak zure pasahitzetik kalkulatutako aztarna bat gordetzen du; idazten duzunean, aztarna berriro kalkulatu eta konparatu egiten du. Bat badatoz, aurrera. Inongo unetan ez da beharrezkoa pasahitza inon idatzita egotea.
Hortik dator zerbitzu serio bat eta ez dena bereizteko seinalerik argiena: ahazten baduzu eta postaz bidaltzen badizute, gordeta zeukaten. Eta gordeta dagoena, lehenago edo beranduago, beste norbaiten eskuetara iristen da.
1979 pasahitzak ez gordetzearen ideia —eta poliki egitearena—
1979an, Robert Morris eta Ken Thompson-ek «Password Security: A Case History» argitaratu zuten Communications of the ACM aldizkarian, Unixen egindakoa kontatuz. Ikasitakoaren kontakizun bat da, eta bertan gaur egun begi-bistakotzat ditugun bi ideia finkatu ziren.
Lehenengoa ez zuten haiek asmatu —pasahitzaren ordez hasha gordetzea lehenago ere egiten zen—, baina inork baino hobeto azaldu zuten: pasahitza ez gorde, haren hasha gorde. Zure pasahitza itxura arbitrarioko balio batean bihurtzen duen funtzio bat, atzera desegin ezin dena: hashetik ez da pasahitzera itzultzen.
Bigarrena bai, haiena da: gatza. Erabiltzaile bakoitzarentzat ausazko balio desberdin bat, hasha kalkulatu aurretik pasahitzarekin nahasten dena. Gatzik gabe, pasahitz bera duten bi lagunek hash bera dute —lapurtutako fitxategia errepikatuak bilatzeko joko bihurtzen da— eta, okerrago dena, norbaitek taula erraldoi bat behin aurrez kalkulatu eta munduko datu-base guztien kontra erabil dezake. Gatzak ez du zure pasahitza asmatzen zailagoa egiten: hura asmatzeak beste inori balio ez izatea lortzen du.
Baina artikulu horretan bertan hirugarren ideia bat dago, askoz gutxiago aipatua, eta hemen axola duena: funtzioa nahita motela egin zuten. Ez zabarkeriaz. Nahita. Pasahitz bat enkriptatzeak teknikoki behar zena baino askoz gehiago kostatzen zuen, goizero behin sartzen denari berdin diolako, eta milioika hautagai probatzen dituenari ez.
Hor dago dena, ia berrogeita hamar urteko esaldi batean.
Zergatik den moteltasuna defentsa zintzo bakarra
Informatikako defentsa ia guztiak asimetrikoak dira: gutxi kostatzen zaio defendatzen denari eta asko erasotzen duenari. Zifratzea merkea da; gakorik gabe deszifratzea ezinezkoa. Defendatzaileak egiturazko abantailarekin jokatzen du.
Pasahitzen biltegiratzeak ez. Hemen defendatzaileak eta erasotzaileak funtzio berbera exekutatzen dute. Zuk hasha kalkulatzen duzu asmatu duzula egiaztatzeko; hark kalkulatzen du asmatu duen egiaztatzeko. Segurtasuneko lasterketa bakarra da non biek hanka berberekin korritzen duten.
Zure arerioa baino azkarrago ezin duzunean korritu, jokaldi bakarra geratzen da: pista biontzat garestitzea. Zuk kostu hori saio bakoitzeko behin ordaintzen duzu. Hark, saiakera bakoitzeko behin. Zuk baino magnitude-ordena bat gehiago saiakera behar dituenez, faktura berak erabat modu desberdinean eragiten dizue. Hori da pasahitz-hash batek egiten duena.
Horregatik dira beste gauza batzuetarako azkarrak eta bikainak diren funtzioak —SHA-256, adibidez— aukera negargarria hemen. Azkarrak dira. Azkarra da, hain zuzen, nahi ez duguna.
1999 bcrypt, eta kostua pieza doigarri gisa
Funtzio motel baten arazoa da hardwarea ez dela geldirik geratzen. 1979an motela zena, gero berehalakoa da. Hamarkada bateko ordenagailuen kontra kalibratutako defentsa bat bakarrik zahartzen da, inork ukitu gabe.
1999an, Niels Provos eta David Mazières-ek bcrypt aurkeztu zuten USENIX Annual Technical Conference-n, dena esaten duen izenburu batekin: A Future-Adaptable Password Scheme.
Ideia: kostua funtzioan ez, parametro batean egotea. bcryptek zuk erabakitzen duzun eta hasharekin batera gordetzen den kostu-faktore bat darama. Hardwarea askoz azkarragoa bihurtzen bada, zenbakia igo eta pasahitz berriek behar dutena kostatzen dute berriro, algoritmoz aldatu gabe.
Bere zaharkitzea onartu eta horretarako prestatzen den diseinu bat da. Software gutxik egiten du hori.
2009 scrypt, eta denbora nahikoa ez dela deskubritzea
bcryptek kalkulu-denbora garestitzen du, eta funtzionatu zuen. Erasotzaileak defendatzailearen makina mota bera erabiltzeari utzi zion arte.
Zerbitzari batek nukleo azkar eta orokor gutxi batzuk ditu. GPU batek nukleo txikien pila izugarria dauka gauza bera paraleloan egiten, eta ASIC batek harago jotzen du: eragiketa bakar bat exekutatzeko fabrikatutako silizioa. Zure defentsa «eragiketa honek X kostatzen du» bada, norbaitek X asko aldi berean egiten dituen hardwarea eraiki dezake. Defendatzaileak bere zerbitzariarekin jarraitzen du.
2009an, Colin Percival-ek scrypt aurkeztu zuen beste argudio batekin: Stronger Key Derivation via Sequential Memory-Hard Functions. Kostua kalkuluan bakarrik badago, paralelizatu egiten da. Baina memoria ez da oparitzen. Behartu funtzioa RAM asko erabiltzera eta hura saihestu ezin den moduan zeharkatzera, eta bat-batean erasotzaileak ezin ditu nukleoak biderkatu: nukleo bakoitzak bere memoria beharko luke. Eta GPU baten nukleoek potentzia handia dute eta RAM oso gutxi bakoitzarentzat.
Percivalek ez zuen eragiketa garestitu. Hura masan errepikatzeko beharrezkoa den hardwarea garestitu zuen. Maila-aldaketa bat da: erasotzailearen aurrekontuari erasotzen zaio, ez haren erlojuari.
2015 Argon2, eta eztabaidaren amaiera
Aukera zentzuzko bat baino gehiago egoteak ez zion inori aukeratzen lagundu. Hala, komunitate kriptografikoak zerbait behin betiko erabaki nahi duenean ohi duena egin zuen: lehiaketa publiko bat. Password Hashing Competition-ek hautagaiak jaso zituen, urteetan analisi irekiaren pean jarri zituen eta 2015ean Argon2 izendatu zuen irabazle.
Argon2k bi ikasgaiak jasotzen ditu: denbora-kostua eta memoria-kostua, biak bereizita doigarriak, gehi hari kopurua. Ez da magia. 1979ren, 1999ren eta 2009ren sintesi ordenatua da, hura hausten saiatzea lantzat zuen jendeak berrikusia.
Zer esan nahi du honek zuretzat
Honetatik ia ezer ez dago zure esku, eta esan beharra dago: hasha webguneak aukeratzen du, ez zuk. Munduko pasahitzik onena eduki dezakezu, eta haiek Excel batean testu lauan gordetzen amaitu.
Baina ekuazioaren beste aldea bai, zure esku dago. Eraikuntza honek guztiak —gatzak, kostuak, memoriak— erasotzailearen saiakera bakoitza garestitzeko balio du. Zenbat saiakera behar dituen erabakitzen duena zure pasahitza da. Hiztegi batean badago, funtzio motelik ez zaitu salbatuko: lehenengoen artean eroriko da. Luzea bada eta ez badu ezeren antzik, saiakera bakoitzeko prezio hori eskura dagoen denboran sartzen ez den saiakera kopuru batekin biderkatzen da.
Horregatik neurtzen ditu gure sorgailuak entropia-bitak eta ez ehunekoak, eta horregatik bilatzen du egiaztatzaileak zure pasahitza hiztegietan sinboloak zenbatu baino lehen. Haiek saiakera bakoitzaren prezioa jartzen dute; zuk saiakera kopurua. Bi erdietako batek ere ez du bestea gabe funtzionatzen.
Eta bai: betiko galdera bera da oraindik. Kontua da orain, beste aldean, norbait segundoko askotan erantzuten saiatzen ari dela, eta 1979tik gabiltzala aldi horietako bakoitza diru kontua izan dadin ahalegintzen.
Iturriak: R. Morris eta K. Thompson, «Password Security: A Case History», Communications of the ACM, 1979 · N. Provos eta D. Mazières, «A Future-Adaptable Password Scheme», USENIX Annual Technical Conference, 1999 (bcrypt) · C. Percival, «Stronger Key Derivation via Sequential Memory-Hard Functions», 2009 (scrypt) · Password Hashing Competition, Argon2 irabazle, 2015.