NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Crypto for Laravel

Overenie WebAuthn

Menný priestor Cose dekóduje bajtové štruktúry, ktoré vzniknú pri ceremónii WebAuthn či passkey, a z COSE verejného kľúča vytvorí overiteľný kľúč. Podpisy sa overujú cez KeyVerifier:

use RoundlyConsulting\Crypto\Facades\Crypto;

$authData = Crypto::authenticatorData($rawAuthenticatorData);     // rpIdHash, flags, signCount, COSE key
$key      = Crypto::coseKey($coseBytes);                           // COSE_Key bytes -> a verifiable public key
// or, from the attested credential: Crypto::coseKey($authData->coseKeyBytes)

$ok = Crypto::verifier()->verify($key, $signedData, $signature);   // ES256 DER or raw, RS256, EdDSA

Alebo volajte priamo triedy, ktoré fasáda sprístupňuje:

use RoundlyConsulting\Crypto\Cose\AuthenticatorData;
use RoundlyConsulting\Crypto\Cose\CoseKey;
use RoundlyConsulting\Crypto\Signature\KeyVerifier;

$authData = AuthenticatorData::parse($rawAuthenticatorData);      // rpIdHash, flags, signCount, COSE key
$key = CoseKey::fromCbor($coseBytes);                             // COSE_Key bytes -> a verifiable public key

$ok = (new KeyVerifier)->verify($key, $signedData, $signature);   // ES256 DER or raw, RS256, EdDSA

CoseKey::fromCbor() — aj Crypto::coseKey() — prijíma bajty COSE_Key (uložený kľúč credentialu alebo $authData->coseKeyBytes), nie dekódované pole: z PHP reťazca sa nedá zistiť, či ho CBOR niesol ako bajtový alebo textový reťazec, a striktný čítač COSE odmietne x, y, n či e typované ako text.

Samotná ceremónia — naviazanie challenge, origin, hash rpId, politika príznakov a zosúladenie počítadla podpisov — zostáva vo vašom kóde relying party. Tento balík iba dekóduje bajty a overuje podpisy.

Authenticator data

$authData = AuthenticatorData::parse($rawAuthenticatorData);

$authData->rpIdHash;                  // 32 bytes
$authData->flags->userPresent;        // UP
$authData->flags->userVerified;       // UV
$authData->flags->backupEligible;     // BE
$authData->flags->backupState;        // BS
$authData->signCount;                 // int — unsigned 32-bit, never negative
$authData->aaguid;                    // ?string (present with attested credential data)
$authData->credentialId;              // ?string
$authData->coseKey;                   // ?PublicKey — the verifiable credential key
$authData->coseKeyBytes;              // ?string — the raw COSE key bytes

AuthenticatorData::parse() striktne validuje štruktúru: príliš krátky buffer, orezané či príliš dlhé credential id, COSE kľúč, ktorý nie je mapa, alebo neočakávané bajty na konci vyhodia MalformedCborException. Príznaky obsahujú aj attestedCredentialData (AT) a extensionData (ED).

Podporované COSE kľúče

COSE ktyVýsledokAlgoritmy / krivky
2 (EC2)EcKeyES256 / P-256, ES384 / P-384, ES512 / P-521 — alg musí zodpovedať krivke
3 (RSA)RsaKeyRS256
1 (OKP)OkpKeyEdDSA / Ed25519

Neznámy typ kľúča, krivka alebo algoritmus vyhodí UnsupportedAlgorithmException; chýbajúci alebo nesprávne typovaný label vyhodí MalformedCborException. Enum CoseAlgorithm mapuje identifikátory IANA (-7, -8, -35, -36, -257) na ich JOSE ekvivalenty cez toSignatureAlgorithm().

CBOR dekodér

CborDecoder podporuje iba podmnožinu, ktorú používa WebAuthn — celé čísla, bajtové a textové reťazce, polia a mapy s určenou dĺžkou a false/true/null. Je kanonický (CTAP2): neurčité dĺžky, tagy, desatinné čísla, nie najkratšie kódovania a duplicitné kľúče máp sa odmietnu a vnorenie je obmedzené na 16. Odmietne aj textový reťazec, ktorý nie je UTF-8, a textový kľúč mapy, ktorý by PHP uložilo ako celé číslo („1“, „-1“), takže textový label sa nikdy nevydá za celočíselný, ktorý napodobňuje:

use RoundlyConsulting\Crypto\Cose\CborDecoder;

$decoded = (new CborDecoder)->decode($attestationObjectBytes);   // exactly one item; trailing bytes throw

$result = (new CborDecoder)->decodeFirst($bytes);
$result->value;            // the decoded item
$result->bytesConsumed;    // how many bytes it spanned

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.