Spec-Zone.ru › Web APIs

SubtleCrypto: метод verify()

Базовая широко доступная *

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

* Некоторые части этой функции могут иметь разную степень поддержки.

  • Узнать больше
  • Посмотреть полную совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Метод verify() интерфейса SubtleCrypto проверяет цифровую подпись.

Он принимает в качестве аргументов ключ для проверки подписи, параметры, зависящие от алгоритма, саму подпись и исходные подписанные данные. Он возвращает Promise, который будет выполнен с булевым значением, указывающим, является ли подпись действительной.

Синтаксис

verify(algorithm, key, signature, data)

Параметры

algorithm

Строка или объект, определяющий алгоритм, который необходимо использовать, и для некоторых алгоритмов дополнительные параметры. Значения дополнительных параметров должны соответствовать значениям, переданным в соответствующий вызов sign().

  • Для использования RSASSA-PKCS1-v1_5, передайте строку "RSASSA-PKCS1-v1_5" или объект вида { "name": "RSASSA-PKCS1-v1_5" }.
  • Для использования RSA-PSS, передайте объект RsaPssParams.
  • Для использования ECDSA, передайте объект EcdsaParams.
  • Для использования HMAC, передайте строку "HMAC" или объект вида { "name": "HMAC" }.
  • Для использования Ed25519, передайте объект вида { "name": "Ed25519" }.
key

CryptoKey содержащий ключ, который будет использоваться для проверки подписи. Это секретный ключ для симметричного алгоритма и открытый ключ для криптосистемы с открытым ключом.

signature

ArrayBuffer содержащий подпись для проверки.

data

ArrayBuffer содержащий данные, подпись которых должна быть проверена.

Возвращаемое значение

Promise, который выполняется с булевым значением: true если подпись действительна, false в противном случае.

Исключения

Обещание отклоняется, когда возникает следующая ошибка:

InvalidAccessError DOMException

Возникает, когда ключ шифрования не является ключом для запрошенного алгоритма проверки или когда используется алгоритм, который неизвестен или не подходит для операции проверки.

Поддерживаемые алгоритмы

Метод verify() поддерживает те же алгоритмы, что и метод sign().

Примеры

Примечание: Вы можете попробовать рабочие примеры на GitHub.

RSASSA-PKCS1-v1_5

Этот код использует открытый ключ для проверки подписи. Полный код см. на GitHub.

/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
  const messageBox = document.querySelector(".rsassa-pkcs1 #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(publicKey) {
  const signatureValue = document.querySelector(
    ".rsassa-pkcs1 .signature-value",
  );
  signatureValue.classList.remove("valid", "invalid");

  let encoded = getMessageEncoding();
  let result = await window.crypto.subtle.verify(
    "RSASSA-PKCS1-v1_5",
    publicKey,
    signature,
    encoded,
  );

  signatureValue.classList.add(result ? "valid" : "invalid");
}

RSA-PSS

Этот код использует открытый ключ для проверки подписи. Полный код см. на GitHub.

/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-pss #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(publicKey) {
  const signatureValue = document.querySelector(".rsa-pss .signature-value");
  signatureValue.classList.remove("valid", "invalid");

  let encoded = getMessageEncoding();
  let result = await window.crypto.subtle.verify(
    {
      name: "RSA-PSS",
      saltLength: 32,
    },
    publicKey,
    signature,
    encoded,
  );

  signatureValue.classList.add(result ? "valid" : "invalid");
}

ECDSA

Этот код использует открытый ключ для проверки подписи. Полный код см. на GitHub.

/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
  const messageBox = document.querySelector(".ecdsa #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(publicKey) {
  const signatureValue = document.querySelector(".ecdsa .signature-value");
  signatureValue.classList.remove("valid", "invalid");

  let encoded = getMessageEncoding();
  let result = await window.crypto.subtle.verify(
    {
      name: "ECDSA",
      hash: { name: "SHA-384" },
    },
    publicKey,
    signature,
    encoded,
  );

  signatureValue.classList.add(result ? "valid" : "invalid");
}

HMAC

Этот код использует секретный ключ для проверки подписи. Полный код см. на GitHub.

/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
  const messageBox = document.querySelector(".hmac #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(key) {
  const signatureValue = document.querySelector(".hmac .signature-value");
  signatureValue.classList.remove("valid", "invalid");

  let encoded = getMessageEncoding();
  let result = await window.crypto.subtle.verify(
    "HMAC",
    key,
    signature,
    encoded,
  );

  signatureValue.classList.add(result ? "valid" : "invalid");
}

Ed25519

В живом примере Ed25519 в SubtleCrypto.sign() показано, как сгенерировать открытый и закрытый ключи, использовать закрытый ключ для подписи данных, а затем использовать открытый ключ для проверки подписи.

Ниже приведён фрагмент, относящийся к проверке подписи с помощью открытого ключа и закодированных данных:

// Verify the signature using the public key
const verifyResult = await crypto.subtle.verify(
  {
    name: "Ed25519",
  },
  publicKey,
  signature,
  encodedData,
);
// True if the signature is valid.

Спецификации

Спецификация
API криптографии веб-браузера
# SubtleCrypto-method-verify

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
verify 37 79
12–79Не поддерживается: RSA-PSS, ECDSA.
34 24 7 37 34 24 7 3.0 37
ed25519 113 113 129 99 17 113 129 Нет 17 Нет Нет

См. также

  • SubtleCrypto.sign().
  • RFC 3447 определяет RSASSA-PKCS1-v1_5.
  • RFC 3447 определяет RSA-PSS.
  • FIPS-186 определяет ECDSA.
  • FIPS 198-1 определяет HMAC.

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/verify

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API