OpenID
1
2 CAPITOLUL 9. OPENID
• Să aleagă seturile de informaţie (numite ”profiluri” sau ”carduri”) care pot fi trimise
site-urilor web, ı̂n funcţie de nivelul de solicitare şi risc.
• Implementarea autorizării graduate şi bazate pe risc.
• Implementarea unei semnături unice pentru aplicaţii multiple.
• Integrarea de aplicaţii ı̂ntr-un sistem OpenId unitar, folosind mecanisme simple.
• Un cost redus de implementare şi maintenanţă.
OpenID nu este unic prin scopul propus sau metodele folosite. Există şi alte specificaţii
simple de autentificare a utilizatorilor, cu aproximativ aceleaşi scopuri; cel mai utilizat
este probabil SAML Web Browser Single Sign On. Principala diferenţă este aceea că
SAM L solicită ca aplicaţiile web pentru autentificare să fie acceptate anterior de cele
două părţi, iar autentificarea este o componentă a unei construcţii mai largi. Specificaţia
SAM L a fost realizată de companii, ı̂n timp ce OpenID este un proiect coordonat public
de comunitatea Internet (oarecum similar cu P HP de la poşta electronică).
Alte specificaţii similare sunt OAuth ([17]), WS-Trust ([10]) şi Information Card ([12]).
RP redirecţionează pe Bob spre OP , unde i se cere să completeze parola pentru user-
name-ul 0 bobita0 . După această autentificare locală, Bob este ı̂ntrebat dacă doreşte ı̂ntr-
adevăr să folosească identitatea sa pentru *.cryptounibuc.com (realm) şi – ı̂n caz afirmativ
– să confirme atributele cerute de RP (cum ar fi numele complet şi adresa de e-mail).
Confirmarea este retrimisă de OP spre RP .
Folosind o conexiune directă, RP se asigură că identitatea locală primită este au-
tentificată de OP . Presupunând că doar proprietarul poate modifica conţinutul site-ului
www.bob.com, cryptounibuc este asigurat că Bob este de fapt proprietarul acestui URL şi
RP ı̂i va genera un cont local pe aplicaţia sa web.
Ulterior, la orice solicitare a lui Bob, RP ı̂l va loga la cryptounibuc folosind identita-
tea lui.
Pe baza acestui exemplu, să detaliem specificaţiile unui protocol OpenId ([18]). O
privire schematică este dată de Figura următoare:
(4) ⊕
RP OP
3 -
(8)
:
6 6 (7) 6
(3)
(2) (1)
(5)
+ h
(6)
U RL ”=” - UA
4. Stabilirea asocierilor;
5. Redirectare;
7. Redirectare;
2.0 acesta poate fi un link static conţinând OP -ul şi identitatea locală sau un docu-
ment XRDS care oferă lui Bob posibilitatea de specifica mai multe OP -uri (pentru
protocoale diferite). În acest caz se face apel la Y adis1 pentru a găsi OP şi versiunea
protocolului care se va folosi.
• Stabilirea unei asocieri. Asocierea este folosită pentru a garanta că numai OP -ul
stabilit a autentificat identitatea locală a utilizatorului. Eventual, RP poate alege
să omită acest pas şi să valideze identitatea la sfârşitul execuţiei protocolului.
Între RP şi OP O este stabilită asociere formată din două componente: un Identi-
ficator de asociere (unic) şi un cod M AC pentru semnarea mesajelor. Sunt două
metode de stabilire a unei asocieri: printr-un schimb de chei Diffie-Hellman sau prin
solicitarea unui canal securizat (de exemplu SSL). Vom detalia această construtie
ı̂ntr-o secţiune ulterioară.
• Redirectare spre OP . După aflarea OP -ului ţintă şi stabilirea (opţional) unei
asocieri, RP forwardează cererea utilizatorului spre OP (via o redirectare Web).
Cererea conţine o serie de parametri (detaliaţi ı̂n secţiunea 4), cei mai importanţi
fiind identitatea, Identificatorul de asociere (dacă a fost folosit), domeniul RP care
trebuie alocat (realm) şi un U RL la RP -ul unde trebuie redirectat utilizatorul după
autentificare (return to).
• Redirectare spre RP . După ce OP a autentificat identitatea locală a lui Bob,
iar acesta a permis utilizarea identităţii sale ı̂n domeniul realm specificat, la pasul
următor OP redirectează utilizatorul spre RP , ı̂mpreună cu anumiţi parametri.
Aceştia includ Identificatorul de asociere (dacă a fost folosit), un server-time bazat
pe un nonce (pentru prevenirea atacurilor replay) şi o semnătură peste valorile unora
din parametri (cei menţionaţi sunt obligatoriu semnaţi).
Dacă a fost stabilită o asociere, atunci semnătura foloseşte codul M AC şi algoritmul
de semnătură specificate de aceasta.
• Verificarea răspunsului. Dacă nu a fost stabilită nici o asociere, atunci RP
trebuie să se asigure că răspunsul a fost generat de OP , Pentru aceasta, RP trimite
parametrii primiţi direct spre OP , iar acesta răspunde – printre altele – cu un
parametru valid care să-i certifice semnătura.
9.3 Autentificarea
Deoarece noţiunea de autentificare este esenţială ı̂n construirea unui protocol OpenId, să
reluăm o parte din paşii anteriori, detaliind acest aspect. pe forma generală.
1
Protocolul Y adis (Yet Another Distributed Identity System) a fost dezvoltat ı̂n aceeaşi comunitate
ca şi OpenID, dar fără a fi legate funcţional ı̂ntre ele. OpenID s-a numit inţial Y adis.
9.3. AUTENTIFICAREA 5
În cazul ı̂n care cheia M AC este protejată prin Diffie-Hellman ea va fi transformată
ı̂nainte de a fi trimisă ı̂n reţea astfel:
unde g, p, xA şi xB sunt parametrii Diffie-Hellman stabiliţi anterior, btwoc este o funcţie
ce primeşte ca parametru de intrare un ı̂ntreg (cu o anumită precizie) şi ı̂ntoarce cea mai
scurtă reprezentare complementară big-endian.
De asemenea trebuie respectată următoarea condiţie: ”M AC(key) trebuie să aibă
aceeaşi lungime ca rezultatul funcţiei de dispersie H: 160 biţi pentru DH − SHA1 sau
256 biţi pentru DH − SHA256”.
Toate aceste tipuri de mesaje sunt protocoale de tip cerere/răspuns, fiecare dintre ele
putând avea diferiţi parametri. De asemenea, ı̂n funcţie de tipul mesajului, utilizatorul
Bob şi serverul OP pot apela la metode de comunicare directe sau indirecte.
În cazul celor directe, se foloseşte protocolul HT T P de tip POST, iar pentru cele indirecte
protocolul HT T P de tip GET.
• openid.ns.
Acest parametru (opţional) defineşte versiunea protocolului folosit. Utilizarea ver-
siunii OpenId 2.0 se specifică prin valoarea ”http://specs.openid.net/auth/2.0”.
Dacă acest parametru lipseşte sau are altă valoare, atunci se foloseşte automat
versiunea 1.1 a protocolului – din motive de compatibilitate cu implementări ce
utilizează versiuni mai vechi.
• openid.mode.
Acest parametru permite destinatarului să ştie cu ce tip de mesaj are de a face. Din
acest motiv, Bob trebuie să fie prezent ı̂n cadrul tuturor mesajelor; ı̂n caz contrar
mesajul nu face parte din procesul de autentificare OpenID.
Pentru mesajul de asociere, valoarea parametrului este ”associate”.
• openid.assoc type.
Prin acest parametru, cele două părţi care comunică se pun de acord asupra algo-
ritmului folosit la semnarea mesajelor.
În momentul de faţă sunt utilizate două tipuri de algoritmi:
– HM AC − SHA1: lungimea cheii este de 160 biţi, valoarea parametrului fiind
”HM AC − SHA1” (conform RF C2104/RF C3174);
– HM AC − SHA256: lungimea cheii este de 256 biţi, valoarea parametrului
fiind ”HM AC − SHA256” (RF C2104/F IP S180 − 2).
Recomandarea este folosirea algoritmului pe 256 biţi – dacă acest lucru este posibil.
8 CAPITOLUL 9. OPENID
• openid.session type.
Prin intermediul acestui parametru se stabileşte tipul de sistem criptare folosit ı̂n
cadrul mesajului, pentru a cripta M AC-ul. Trei valori sunt valide pentru acest
parametru:
– no-encription. Valoare folosită dacă se doreşte ca M AC-ul să fie trimis necrip-
tat. Acest lucru nu este recomandat, deoarece un atacator ar putea modifica
cu uşurinţă mesajul prin metode de tip eavesdropping.
Se poate ı̂nsă utiliza această valoare dacă pentru comunicare se folosesc canale
securizate prin SSL, care asigură deja criptarea conţinutului.
– DH − SHA1. În acest caz algoritmul folosit pentru schimbul de chei este
Difie-Hellman, ı̂mpreună cu funcţia de dispersie de tip SHA − 1.
– DH − SHA256. Şi aici se foloseşte algoritmul Difie-Hellman, combinat ı̂nsă cu
funcţia de dispersie SHA pe 256 biţi.
Pentru valorile bazate pe algoritmul DH şi funcţia de dispersie SHA, M AC-ul
trebuie să aibă aceeaşi lungime cu rezultatul funcţiei de dispersie (160 biţi pentru
DH − SHA1, respectiv 256 biţi pentru DH − SHA256), precum şi cu rezultatul
algoritmului folosit pentru semnarea asocierii.
Detaliind, RP specifică un număr prim mare p şi un generator q. De asemenea, tot
el generează aleator o cheie secretă xA , iar serverul OP alege – tot aleator – o cheie
secretă xB , ambele din intervalul [1, p − 1].
Astfel, cheia secretă folosită pentru criptarea M AC-ului va fi
g xA ∗xB (mod p) = (g xA )xB (mod p) = (g xB )xA (mod p)
• openid.assoc handle
Este folosit ı̂n mesajele ulterioare, pentru a identifica asocierea deja reuşită. Va-
loarea este un şir de cel mult 255 caractere ASCII, având coduri ı̂n intervalul
[33, 126].
De asemenea, acest parametru este folosit şi pentru a identifica ce cheie va fi
(re)folosită pentru criptare/decriptare.
• openid.session type.
Pentru ca asocierea să fie acceptată, valoarea acestui parametru trebuie să fie aceeaşi
ca cea primită la trimiterea cererii. În cazul ı̂n care utilizatorul propune pentru
acesta folosirea unui algoritm pe care serverul nu-l are, valoarea lui va fi de tip
”răspuns nereuşit”, iar asocierea va pica.
• openid.assoc type.
Similar situaţiei anterioare, şi valoarea acestui parametru de răspuns trebuie să fie
identică cu cea primită ca lerere. În caz contrar, asocierea va pica, iar valoarea
parametrului va fi de tip ”răspuns nereuşit”.
• openid.expires in.
Reprezintă perioada de timp – ı̂n secunde – cât este valabilă asocierea. După expi-
rarea ei, aplicaţia nu va mai lua ı̂n considerare asocierea.
• openid.mac key.
Acest parametru se foloseşte doar dacă ı̂n timpul cererii s-a optat pentru tipul
sesiunii fără criptare. Valoarea trebuie să fie ı̂n format base64.
• openid.mode.
Valorile posibile sunt ”checkid immediate” şi ”checkid setup”. Dacă Identificatorul
de asociere doreşte ca utilizatorii să poată interacţiona cu OP , valoarea folosită este
”checkid setup”.
În general, interacţiunea ı̂ntre Bob şi OP nu este dorită ı̂n cazul comunicării asin-
crone.
• openid.assoc handle.
Este un parametru opţional; prezenţa lui semnifică faptul că a fost realizată o
asociere ı̂ntre părţi şi că aceasta trebuie folosită.
• openid.return to.
După procesarea cererii, serverul OP trebuie să ı̂ntoarcă un răspuns. Dacă este
specificată o valoare pentru acest parametru (o adresă U RL), atunci browserul va
fi redirectat către această adresă, cu tot cu răspuns.
• openid.realm.
9.4. TIPUL MESAJELOR DIN PROCESUL DE AUTENTIFICARE OP EN ID 11
• openid.mode.
În cazul unei asocieri reuşite, valoarea parametrului trebuie să fie ”id res”.
Dacă – dintr-un motiv sau altul – asocierea a picat, valoarea parametrului trebuie
să fie ”setup needed” dacă cererea a fost de tip ”checkid immediate”, sau ”cancel”
ı̂n cazul cererii de tip ”checkid setup”.
• openid.op endpoint.
Valoarea acestuia este adresa serverului OP .
• openid.return to.
Copia exactă a parametrului similar primit ı̂n cazul cererii.
• openid.response nonce.
Acest parametru – unic pentru fiecare mesaj – este foarte important deoarece ajută
la blocarea atacurilor prin reluare (replay attacks). Valoarea sa este de maxim 255
caractere şi trebuie să ı̂nceapă cu data de pe serverul OP – ı̂n format U T C 2 şi
delimitat prin litera Z – urmată de caractere ASCII din intervalul [32, 126], câte
sunt necesare pentru asigura unicitatea răspunsului.
• openid.invalidate handle.
Acest parametru verifică validitatea asocierii. Dacă este setat, ı̂nseamnă că ceva a
fost ı̂n neregulă, iar utilizatorul trebuie să respingă asocierea.
• openid.assoc handle.
Conţine legătura spre asocierea cu care a fost semnat mesajul. Pe baza lui se pot
face verificări privind autenticitatea mesajelor.
2
http://www.ietf.org/rfc/rfc3339.txt - Formatul datei conform standardului U T C.
12 CAPITOLUL 9. OPENID
• openid.signed.
Conţine o listă cu parametrii care au fost semnaţi, despărţiţi prin virgulă.
• openid.sig.
Acest parametru conţine semnătura mesajului, ı̂n format base64.
1. Mesajul este trimis doar dacă nu există deja o asociere stabilită ı̂ntre utilizatorul
Bob şi OP .
2. Dacă se foloseşte o asociere deja existentă, cererea lui Bob trebuie să conţină parame-
trul ”openid.assoc handle”, iar OP va avea ı̂n răspuns aceeaşi valoare de asociere.
3. Se poate ı̂ntâmpla şi cazul ı̂n care serverul OP nu este de acord cu asocierea primită
de la utilizator; atunci răspunsul va conţine parametrul ”openid.invalidate handle”,
precum şi un alt parametru (”openid.assoc handle”) pentru a fi folosit de Bob.
• openid.ns:
Identic cu cel din cererea de asociere.
• openid.is valid.
Are o valoare de tip boolean, ”true” sau ”false”, specificând dacă semnătura cererii
este validă sau nu.
• openid.invalidate handle.
Dacă parametrul openid.is valid are valoarea ”false”, acest parametru trebuie trimis
ı̂n cadrul răspunsului pentru ca utilizatorul să ştie şi să elimine asocierea respectivă
din lista celor valide.
9.5. SECURITATEA OP EN ID 13
2. Acces liber. O caracteristică importantă a unui OpenId este aceea că un utilizator
este capabil să-şi aleagă propria sa identitate (U RL), OP şi RP -urile. În principiu,
oricine se poate alătura structurii deja existente, implementând un OP sau ı̂ncepând
să accepte tranzactii OpenID (ca un RP ).
4. Utilizare de standarde W eb. Pentru transferul datelor lui Bob ı̂ntre RP şi OP
pot fi folosite redirectări W eb deja existente. Acest lucru uşurează cerinţele celor
trei parteneri (RP, OP şi U A), dar OpenID va moşteni toate slăbiciunile posibil
existente ı̂n aceste mecanisme de redirectare.
• Sesiuni false. Intr-un astfel de atac, Oscar ı̂l păcăleşte pe Bob să viziteze replica
unei pagini despre care Bob crede că are un anume RP . El va conecta apoi automat
pe Bob la RP -ul real, dintr-un cont controlat de Oscar. Datorită ideii de semnătură
unică, se presupune că Bob a semnat conectarea din contul său ([9]).
Prin acest atac, Oscar va căuta diverse informaţii – cum ar fi de exemplu cele legate
de conturi sau carduri – depuse de Bob pe RP ı̂n convingerea că aceasta este contul
său – proprietarul real fiind de fapt Oscar.
Scanerul de port nu este propriu zis o slăbiciune, dar posibilitatea de a scana adrese
din zona internă a unei reţele locale a RP -ului şi faptul că această scanare poate fi
realizată automat oferă o facilitate ı̂n construcţia unui atac.
• RP pierdut ı̂n căutare. Acest atac foloseşte faptul că RP trebuie să se conecteze
la identificatorul U RL oferit de utilizator. Un cod maliţios poate folosi fişiere mari
sau fără marcaj de sfârşit ca identificatori de U RL-uri, ca prim pas pentru un atac
DoS asupra RP -ului ([15]).
Apărarea contra unei astfel de ı̂ncercări este foarte simplă: RP trebuie să efectueze
căutarea unui U RL ı̂n anumite limite de timp şi spaţiu.
• Association Poisoning. În acest atac Oscar caută numele unei asocieri (the as-
sociation handle) pentru o anumită comunicare RP ←→ OP . Apoi se conectează la
RP folosind propriul său OP . Deoarece OP ı̂i permite să aleagă numele asocierii,
Oscar va alege exact numele pe care l-a găsit, ı̂nlocuind cheia M AC originală cu
una aleasă de el. Din acest moment, pentru o anumită durată de timp (până
când adevăratul OP rescrie numele asocierii), el poate semna (şi eventual modifica)
atributele trimise de OP spre RP , folosind propria semnătură. RP va considera că
mesajele trimise de OP sunt incorect semnate şi le va respinge ([3]).
Pentru a modifica datele trimise de OP spre RP , Oscar trebuie să instaleze (ca ı̂n
atacul Man-in-the-middle) un nod ı̂ntre cei doi parteneri.
• Reciclarea OpenID-lui. În timp, Bob poate renunţa la OP , lăsând lui Alice
identitatea sa locală. Dacă acest OP a fost conceput să suplinească identitatea
U RL-lui său (de exemplu, dacă s-a folosit username.myid.net sau dacă butoanele
Google/Yahoo! etc. au fost utilizate direct), aceasta ı̂nseamnă că nu numai identi-
tatea locală dar şi identitatea U RL a lui Bob este deţinută acum de Alice. Ea se
poate conecta ulterior la un RP şi afla date ale lui Bob.
Specificaţiile OpenID 2.0 recomandă o soluţie pentru această problemă, dar OP -
urile nu sunt obligate să o adopte.
16 CAPITOLUL 9. OPENID
• Realm Spoofing. Acest atac ([11]) presupune existenţa unui RP având un XSS
(sau altă vulnerabilitate) care să permită forwardarea spre alte websituri (de exem-
plu http://www.example.com?goto=http://evil.com). Oscar crează un website care
imită acest RP şi dacă Bob ı̂ncearcă conectarea folosind OpenID, Oscar ı̂i spune că
OP cu acest domeniu aparţine unui RP oficial. Ca urmare ı̂n returul spre U RL (ul-
timul pas din schema de funcţionare) el poate abuza de posibilitatea de forwardare
(care-l returnează pe Bob spre propriu site web).
În caz de succes, OP şi Bob sunt convinşi că atributele sunt trimise spre RP -ul
oficial, ele fiind de fapt redirectate de Oscar la un RP fals (deşi OP a comparat
domeniul realm şi a făcut corect revenirea la U RL).
servicii cu nivel de securitate ridicat. Estimările de risc sunt bazate pe o combinaţie ı̂ntre
efortul necesar atacului respectiv şi avantajul pe care ı̂l poate obţine Oscar ı̂n caz de
reuşită. Principala diferenţă dintre cele două scenarii pleacă de la prezumţia că serviciile
cu un nivel de securitate ridicat implică un câştig potenţial mai mare pentru atacator,
deci o preferinţă a atacurilor pe falia de securitate respectivă.
O analiză a tabelului duce la concluzia că un risc mediu ı̂ntr-un nivel de securitate
egal cu 1 este relativ moderat, ı̂n timp ce riscul mediu pentru serviciile cu nivel ridicat de
securitate este ridicat atunci când se foloseşte OpenId.
• Clientul poate instala un software adiţional (ı̂ncărcat de browser) care va asista uti-
lizatorul ı̂n marcarea unor atacuri phishing potenţiale. Un astfel de software poate
include mecanisme de ajutor ı̂n verificarea certificatelor şi adreselor de domeniu
(cum ar fi apariţia barei de adrese, efect iniţiat cu prioritate de multe browsere) şi
specificaţii OpenID suplimentare (de exemplu SeatBelt [5] de la VeriSign, Sxipper
[6] şi selectori de identitate Microsoft [7]).
Unele articole propun ca soluţie BeamAuth (utilizarea de bookmark-uri), sugerată
de Adida ı̂n [2], al cărei principal avantaj este acela că nu necesită instalarea de
software suplimentar.
18 CAPITOLUL 9. OPENID
9.7 Concluzii
Protocolul OpenID poate fi considerat sigur dacă M AC-ul şi canalul de comunicaţie
sunt considerate sigure. Totuşi securitatea depinde de metodele de autentificare folosite
de furnizorii serviciilor OpenId. Unii furnizori folosesc parole, ı̂n timp ce alţii au soluţii
mai sofisticate.
Un utilizator trebuie să poată avea ı̂ncredere ı̂n securitatea generală şi integritatea OP -
ului său. Dacă un furnizor este compromis, un intrus se poate da drept orice utilizator
al acelui furnizor, pentru orice serviciu bazat pe OpenID. Din acest motiv, este puţin
probabil ca OpenID – sau orice alt sistem similar – să fie adoptat pe scară largă ı̂n
domenii ı̂n care securitatea comunicării este esenţială (de exemplu internet banking). O
soluţie ar putea fi totuşi existenţa câtorva furnizori de servicii OpenId recunoscuţi oficial
(de exemplu modul ı̂n care sunt emise legitimaţiile electronice suedeze).
Până atunci, OpenID rămâne un instrument folosit atunci când comoditatea este mai
importantă decât siguranţa.
Bibliografie
[4] van Delft, B., Oostdijk, M. – A Security Analysis of OpenID, de Leeuw, E, Fischer-
Hubner, Fritsch, L. (Eds.), IDMAN 2010, IFIP AICT 343, pp. 73-84 (2010), IFIP
International Federation for Information Processing 2010
[5] Diffie, W., Hellman, M.E. – New directions in Cryptography, IEEE Transactions on
Information Theory IT-22, 644-654 (1976)
[6] Drebes, L. – Relying Party Stats as of Jan 1st, 2009, JanRain Blog (January 2009),
http://blog.janrain.com/2009/01/relying-party-stats-as-of-jan-1st-2008.html
[8] Hughes, J., Cantor, S., Hodges, J., Hirsch, F., Mishra, P., Philpott, R., Maler, E.
– Profiles for the OASIS Securit Assertion Markup Language (SAML) V2.0 (March
2005), http://docs.oasis-open.org/security/saml/v2.0/
[9] Jain, A., Nash, A., Hodges, J. – OpenID Security Issues. Presentation PayPal Infor-
mation Risk Management (November 2009).
[10] Lawrence, K., Kaer, C. – WS-Trust 1.4 OASIS Editor Draft (February 2008),
http://docs.oasis-open.org/ws-sx/ws-trust/ 200802/ws-trust-1.4-ed-01.html
19
20 BIBLIOGRAFIE
[14] Tom, A., Arnott, A. – OpenID Security Best Practices. openid.net (July 2009),
http://wiki.openid.net/OpenID-Security-Best-Practices
[15] Tsyrklevich, E., Tsyrklevich, V. – Single Sign-On for the Internet: A Security Story,
ı̂n BlackHat USA (2007)
[16] Office of Management and Budget (OMB). E-Authentication Guidance for Federal
Agencies, Memorandum M-04-04 (December 2003),
http://www.whitehouse.gov/omb/memoranda/fy04/m04-04.pdf
[19] http://dev.aol.com/OpenidTokenExchange