Узнайте, как WebAuthn использует асимметричные алгоритмы шифрования и pubKeyCredParams при аутентификации с помощью ключей доступа, а также о роли credentialPublicKey, CBOR и COSE.
Vincent
Created: August 8, 2025
Updated: August 8, 2025
See the original blog version in English here.
Our mission is to make the Internet a safer place, and the new login standard passkeys provides a superior solution to achieve that. That's why we want to help you understand passkeys and its characteristics better.
В цифровой безопасности ключи доступа (passkeys) — это новый стандарт беспарольной аутентификации. В основе ключей доступа лежит криптография с открытым ключом, используемая в протоколе WebAuthn, на котором они базируются. Понимание того, как криптография с открытым ключом используется в WebAuthn, особенно при создании, извлечении, управлении и хранении ключей доступа, имеет решающее значение при разработке или использовании аутентификации с помощью ключей доступа. Открытый ключ хранится на сервере доверяющей стороны (Relying Party, RP), то есть на бэкенде веб-сайта, который хочет аутентифицировать пользователя с помощью ключей доступа, а закрытый ключ надежно хранится в аппаратном модуле безопасности в зависимости от операционной системы: Secure Enclave (iOS), TEE (Android) или TPM (Windows).
В этой статье мы кратко рассмотрим основы криптографии с открытым ключом, используемой в ключах доступа. К концу статьи мы должны получить ответы на следующие вопросы:
Чтобы понять, как криптография с открытым ключом работает в рамках WebAuthn, мы кратко рассмотрим ее общие принципы и распространенные типы алгоритмов.
Recent Articles
📖
WebAuthn pubKeyCredParams и credentialPublicKey: CBOR и COSE
📖
Протокол обмена учетными данными (CXP) и формат обмена (CXF)
🔑
Passkeys и WebAuthn PRF для сквозного шифрования (2025)
📖
Подсказки WebAuthn для учетных данных с открытым ключом / User-Agent
📖
WebAuthn Signal API: Обновление и удаление Passkeys на стороне клиента
Криптография с открытым ключом, также известная как асимметричная криптография, отличается от симметричной, где для шифрования и дешифрования используется один и тот же ключ. Асимметричная криптография использует два разных ключа: открытый ключ, которым можно делиться открыто, и закрытый ключ, который владелец держит в секрете.
Взято с: https://en.wikipedia.org/wiki/Public-key_cryptography
Этот метод позволяет не только шифровать данные для обеспечения их конфиденциальности, но и подписывать сообщения. Подпись подтверждает личность отправителя и гарантирует, что сообщение не было изменено, тем самым подтверждая его подлинность и целостность.
Вот обзор некоторых распространенных типов алгоритмов, используемых в криптографии с открытым ключом:
Категория | RSA | DSA | ECDSA | EdDSA |
---|---|---|---|---|
Дата создания | 1977 | 1991 | 1999 | 2011 |
Тип алгоритма | Асимметричная криптография с открытым ключом | Алгоритм цифровой подписи | Цифровая подпись на эллиптических кривых | Цифровая подпись на кривых Эдвардса |
Основное применение | Безопасная передача данных | Подписание электронных документов | Безопасные транзакции и подписи | Безопасные транзакции и подписи |
Распространенные размеры ключей | от 1024 до 15360 бит | от 1024 до 3072 бит | от 160 до 512 бит | 256 бит |
Производительность | Медленнее из-за большого размера ключа | Быстрее RSA для подписи | Быстрые вычисления с малыми ключами | Оптимизирован для скорости и безопасности |
Популярность | Широко использовался исторически | Менее распространен, чем RSA | Становится все более популярным | Быстро набирает популярность |
Эффективность для мобильных устройств | Менее эффективен на мобильных устройствах | Умеренно эффективен | Высокая эффективность на мобильных устройствах | Максимальная эффективность |
Требования к хранению ключей | Высокие из-за больших размеров ключей | Умеренные | Требуется мало места для хранения | Минимальные потребности в хранении |
Расход батареи | Более высокое потребление | Умеренное потребление | Низкое энергопотребление | Оптимален для сохранения заряда батареи |
Пригодность для мобильных устройств | Менее подходит из-за размера и энергопотребления | Умеренно подходит | Очень подходит | Очень подходит |
Применение в стандартах | Широко применяется (TLS, SSH) | Менее широко применяется | Широко применяется в современных протоколах (TLS, SSH) | Набирает популярность в новых протоколах (TLS, SSH) |
Устойчивость к будущим угрозам | Уязвим для квантовых атак | Уязвим для квантовых атак | Потенциально устойчив к квантовым атакам | Потенциально устойчив к квантовым атакам |
Универсальность | Высокая универсальность на разных платформах | Ограничен конкретными случаями использования | Высокая универсальность | Высокая универсальность |
Патентный статус | Не защищен патентом | Не защищен патентом | Не защищен патентом | Не защищен патентом |
Математическая основа криптографии на эллиптических кривых (ECC), включая ECDSA и EdDSA, связана со свойствами эллиптических кривых, которые мы не будем рассматривать в этой статье. Но из приведенной выше таблицы очевидно, что существуют преимущества, которые способствуют их внедрению. Мы рассмотрим самые важные из них в следующем разделе.
Криптография на эллиптических кривых получила широкое распространение на мобильных устройствах, поскольку они выигрывают от меньших размеров ключей, что дает следующие преимущества:
Уровень безопасности (биты) | Размер ключа RSA (биты) | Размер ключа ECDSA/EdDSA (биты) |
---|---|---|
80 | 1024 | 160-223 |
112 | 2048 | 224-255 |
128 | 3072 | 256-383 |
256 | 15360 | 512+ |
Термин уровень безопасности в этом контексте относится к стойкости криптографической системы, а именно к уровню сложности, с которым столкнется злоумышленник при попытке обойти меры безопасности. Обычно он измеряется в битах и представляет собой объем работы (количество операций), который потребуется для взлома шифрования или подделки подписи. С ростом уровня безопасности преимущества в размере становятся очевидными, достигая соотношения размеров ключей до 1:30.
Алгоритм | Размер ключа | Операция подписи | Подписей/с |
---|---|---|---|
RSA | 2048 | 0.001012s | 987 |
ECDSA | 256 | 0.000046s | 21565 (x20) |
Эти факторы делают ECC особенно подходящей для мобильных сред, где оптимизация хранилища, скорости обработки и энергопотребления имеет важное значение. В результате ECC все чаще предпочитают в мобильных вычислениях за ее способность обеспечивать надежную безопасность без ущерба для производительности устройства. Тем не менее, до сих пор существует множество старых версий распространенных протоколов, таких как TLS (используемый для HTTPS, FTPS или SMTPS), SSH или IPsec, которые все еще поддерживают RSA, но начали предлагать варианты на основе ECC клиентам, которые их поддерживают.
Стандарт WebAuthn — это не стандарт шифрования, а протокол безопасности, который обеспечивает надежную аутентификацию на основе открытого ключа для веб-приложений, позволяя пользователям входить в систему с помощью биометрии, мобильных устройств или аппаратных ключей безопасности (например, YubiKeys) вместо паролей. Поэтому WebAuthn намеренно не привязан к конкретной криптографии на основе открытого ключа. Давайте посмотрим, как это достигается.
Протокол безопасности WebAuthn обеспечивает криптографически защищенную аутентификацию между пользователем и доверяющей стороной. С технической точки зрения это означает, что доверяющая сторона (веб-сайт, который хочет использовать ключи доступа со своими пользователями) должна обмениваться ключами через браузер с пользователем и его аутентификатором, который затем сохраняет закрытый ключ в специальном аппаратном модуле безопасности (HSM).
Для регистрации ключей доступа есть три важных шага:
PublicKeyCredentialCreationOptions.pubKeyCredParams
вместе с другими PublicKeyCredentialCreationOptions
.pubKeyCredParams
на наличие поддерживаемых им алгоритмов шифрования и создает пару ключей вместе с уникальным Credential ID. Он сохраняет закрытый ключ в HSM, а затем возвращает открытый ключ и использованный алгоритм шифрования в браузер. Затем браузер отправляет POST-запрос на бэкенд доверяющей стороны с attestationObject
в разделе «authData». Если поддерживаемые алгоритмы шифрования не совпадают, процедура создания завершится неудачей.attestationObject
от браузера. Она анализирует раздел authData.credentialPublicKey
и извлекает открытый ключ. Вместе с открытым ключом доверяющей стороне также отправляется информация об использованном алгоритме шифрования и Credential ID.Для последующего входа / аутентификации с помощью ключей доступа необходимы следующие шаги (детали упрощены):
Рассматривая оба случая, мы видим, что информация об открытом ключе и алгоритме шифрования передается между участниками только при регистрации ключей доступа.
При последующих входах / аутентификациях с помощью ключей доступа передаются только вызов и подпись.
Стандарт WebAuthn использует идентификаторы алгоритмов IANA COSE для идентификации используемых алгоритмов шифрования. Идентификаторы алгоритмов COSE используются как для сообщения о поддерживаемых алгоритмах в pubKeyCredParams, так и для передачи типа фактически созданной пары ключей в credentialPublicKey. Мы сосредоточимся на их реализации в следующих двух разделах.
Список алгоритмов COSE от IANA включает более 75 алгоритмов, которые теоретически могут быть использованы со стандартом WebAuthn. Большинство алгоритмов с отрицательным ID являются асимметричными с открытым ключом, а большинство с положительным — симметричными, но это скорее условность, так как есть исключения.
Как мы уже отмечали, алгоритм шифрования должен поддерживаться как аутентификатором, так и бэкендом доверяющей стороны, чтобы его можно было использовать в процедуре WebAuthn. Поскольку большинство доверяющих сторон используют существующие библиотеки WebAuthn, имеющие доступ к широкому спектру алгоритмов шифрования, важнее посмотреть, какие алгоритмы поддерживаются какими аутентификаторами:
Название | ID | Описание | Apple | Android | Windows 10 | Windows 11+ | Ключи безопасности |
---|---|---|---|---|---|---|---|
RS256 | -257 | RSASSA-PKCS1-v1_5 с использованием SHA-256 | ❌ | ❌ | ✅ | ✅ | ✅ |
EdDSA | -8 | EdDSA | ❌ | ❌ | ❌ | ❌ | ✅ (*) |
ES256 | -7 | ECDSA с SHA-256 (также известный как NIST P-256) | ✅ | ✅ | ❌ | ✅ | ✅ |
(*) = Небольшая часть ключей безопасности (например, Yubikeys 5+, Solokey или Nitrokey) Выдержка из таблицы IANA: Полный список смотрите здесь
Как видно из этой таблицы, для поддержки всех важных аутентификаторов достаточно RS256 и ES256. Некоторые представители сообщества рекомендуют также интегрировать EdDSA для дальнейшего повышения безопасности. С другой стороны, Credential ID, которые также необходимо хранить, для ключей EdDSA, по-видимому, значительно длиннее. На сегодняшний день редакторский черновик W3C предстоящего стандарта WebAuthn уровня 3 предлагает все три алгоритма.
Настройка поддерживаемых алгоритмов шифрования для создания ключа доступа выполняется через PublicKeyCredentialCreationOptions
:
const publicKeyCredentialCreationOptions = { challenge: "*", rp: { name: "Corbado", id: "corbado.com", }, user: { id: "user-X", name: "user@corbado.com", displayName: "Corbado Name", }, pubKeyCredParams: [ { alg: -8, type: "public-key", }, { alg: -7, type: "public-key", }, { alg: -257, type: "public-key", }, ], authenticatorSelection: { authenticatorAttachment: "platform", requireResidentKey: true, }, }; const credential = await navigator.credentials.create({ publicKey: publicKeyCredentialCreationOptions, });
Пример показывает, как алгоритмы указываются в pubKeyCredParams
: alg
для ID и public-key
в качестве типа алгоритма. В строках 29/30 PublicKeyCredentialCreationOptions передаются аутентификатору через WebAuthn API браузера. Отключение поддержки ES256 или RS256 приведет к ошибкам и категорически не рекомендуется.
В качестве рабочего примера мы запустим следующие PublicKeyCredentialCreationOptions
на Mac в Passkeys Debugger.
{ "rp": { "id": "www.passkeys-debugger.io", "name": "Relying Party Name" }, "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "pubKeyCredParams": [ { "type": "public-key", "alg": -8 }, { "type": "public-key", "alg": -7 }, { "type": "public-key", "alg": -257 } ], "excludeCredentials": [], "timeout": 120000, "authenticatorSelection": { "residentKey": "required", "requireResidentKey": true, "userVerification": "required", "authenticatorAttachment": "platform" }, "hints": [], "attestation": "direct", "user": { "name": "User-2024-08-19", "displayName": "User-2024-08-19", "id": "LlakhOS2vobxxwdkInYP-277Atf0S5OsJax_uBCNNINk" } }
Ответ, сгенерированный аутентификатором, отправляется доверяющей стороне (в виде аттестации) и выглядит следующим образом:
{ "id": "aWMmE4BE9ZzvRKd9rQhdy6ubrlB3COrTRFQANe6ydHg", "rawId": "aWMmE4BE9ZzvRKd9rQhdy6ubrlB3COrTRFQANe6ydHg", "type": "public-key", "response": { "attestationObject": "o2NmbXRmcGFja2VkZ2F0dFN0bXSiY2FsZyZjc2lnWEcwRQIhAIvVNCTlYXX7WKOfeto7WyBQE6uvXpvnNy22kqrMxs_QAiAmanFqalrvD_1fe0Cb2f60ljth4nngckkKJ8JPtqZiO2hhdXRoRGF0YVikt8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADdFAAAAAK3OAAI1vMYKZIsLJfHwVQMAIGljJhOARPWc70Snfa0IXcurm65Qdwjq00RUADXusnR4pQECAyYgASFYIDP4onRKVHXlhwbmWF4V6jmfsuVuSXchGm6xoceSBGtjIlgg3bxZIbKyE7qPczMZmS0jCGBf9cgajs77EZL-gNAjO0c", "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiQUFBQmVCNzhIckllbWgxalRkSklDcl8zUUdfUk1PaHAiLCJvcmlnaW4iOiJodHRwczovL29wb3Rvbm5pZWUuZ2l0aHViLmlvIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ", "transports": ["internal"], "publicKeyAlgorithm": -7 }, "authenticatorAttachment": "platform", "clientExtensionResults": {} }
В следующем разделе мы увидим, как можно извлечь открытые ключи и использованный алгоритм шифрования из ответа.
Прежде всего, нам нужно изучить, как устроен attestationObject
, потому что, как мы видели выше, он передается доверяющей стороне не в формате JSON.
attestationObject играет важную роль в процессе регистрации WebAuthn, служа контейнером для заявления об аттестации, предоставляемого аутентификатором. Этот объект предоставляет много информации, необходимой доверяющей стороне (RP) для проверки происхождения и целостности вновь созданных учетных данных с открытым ключом.
По своей сути attestationObject — это сложная структура. В основном он закодирован в формате CBOR (Concise Binary Object Representation), который затем кодируется с помощью Base64URL. Он инкапсулирует данные аутентификатора вместе с заявлением об аттестации, которое подтверждает подлинность информации. Поскольку ключи доступа создаются с аттестацией «none» и, следовательно, не содержат заявления об аттестации, мы не будем рассматривать это в данной статье. К слову: мы написали «в основном CBOR», потому что из-за переменных длин, необходимых для необязательных расширений, также используются нестандартные префиксы CBOR. Мы не будем углубляться в это, обсуждение сложностей можно найти здесь.
Взято из спецификации WebAuthn
В данных аутентификатора (authData) надежно хранятся вновь сгенерированный открытый ключ и Credential ID пользователя, которые могут быть извлечены доверяющей стороной. Поскольку разработчики должны решать задачу извлечения открытого ключа из attestationObject в любой системе на основе WebAuthn, важно понимать его архитектуру.
CBOR (Concise Binary Object Representation) — это формат данных, предназначенный для компактного, эффективного и расширяемого кодирования данных. Он является двоичным, что делает его меньше и быстрее для анализа, чем его текстовый аналог JSON. Следующий пример иллюстрирует разницу между JSON и CBOR (текст против двоичных данных):
Текст JSON | Двоичные данные CBOR | Декодированный CBOR |
---|---|---|
Name:Corbado | A1 64 4E 61 6D 65 67 43 6F 72 62 61 64 6F | A1 # map(1) с одной записью 64 # text(4) 4E616D65 # Name; 67 # text(7) 436F726261646F # Corbado |
Жирным выделено Name. Курсивом — Corbado. (больше информации можно найти на https://cbor.io/)
В контексте WebAuthn CBOR используется по нескольким причинам:
Использование CBOR особенно подходит для кодирования открытых ключей и attestationObject, поскольку ему необходимо обрабатывать различные форматы и длины, которые мы обсуждали выше. Например, ключ RSA будет иметь другие атрибуты и размеры по сравнению с ключом ECDSA. Внутри attestationObject открытые ключи хранятся в формате COSE Key, который основан на CBOR.
Структура COSE Key построена на объекте-карте CBOR. Она определяет структурированный способ представления ключей, охватывающий различные типы ключей и их соответствующие параметры, такие как модуль и экспонента RSA или координаты открытого ключа эллиптической кривой. Этот стандартизированный формат позволяет сериализовать и десериализовать ключи последовательным образом, независимо от их базового криптографического алгоритма, в дополнение к идентификатору алгоритма шифрования, который мы обсуждали выше.
Используя CBOR и формат COSE Key, WebAuthn может обеспечивать широкий спектр криптографических операций, сохраняя при этом полезную нагрузку как можно меньшей и оставаясь адаптируемым к будущим обновлениям в криптографических технологиях. Этот выбор соответствует целям WebAuthn по предоставлению безопасного, эффективного и перспективного протокола для веб-аутентификации.
Когда дело доходит до декодирования attestationObject в WebAuthn, разработчики сталкиваются с важным решением: разработать собственное решение или использовать устоявшуюся библиотеку. Сложность и критическую важность этого процесса невозможно переоценить. Ручная реализация декодирования Base64URL и CBOR, хотя и технически возможна, несет в себе риск мелких ошибок, которые могут поставить под угрозу целостность процесса аутентификации.
Для обеспечения криптографической проверки подписи, а также точности всех других шагов валидации, настоятельно рекомендуется использовать хорошо протестированную и широко распространенную библиотеку WebAuthn. Такие библиотеки созданы с учетом экспертных знаний в области шифрования для обработки деталей декодирования и проверки attestationObject, включая:
Полагаясь на авторитетную библиотеку, разработчики не только экономят время и ресурсы, но и обретают уверенность. Открытый ключ, после его извлечения и проверки с помощью этих надежных инструментов, можно безопасно хранить в базе данных, готовый к использованию для безопасных сеансов аутентификации. Такой подход обеспечивает соблюдение спецификаций протокола и поддерживает уровень безопасности, ожидаемый в реализациях WebAuthn. Для простоты мы будем использовать SimpleWebauthn Debugger, который возвращает полностью декодированную версию, где поля CBOR преобразованы в развернутый JSON:
{ "id": "aWMmE4BE9ZzvRKd9rQhdy6ubrlB3COrTRFQANe6ydHg", "rawId": "aWMmE4BE9ZzvRKd9rQhdy6ubrlB3COrTRFQANe6ydHg", "type": "public-key", "response": { "attestationObject": { "fmt": "packed", "attStmt": { "alg": "ES256 (-7)", "sig": "MEUCIQCL1TQk5WF1-1ijn3raO1sgUBOrr16b5zcttpKqzMbP0AIgJmpxampa7w_9X3tAm9n-tJY7YeJ54HJJCifCT7amYjs" }, "authData": { "rpIdHash": "t8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADc", "flags": { "userPresent": true, "userVerified": true, "backupEligible": false, "backupStatus": false, "attestedData": true, "extensionData": false }, "counter": 0, "aaguid": "adce0002-35bc-c60a-648b-0b25f1f05503", "credentialID": "aWMmE4BE9ZzvRKd9rQhdy6ubrlB3COrTRFQANe6ydHg", "credentialPublicKey": "pQECAyYgASFYIDP4onRKVHXlhwbmWF4V6jmfsuVuSXchGm6xoceSBGtjIlgg3bxZIbKyE7qPczMZmS0jCGBf9cgajs77EZL-gNAjO0c", "parsedCredentialPublicKey": { "keyType": "EC2 (2)", "algorithm": "ES256 (-7)", "curve": 1, "x": "M_iidEpUdeWHBuZYXhXqOZ-y5W5JdyEabrGhx5IEa2M", "y": "3bxZIbKyE7qPczMZmS0jCGBf9cgajs77EZL-gNAjO0c" } } }, "clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://opotonniee.github.io", "crossOrigin": false }, "transports": ["internal"], "publicKeyAlgorithm": -7 }, "authenticatorAttachment": "platform", "clientExtensionResults": {} }
Библиотека SimpleWebauthn используется для декодирования всего attestationObject. Как мы видим, вся информация теперь читаема. Вся криптографическая информация является частью credentialPublicKey
, который, в свою очередь, является частью authData
. Библиотека развернула его в parsedCredentialPublicKey
. В спецификации есть несколько примеров того, как выглядит формат COSE Key.
{ "parsedCredentialPublicKey": { "keyType": "EC2 (2)", "algorithm": "ES256 (-7)", "curve": 1, "x": "M_iidEpUdeWHBuZYXhXqOZ-y5W5JdyEabrGhx5IEa2M", "y": "3bxZIbKyE7qPczMZmS0jCGBf9cgajs77EZL-gNAjO0c" } }
Этот вывод демонстрирует все криптографические элементы credentialPublicKey, аккуратно разобранные в удобочитаемую форму. Этот конкретный экземпляр показывает ключ EC2 для алгоритма ES256, на что указывает параметр алгоритма и наличие координат x и y.
В отличие от этого, вывод системы Windows 10 выглядит следующим образом:
{ "parsedCredentialPublicKey": { "keyType": "RSA (3)", "algorithm": "RS256 (-257)", "modulus": "mzRVwAL6jbccWT4NQ3rQWEYLkTKkEBeHPPUn0CXT8VwvvGE_IaXDeP9ZzcA7WoX3z6E0l_L-XZmRuKc9cO7BkiYyz3jOg_pNFTz5Ap9a1f_9H0m4mpL-30WHQZi1skB5f6zt8sO8q7rBYH0mRmH8LdCrhJRhVjB_UxbcAbYlpV98M5g-5OBs_boNXtMhMoyp-IOeGChp07wwSLVOH3hKMoxlU27hZ3QvK2LRWosNKhXSHcU9IOC0XOyhlZ5rtPX2ae3KsSE1H2rEJVcMaVMRAg8yx2SRM98pDvf829smrnJPdMBojKftne2j8o84i_xyDJ_jARlyVj0kxR37u0AVQQ", "exponent": 65537 } }
Здесь ID алгоритма равен -257, что соответствует RS256, и мы можем заметить, что атрибуты, характеризующие этот открытый ключ, значительно отличаются от атрибутов ключа ECDSA. Формат COSE Key позволяет указывать уникальные атрибуты для каждого типа:
Атрибут/Тип | ECDSA | RSA |
---|---|---|
Тип ключа | EC2 (Эллиптическая кривая 2) | RSA (3) |
Алгоритм | ES256 (-7) | RS256 (-257) |
Уникальные атрибуты | Кривая Координата X Координата Y | Модуль Экспонента |
Кроме того, модуль RSA значительно длиннее, чем координаты эллиптической кривой, используемые в ключе ES256, что подчеркивает наше предыдущее обсуждение различий в размерах ключей и присущих им требований различных криптографических алгоритмов.
Рассмотрев основы криптографии с открытым ключом и поняв, как она встроена в стандарт WebAuthn / FIDO2, у нас есть две основные рекомендации для доверяющих сторон:
Крайне важно не изобретать велосипед: используйте коллективные знания, заложенные в устоявшихся библиотеках. Собственная реализация рискует внести ошибки и уязвимости в безопасности, которые могут подорвать эффективность аутентификации и общую безопасность системы.
В этой статье мы рассмотрели основы криптографии с открытым ключом, чтобы ответить на три первоначальных ключевых вопроса:
Кроме того, мы подчеркнули независимость протокола WebAuthn от конкретных алгоритмов шифрования, что значительно повышает его гибкость и обеспечивает защиту от будущих криптографических методов. Мы надеемся, что эта статья также поможет другим разработчикам при отладке и понимании концепций / проблем, связанных с криптографией с открытым ключом в WebAuthn.
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.
Related Articles
Table of Contents