Nyckel 0, peer-publik nyckel
Okomprimerade X9.62 publik-nyckelsbytes (33 bytes för P-256). Telefonen använder detta för att uppfyra den krypterade tunneln.
Standarder · FIDO CTAP 2.2 hybrid (passkey-QR)
Bara om DU själv precis startade en passkey-inloggning på enheten som visar QR-koden. Om någon annan genererade QR-koden — en främling, en ”helpdesk”-agent, en teknisk support-samtal — innebär att skanna den med din telefon att de loggas in på ditt konto, inte du. Protokollets öppna standard (FIDO CTAP 2.2 hybrid) är solid; hotet är social manipulation kring vem som tryckte på ”Logga in med passkey”-knappen först.
En passkey är en autentiseringsuppgift — ett par med offentlig/privat nyckel — bunden till en av dina enheter. Om du registrerade en passkey för example.com på din telefon kan bara din telefon signera införloggningsutmaningen för example.com.
Det fungerar bra när du loggar in på din telefon. Men vad händer när du loggar in på en bärbar dator som inte har en passkey för den webbplatsen? Du kan:
Alternativ 3 är vad FIDO CTAP 2.2 ”hybrid” definierar. QR-koden är startpunkten — den innehåller tillräcklig information för att din telefon ska kunna hitta den bärbara datorn via Bluetooth Low Energy, uppfyra en engsgställig säker tunnel och proxy:a WebAuthn-proceduren.
URI:en ser ut så här:
FIDO:/0123456789012345678901234567890123456789...
Decimalsiffrorna är en base10-kodning av en CBOR-karta. Efter base10-avkodning + CBOR-tolkning har kartan heltalsnycklickar:
Okomprimerade X9.62 publik-nyckelsbytes (33 bytes för P-256). Telefonen använder detta för att uppfyra den krypterade tunneln.
10 bytes slumpmässig data. Identifierar just den här QR-koden; BLE-reklamen sänder en hash av den så att telefonen kan hitta rätt bärbar dator.
0 = make-credential (registrera en ny passkey), 1 = get-assertion (logga in), 2 = discoverable-credential.
HTTPS-värden som proxy:ar tunneln mellan de två enheterna när direkt BLE inte är tillgänglig (t.ex. över NAT). Vanligtvis en leverantörsdriven server som cable.ua5v.com (Google) eller cable.auth.com (Apple/MS).
Sekunder sedan epoch när QR-koden genererades. Används för repelsskyddd — telefonen vägrar att hedra en QR som är äldre än några minuter.
Boolesk. Anger om den bärbara datorn vill att telefonen ska delta i passiv tillståndshantering (mest relevant för flöden där autentiseringsuppgifter räknas upp).
Protokollet är kryptografiskt sound. Bluetooth-närhetskontrollen är verklig och begränsar attacken till den som är fysiskt nära dig. Så hur går det fel?
Genom social manipulation på initieringsnivån. Angriparen startar en passkey-inloggning till DITT konto på DERAS bärbara dator. Deras bärbara dator visar en FIDO-QR. De får på något sätt QR-koden framför dina ögon:
Om du skannar proxy:ar telefonen din passkey-signatur tillbaka till angriparens bärbara dators webbläsare. Sajten du har en passkey för tror att du loggade in. Angriparen är nu inloggad på ditt konto.
Närhetskontrollen hjälper inte — angriparen är fysiskt närvarande. QR-innehållet hjälper inte — det är kryptografiskt giltigt. Inloggningstjänsten hjälper inte — det är den korrekta sajt du har en passkey för. Det enda som hjälper är att förstå situationen: du bör aldrig skanna en FIDO-QR som du inte själv genererade genom att klicka på ”Logga in” på din egen enhet.
När du lägger in en FIDO-QR i vår skanner visar utslåget:
cable.ua5v.com, Apples tunnelserver, osv.)?Hotklassen är alltid missksamväckande, inte för att protokollet är brutet utan för att säkerhetsbedömningen är kontextuell och skannern inte kan veta vem som tryckte på ”Logga in.” Utslågets upptäckt berättar exakt det: ”att skanna fullfyller en inloggning som någon STARTADE PÅ EN ANNAN ENHET. Om du inte precis initierade en inloggning själv, vägra.”
Säkert: du satte dig vid din bärbara dator, öppnade din bank- eller e-postsajt, klickade på ”Logga in med passkey” och din bärbara dator visade QR-koden. Du tar upp telefonen, skannar QR-koden och godkänner närhetsuppmaning. Klart.
Inte säkert: någon annan än du initierade inloggningen. Det innebär vem som helst per telefon, vem som helst i ett fjärrsupportsamtal, vem som helst som mailade en QR-kod, vem som helst som visade en ”QR för att verifiera din identitet”, och alla QR-koder på en plats som inte är din egen nyss visade enhet.
Om du inte är säker på om en QR-kod är från en inloggning du startade själv, avbryt inloggningen på den ursprungliga enheten (stäng webbläsarfliken) och börja om från början på den enhet du tänkte använda. Riktiga FIDO-QR-koder gäller i bara ca 10 minuter; att börja om tömmer eventuella pågående sessioner och gör hotet omöjligt.
Släpp in bilden eller klistra in FIDO:-URI:en. Utslåget visar operation, tunnelserver, tidsstamp och en tydlig varning om att vägra såvida du inte själv startade inloggningen.