password.es-en APIak jada erantzuten du: nola erabili

Argitaratua egilea David Carrero

Blog honek hilabeteak daramatza gauza bera errepikatzen: zure pasahitzak ez luke nabigatzailetik atera behar. Sortzaileak crypto.getRandomValues() erabiltzen du ausa zure makinan bertan, eta egiaztatzaileak idazten duzuna aztertzen du inora bidali gabe.

Eta gaur zerbitzari batean pasahitzak sortzen dituen API bat argitaratzen dugu.

Kontraesana nabaria da eta ez dugu disimulatuko: APIaren erantzun bakoitzak hori bera dioen ohar bat darama. Baina badira nabigatzailerik ez dagoen lekuak —ehun kontu sortzen dituen script bat, aldi baterako kredentzial bat egiten duen zerbitzari bat, norbaitek pasahitz bat eskatzen dion eta asmatzen duen laguntzaile bat— eta han alternatiba ez da «nabigatzailea»: gaizki aukeratutako random() bat da, edo eskuz idatzitako kate bat. Horretarako dago hau.

Dei osoa

Gakorik gabe, izen-ematerik gabe, goibururik gabe. Hau da guztia:

curl -X POST https://api.password.es/v1/generate

16 karaktereko pasahitz bat eta haren analisia itzultzen ditu. Paragrafo hau idazten ari ginela exekutatua: x*7$9,BUy9PPvOI?, 89 karaktereko alfabeto batetik hartua, 103,6 bit entropia eta 2,5 × 10¹¹ urteko hausteko denbora. 4. maila 4tik.

Zenbaki horietako bat ere ez da berria. Azalean neurgailua marrazten duen motor beretik ateratzen dira: bit formula bera, eraso eredu bera —10¹² saiakera segundoko, konexiorik gabe, hash azkarra— eta egiaztatzailearen maila eskala bera. Webguneak eta APIak zenbaki desberdinak emango balituzte pasahitz beraren gainean, bietako bat gezurretan ariko litzateke.

Zer itzultzen duen, eremuz eremu

Erantzunak passwords dakar —beti array bat, bakarra eskatuta ere— eta analysis bloke bat length, pool, bits, log10_guesses, crack_time_log10_seconds, crack_time, level, level_scale eta ceiling eremuekin.

Bik paragrafo bat merezi dute. level_scale-k maila nondik atera den esaten du (gaur egun beti "time"), etorkizunean webgunearen eta APIaren artean aldea egonez gero eremuan ikus dadin, zenbakiak konparatuz ondorioztatu beharrean. Eta ceiling-ek esaten du zifra zehatza den ala goi-muga den: generate-n beti da false, pasahitza zerbitzariak egin duelako eta zein alfabetorekin dakielako; webgunearen egiaztatzailean ezin da beti hala izan, han pasahitza zuk ekartzen duzulako.

Ondoren notice dator, oharra, eta _meta bloke bat plana, aplikatutako hizkuntza, mugak eta dokumentaziorako esteka batekin.

Aukerak

Denak aukerakoak, eta izenak ingelesez, API bat integratzen duenak eremuen izenak bere horretan idazten dituelako: length (4–64, lehenetsia 16), count (1–20), lower, upper, digits, symbols, exclude_ambiguous, no_repeats eta lang.

curl -X POST https://api.password.es/v1/generate -H 'content-type: application/json' -d '{"length":20,"exclude_ambiguous":true}'

Dokumentazioak kontatzen dituen bi xehetasun, integratu aurretik jakitea komeni direnak. exclude_ambiguous-ek sei karaktere kentzen ditu, ez zazpi: 0 O 1 I l | o baztertzen ditu, baina barra bertikala ez zegoen ikur multzoan hasieratik, beraz alfabetoa 89tik 83ra jaisten da eta ez 82ra. Horregatik dio erantzunak pool 83. Eta no_repeats ez da berme absolutua: hamar aldiz saiatzen da berriro, webguneko sortzaileak bezalaxe, eta 64 karakterekin ondoz ondoko errepikapen bat sartzen da aldien % 0,1 inguruan. Hori esatea erabilgarriagoa da kontrakoa agintzea baino.

Hizkuntza

Lehenespenez ingelesez erantzuten du, ezer esan gabe integratzen duenak espero duena. ?lang= URLan, "lang" gorputzean edo Accept-Language goiburuarekin alda daiteke, eta kontraesanik badago lehenak irabazten du. Existitzen ez den hizkuntza bat ez da errorea: ingelesera erortzen da.

Hemen igarri ezin den asimetria bat dago, eta horregatik aitortzen du APIak: mezuak ingelesez eta gaztelaniaz daude; estekak, webguneko hemezortzi hizkuntzetan. Alemana eskatzeak estekak alemanez ematen dizkizu eta mezuak oraindik ingelesez. Ez dago asmatu beharrik: _meta.lang-ek { "messages", "links" } dakar, erdi bakoitzari zer aplikatu zaion esanez.

MCP zerbitzaria

