Passykeys im eCommerce-Umfeld
Passkeys (Web Authentication API) stellen eine Revolution im Bereich der Online-Sicherheit und Benutzerfreundlichkeit im E-Commerce dar. Sie bieten eine moderne Alternative zu traditionellen Passwörtern, indem sie kryptografische Schlüssel Paare nutzen, die an spezifische Geräte gebunden sind (diese können bei einer aktiven Geräte Synchronisation zwischen Geräten mit demselben Account geteilt werden).
Dies führt zu einer erheblich verbesserten Sicherheit, da Phishing-Angriffe und Passwortdiebstahl nahezu unmöglich werden. Gleichzeitig vereinfachen Passkeys den Anmeldeprozess erheblich, was die Benutzererfahrung steigert und die Konversionsraten im E-Commerce positiv beeinflusst. Diese Technologie markiert einen entscheidenden Schritt hin zu einem sichereren und reibungsloseren Online-Einkaufserlebnis.
Technische Funktionsweise von Passkeys
Passkeys basieren auf der Public-Key-Kryptographie, einem asymmetrischen Verschlüsselungsverfahren. Hierbei werden zwei Schlüssel verwendet: ein öffentlicher Schlüssel (Public Key) und ein privater Schlüssel (Private Key). Der öffentliche Schlüssel kann frei weitergegeben werden, während der private Schlüssel geheim gehalten wird.
Bei der Erstellung eines Passkeys wird ein Schlüsselpaar generiert. Der private Schlüssel wird sicher auf dem Gerät des Benutzers gespeichert, beispielsweise auf einem Smartphone, einem Computer oder in einem Hardware-Sicherheitstoken. Der öffentliche Schlüssel wird an den Dienst oder die Website übermittelt, bei der sich der Benutzer anmelden möchte.
Anmeldeprozess
Anmeldung: Bei der Anmeldung fordert der Dienst den Benutzer auf, sich mit seinem Passkey zu authentifizieren.
Herausforderung: Der Dienst sendet eine kryptografische Herausforderung an das Gerät des Benutzers.
Signierung: Das Gerät des Benutzers signiert die Herausforderung mit dem privaten Schlüssel.
Verifizierung: Der Dienst überprüft die Signatur mit dem zuvor gespeicherten öffentlichen Schlüssel. Wenn die Signatur korrekt ist, wird der Benutzer authentifiziert.
// File: login/conditionalMediationPassKeyLogin.php
header("Content-Type: application/json");
echo json_encode([
'publicKey' => [
'challenge' => base64url_encode(random_bytes(16)),
'timeout' => 60_000, // in secs. ignored for conditional logins
'userVerification' => 'required', // required, preferred, discouraged
'rpId' => $_REQUEST['HTTP_HOST'], // example.com
'extensions' => ['some_extra_infos' => 'if_you_want_to_share'],
],
]);
// File: login.js
function base64url_decode(base64url) {
return atob(base64url.replace(/_/g, '/').replace(/-/g, '+'));
}
function str2ab(str) {
return Uint8Array.from(str, c => c.charCodeAt(0)).buffer
}
async function initConditionalMediationPassKeyLogin() {
const form = document.getElementById('loginForm');
if (!form) {
return;
}
console.log('[PassKey] initConditionalMediationPassKeyLogin');
const options = await (await fetch('/login/conditionalMediationPassKeyLogin.php')).json();
options.publicKey.challenge = str2ab(base64url_decode(options.publicKey.challenge));
options.mediation = 'conditional'; // needed for conditional login
let credential = await navigator.credentials.get(options);
if (!credential) {
console.log('[PassKey] no passkey found.');
return;
}
const response = await (await fetch(form.dataset.passkeyRoute, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Csrf-Token': document.querySelector('meta[name="csrf-token"]').content
},
method: "POST",
body: JSON.stringify(credential.toJSON())
})).json();
if (response.error === 1) {
alert('Error: Invalid request.');
} else if (response.error > 1) {
alert('Error: ' + response.data);
if (PublicKeyCredential.signalUnknownCredential) {
// https://developer.chrome.com/docs/identity/webauthn-signal-api?hl=de
await PublicKeyCredential.signalUnknownCredential({
rpId: options.publicKey.rpId,
credentialId: credential.id
});
} else {
alert('[ERROR] You can delete your passkey.');
}
} else {
// redirect to my account section
window.location = response.data?.redirect || '/account.php';
}
}
Vorteile für den Benutzer
Schutz vor Phishing-Angriffen, da Passkeys an spezifische Domains gebunden sind und nicht weitergegeben werden können.
Der Browser verwaltet die Passkeys, was die Gefahr von Datenlecks reduziert.
Passkeys sind kryptografisch sicher und bieten einen höheren Schutz als herkömmliche Passwörter.
Reduzierung des Risikos von Passwortdiebstahl, da keine Passwörter übermittelt oder gespeichert werden müssen, die abgefangen werden könnten.
Zwei-Faktor-Authentifizierung (2FA) ist oft in den Passkey-Prozess integriert, was die Sicherheit zusätzlich erhöht.
Verbesserter Schutz bei Geräteverlust, da Passkeys durch biometrische Daten oder Geräte-PINs geschützt sind.
Bei einem Diebstahl der Benutzerdatenbank des Anbieters stellen Passkeys kein Sicherheitsrisiko dar, da Hacker keinen Zugriff auf die privaten Schlüssel der Benutzer auf ihren Geräten haben.
Fazit
Passkeys sind zweifellos der aufkommende Trend im E-Commerce-Sektor, der die Sicherheit und Benutzerfreundlichkeit revolutioniert. Angesichts der zahlreichen Vorteile, wie verbesserter Schutz vor Phishing und Datenlecks, sowie der Vereinfachung des Anmeldeprozesses, ist es ratsam, diese Technologie so schnell wie möglich zu implementieren.
Kontaktieren Sie uns gerne, um zu erfahren, wie wir Ihnen bei der Integration von Passkeys und anderen innovativen Sicherheitslösungen helfen können.