Citat:
1. Jag går till min banks hemsida, fyller i mitt personnummer och trycker på "logga in med mobilt bank-id"
2. Nu skickar banken en request till mitt bank-id-konto.
3. Jag loggar in på bank-id.
4. Nu skickar bank-id ett godkännande till bankens hemsida och jag blir inloggad.
Hur vet bankens hemsida att det är just min dator som ska släppas in? Jag misstänker att det är så att steg 2 innehåller information om vilken dator som vill ha tillgång, information så som ip-address och kanske något mer jag inte tänkt på. Stämmer detta?
2. Nu skickar banken en request till mitt bank-id-konto.
3. Jag loggar in på bank-id.
4. Nu skickar bank-id ett godkännande till bankens hemsida och jag blir inloggad.
Hur vet bankens hemsida att det är just min dator som ska släppas in? Jag misstänker att det är så att steg 2 innehåller information om vilken dator som vill ha tillgång, information så som ip-address och kanske något mer jag inte tänkt på. Stämmer detta?
Citat:
Vet inte exakt hur det funkar, men man kan ju gissa att det finns nåt JavaScript nånstans som ligger och skickar en unik token till banken medan du ombeds logga in med bankid, man skulle ju kunna gissa på att denna token innehåller nån slags hash på dels den IP-adress som initierade anropet, samt nån slags tidsstämpel.
Denna token måste givetvis valideras serverside nånstans i inloggningsförfarandet (dvs beroende på avsändaren av token måste det gå att räkna fram samma hash återigen) och om hela handskakningen med bankid funkar (dvs du har rätt kod) startar sessionen och du loggas in.
Detta kommer givertvis inte hjälpa om någon annan påbörjar en inloggning och ber dig logga in med ditt bankid som nån sa, eftersom denna token då genererats från dennes dator (som nån annan påpekat).
Rena spekulationer från min sida.
Denna token måste givetvis valideras serverside nånstans i inloggningsförfarandet (dvs beroende på avsändaren av token måste det gå att räkna fram samma hash återigen) och om hela handskakningen med bankid funkar (dvs du har rätt kod) startar sessionen och du loggas in.
Detta kommer givertvis inte hjälpa om någon annan påbörjar en inloggning och ber dig logga in med ditt bankid som nån sa, eftersom denna token då genererats från dennes dator (som nån annan påpekat).
Rena spekulationer från min sida.
Citat:
Har ingenting med BankID att göra. Protons inlägg stämmer, men vill ändå utveckla lite.
Du har ett certifikat på mobil/dator som är kopplat till ditt personnummer. Och det finns två sätt att använda det certifikatet: Samma enhet, eller annan enhet, man behöver inte alltid ange personnummer heller vilket komplicerar saker. Det finns alltid 3 delar i ett inlogg. BankIDs servrar, tjänsten man vill logga in på, och BankID klienten.
1) När man vill logga in begär klienten en token från BankIDs servrar., med den vet BankID var man vill logga in. Tjänsten sparar den i minne för kommunikationen mellan de 3 delarna.
2) Om man valde annan enhet får man antingen fylla i sitt personnummer, eller skanna en QR kod från BankID klienten. Annars försöker tjänsten starta BankID klienten på samma enhet, hur man startar beror på enheten men man skickar med samma token som man fick från BankIDs servrar. Nu vet man vem som vill logga in.
3) Nu när man kopplat ihop BankID klienten och tjänsten förväntar sig tjänsten ett godkännande från BankIDs servrar att personen lyckades med inlogget. Och börjar skicka frågor till servern, och då används samma token igen. Samtidigt väntar BankIDs servrar på rätt kod från BankID klienten. Detta pågår tills användaren skrivit sin kod på BankID klienten eller tills tiden går ut.
Hemligheten är certifikatet på enheten som bara kan verifieras med lösenordet. Och BankIDs servrar kan verifiera att det är ett äkta certifikat kryptografiskt (det sista är en gissning men det är så det brukar skötas).
Du har ett certifikat på mobil/dator som är kopplat till ditt personnummer. Och det finns två sätt att använda det certifikatet: Samma enhet, eller annan enhet, man behöver inte alltid ange personnummer heller vilket komplicerar saker. Det finns alltid 3 delar i ett inlogg. BankIDs servrar, tjänsten man vill logga in på, och BankID klienten.
1) När man vill logga in begär klienten en token från BankIDs servrar., med den vet BankID var man vill logga in. Tjänsten sparar den i minne för kommunikationen mellan de 3 delarna.
2) Om man valde annan enhet får man antingen fylla i sitt personnummer, eller skanna en QR kod från BankID klienten. Annars försöker tjänsten starta BankID klienten på samma enhet, hur man startar beror på enheten men man skickar med samma token som man fick från BankIDs servrar. Nu vet man vem som vill logga in.
3) Nu när man kopplat ihop BankID klienten och tjänsten förväntar sig tjänsten ett godkännande från BankIDs servrar att personen lyckades med inlogget. Och börjar skicka frågor till servern, och då används samma token igen. Samtidigt väntar BankIDs servrar på rätt kod från BankID klienten. Detta pågår tills användaren skrivit sin kod på BankID klienten eller tills tiden går ut.
Hemligheten är certifikatet på enheten som bara kan verifieras med lösenordet. Och BankIDs servrar kan verifiera att det är ett äkta certifikat kryptografiskt (det sista är en gissning men det är så det brukar skötas).
Jag vill nog utveckla lite mer, eller iaf gå tillbaka till orginalfrågeställningen.
Banken har inte koll på dig, så att säga, den vet att webbläsaren försöker logga in, kör sin challenge-response-runda och loggar in om den går bra.
Dock finns det ett problem med det, vilket nog är anledningen till frågeställningen. Hur vet banken vilken webbläsare den ska släppa in om två försöker logga in samtidigt? Här har BankID gjort en dundermiss i implementationen, då BankID inte kräver att det går en challenge-response hela vägen till användaren när det gäller att koppla ihop vad som det loggas in på (i.e. webbläsaren till banken) med vad man loggar in med (i.e. mobilt BankID i din telefon), så du kan inte veta det. Dock ska det nämnas att Finansiell ID-teknik har börjat låsa BankID direkt vid misstänkt aktivitet, vilket är ett steg i rätt riktning (dock ett steg som inte hade behövts med vettig design).
Min rekommendation om du inte får en QR-kod vid inloggningen är att bli väldigt arg på din bank och klaga mycket och ofta. Specifikationen för BankID för tjänsteleverantörer (typ banker) finns här (https://www.bankid.com/assets/bankid...nes-v3.2.2.pdf), tryck den gärna i ansiktet på dem.
Och innan de har fixat QR-kod, starta alltid mobilt BankID innan du knappar in ditt personnummer så att du ser att appen (mobilt BankID-appen) drar igång inloggningen samtidigt som du har knappat in ditt personnummer. Då kan du vara hyffsat säker på att det är din webbläsare som loggas in.
BankIDs specifikation är väldigt svag, den lyder så här när det kommer till inloggningsflödet:
Citat:
Det borde i det närmaste vara tvärtom, inloggning som inte stödjer challenge-response på användarnivå (dvs QR-koden) borde inte få användas utan vidare och det borde spruta rött överallt.
As an alternative to entering personal number, the RP may support QR codes that the user scans.
För att undvika missförstånd, mobilt BankID har en objektivt dålig design, i meningen att det går att lura en vanlig användare relativt lätt. Rent kryptografiskt är lösningen bra, men vad spelar det för roll när du kan godkänna fel överföring eller fel inloggning? (och förmodligen har den bara utvärderats tekniskt och inte användarmässigt)