Geminus 2FA

En komplet open source 2FA-løsning

Geminus 2FA er en løsning der muliggør to-trins godkendelse hos virksomheder i alle størrelser. Løsningen er oprindeligt udviklet for Statens IT, der ønskede en gratis erstatning til SMS Passcode. Før udviklingen gik i gang, blev det aftalt, at projektet skulle udgives som open source - både for at give andre mulighed for at drive deres egen gratis 2FA-løsning, men også for at give tilbage til det open source community, som vi hos Semaphor er så store tilhængere af.

Hvad er 2FA?

2FA, to-faktor login, to-trins godkendelse er alle begreber der dækker over samme autentifikationsmodel. En autentifikationsmodel som er blevet en del af de flestes hverdag. Vi kender det blandt andet fra de login vi foretager os med NemID og MitID. To-trins godkendelse refererer til at en bruger skal autentifikere sig selv to på to trin. Altså på to forskellige måder i forlængelse af hinanden. Det første trin er som regel et normalt login med brugernavn og kodeord. Trin to, eller den anden faktor, kan f.eks. være godkendelse via en mobilapp, indtastning af en 6 cifret kode fra en kodeviser, eller ved at følge et link i en e-mail. Herefter gives adgang til det, som brugeren er i færd med at logge ind på.



Figur 1 - Eksempel på 2-faktor login med Geminus 2FA

Hvad er Geminus 2FA?

Geminus 2FA er en komplet og open source-løsning der muliggør, at f.eks. virksomheder og kommuner kan drive deres egen to-trinsgodkendelse. Geminus 2FA's arkitektur er designet med sikkerhed som højeste prioritet og driften kræver ingen former for tilnytning til eksterne services og- eller cloud-forbindelser. Derfor er der ikke grund til at bekymre sig om, om personoplysninger eller anden fortrolig data sendes til udenlandske aktører. Geminus 2FA er privatlivsvenlig, sikker og er bygget på eksisterende open source teknologier som Python/Django, PostgreSQL og FreeRADIUS. Geminus 2FA undestøtter desuden selvbetjening af brugere der skal oprettes i systemet og nulstilning af deres TOTP-hemmelighed. Dertil fungerer Geminus 2FA også som et authorization-endpoint, der login-validerer brugeres LDAP login mod f.eks. AD samt deres TOTP-kode mod egen database. Al trafik mellem komponenter er TLS krypteret og benytter sig bl.a. af HTTPS-, LDAP(S)- og RADIUS-protokollerne.

Med Geminus 2FA kan brugere enten benytte en app som kode-generator (vi anbefaler FreeOTP til iOS og Android eller Aegis kun til Android), eller der kan provisioneres hardware tokens i form af kodevisere for helt at undgå, at inkludere brugeres telefoner. Geminus 2FA kommer i form af et Ansible-projekt. Med Ansible er der mulighed for en hurtig og uniform udrulning og vedligeholdelse af infrastruktur. Det er samtidig nemt og problemfrit at prøvekøre ændringer i et testmiljø forud for udrulning i produktion.

Geminus 2FA er kompatibel med og benytter internetstandarden RFC 6238 - også kendt som TOTP (Time-Based One-Time Password Algorithm), som er baseret på RFC 4226 (HOTP: An HMAC-Based One-Time Password Algorithm). RFC 6238 er standarden der bruges til at generere og verificere de tidskritiske koder ud fra en delt hemmelighed. Disse koder har ofte en gyldighed på 30 sekunder og de bruges som autentifikationsmodellens andet trin. Interne såvel som eksterne services kan bruge Geminus 2FA til at autentificere brugere og da der er tale om en åben og udbredt standard, kan ethvert program, app eller programmerbar kodeviser, der er kompatibel med RFC 6238, bruges til at generere koderne.

Nedenfor ses et simpelt sekvensdiagram af et brugerlogin med Geminus 2FA.



Figur 2 - Sekvensdiagram over autentificeringsflowet

Fik vi nævnt at det er gratis? Geminus 2FA vil inden længe være frit tilgængelig på vores Github-side. Geminus 2FA kræver hverken abonnement eller årlig licens. Den eneste eneste udgift er din elregning. Derudover kan Semaphor bistå i opsætning og support af produktet. Dette gør vi allerede for Statens-IT. Kontakt os for en uforpligtende snak om, hvordan Geminus 2FA kan bruges i jeres virksomhed.

Læs også den tekniske beskrivelse af Geminus 2FA og dets komponenter.