MCP da laguntzaile batek —Claude, ChatGPT— kanpoko tresnak erabiltzeko protokoloa. https://api.password.es/mcp izen-ematerik eta gakorik gabeko MCP zerbitzari bat da, eta tresna bakarra argitaratzen du: generate_password, goiko parametro berekin.

Hau da guri gehien axola zaigun zatia, eta ez arrazoi teknikoengatik: pasahitz bat nondik atera ez duen laguntzaile batek asmatu egiten du, eta handik ateratzen dena ez da ausazkoa, ereduak pasahitz itxura duela uste duena baizik. Zerbitzaria konektatuta, inprobisatzeari uzten dio eta crypto.getRandomValues()-ekin egindako bat itzultzen du, bere analisiarekin eta tresnaren deskribapenean eta emaitza bakoitzean sartutako oharrarekin. Ohar hori da, hain zuzen, laguntzaileak pasahitza eskatu dionari irakurtzen amaitzen duena, eta horregatik dago hor.

Beste MCP zerbitzari batzuetatik bazatoz, datu bakarra: honek ez du egoerarik. POSTa JSONez erantzuten da eta ez du streamik irekitzen, Mcp-Session-Id ez da ez igortzen ez espero, jakinarazpen bati 202 erantzuten zaio gorputzik gabe, eta GETak 405 itzultzen du. 2025-06-18ko espezifikazioak esplizituki onartzen du hori, baina saioak eta SSE espero dituenak itsu araztuko du inork esaten ez badio.

Zer ez duen egiten

/v1/check-ek 501 itzultzen du. Ez da despistea, ez erdizka utzitako endpoint bat: nahita dago horrela, eta erantzunak berak azaltzen du zergatik. Egiaztatzailearen zenbaki berak itzultzeak webgunean dabilen patroi motor bera eskatzen du, eta horrek 11 ms eta 3,6 s arteko CPU kostatzen du eskaera bakoitzeko, bidalitakoaren arabera. Izen-ematerik eta gakorik gabeko zerbitzu batean, tarte hori produktu erabaki bat da —non jarri luzeraren muga— eta oraindik ez da hartu. Bitartean, 501ak checker_url bat dakar, eskatutako hizkuntzan webguneko egiaztatzailera seinalatzen duena, hori bera egiten baitu ezer bidali gabe.

Konturik ere ez dago, ez gakorik, ez planik. Eta existitzen ez direnez, API osoan ez dago izen-emate baterako esteka bakar bat ere: ezta muga gaindituaren errorean ere, denek jartzen duten lekuan.

Mugak

Bat, eta benetan aplikatzen dena: minutuko 60 eskaera IP bakoitzeko. Ez da orrialde hau sinetsi beharrik: zenbakia erantzun bakoitzaren barruan doa, _meta.limits.burst-en. Pasatuz gero, 429 bat ateratzen da Retry-After eta RateLimit-* goiburuekin.

_meta-n quota bloke bat ere ikusiko duzu, balioak null dituela. Konturik dagoenerako gordetako lekua da, eta hutsik doa nahita: iragarritako eta betearazten ez den muga bat okerragoa da bat ere ez iragartzea baino, integratzen duenak errespetatu egiten duelako eta inork zenbatzen ez duen zenbaki baten kontra programatzen duelako.

Eta hala ere, pentsa ezazu birritan

Pasahitzak sortzen dituen API bat, funtsean, antipatroi bat da: pasahitza sarean zehar bidaiatzen du eta zurea ez den makina batetik pasatzen da. Guk ezer ez gordetzeak ez du arazoaren forma aldatzen, gure zatia baizik —eta badakizu zer balio duen egiaztatu ezin duzun promesa batek.

Horregatik oharra ez da orrialde honetan bakarrik bizi: erantzun bakoitzean bidaiatzen du, eskatzen duzun hizkuntzan. Eta horregatik dago paragrafo hau hemen eta ez dokumentazioaren amaieran ezkutatuta. Zuk erabiliko duzun pasahitz baterako, webgune honetako sortzailea osorik zure nabigatzailean exekutatzen da eta ez du ezer bidaltzen. APIa besterako da: inor pantaila baten aurrean egon gabe gertatzen denerako.

Xehetasunak bi orrialdetan daude. Zer den APIa kontatzen du norentzat den, zer erantzuten duen gaur eta zer ez. Erreferentziak bederatzi parametroak ditu, eremu guztiak banan-banan azalduta, errore kodeak eta mugak; editorearen ondoan irekitzen dena da. Eta makina batek irakurtzea nahi baduzu, openapi.json dago.


Iturriak: APIa bera, 2026ko abuztuaren 31n produkzioaren aurka egiaztatua — POST /v1/generate, POST /v1/check (501), POST /mcp eta GET /openapi.json · analisiaren zenbakiak password.es-en sortzailearen eta egiaztatzailearen motor beretik ateratzen dira · eraso eredua 10¹² saiakera segundoko da, konexiorik gabe eta hash azkarrarekin, webguneko gainerakoaren berbera · MCP zerbitzariak 2025-06-18ko espezifikazioa inplementatzen du, egoerarik gabeko Streamable HTTP garraioarekin.

Argazkia: Stanislav Kondratiev · Pexels

← Blogera itzuli