Método Node.js ecdh.computeSecret()

El método ecdh.computeSecret() es una interfaz de programación de aplicaciones incorporada de clase ECDH dentro del módulo criptográfico que se usa para crear el secreto compartido usando la clave pública de la otra parte. La codificación de la clave pública de entrada y la clave secreta de salida se puede especificar utilizando los parámetros respectivos.

El error ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY se produce cuando la clave pública se encuentra fuera de la curva elíptica. 

Sintaxis:

ecdh.computeSecret( otherPublicKey, inputEncoding, outputEncoding )

Parámetros: este método acepta tres parámetros, como se mencionó anteriormente y se describe a continuación:

  • otherPublicKey: Es la clave pública de la otra parte a partir de la cual se genera el secreto compartido.
  • inputEncoding: este es un valor de string que especifica la codificación de la clave pública de la otra parte. Cuando no se especifica este parámetro, se espera que la clave sea un Buffer TypedArray o DataView.
  • outputEncoding: este es un valor de string que especifica la codificación del secreto compartido que se generará.

Valor devuelto: Devuelve la clave secreta compartida de Elliptic Curve DiffieHellman en la codificación especificada. Cuando no se proporciona la codificación, se devuelve como un búfer; de lo contrario, se devuelve una string.

Los siguientes ejemplos demuestran el método:

Ejemplo 1: en este ejemplo, los secretos compartidos de ambos usuarios se crean utilizando las claves de ambas partes y luego se comparan para ver si son iguales.

Javascript

const crypto = require('crypto');
  
const geekA = crypto.createECDH('secp521r1');
  
// Generate keys for geekA
const geekAkey = geekA.generateKeys('base64');
  
const geekB = crypto.createECDH('secp521r1');
  
// Generate keys for geekB
const geekBkey = geekB.generateKeys('base64');
  
// Compute the secrets of both the geeks in base64
// based on the other party's key
let secretA = geekA.computeSecret(geekBkey, 'base64', 'base64');
let secretB = geekB.computeSecret(geekAkey, 'base64', 'base64');
  
console.log("Secret of A is:", secretA);
console.log("Secret of B is:", secretB);
  
// Check if the secrets match
console.log(secretA == secretB ?
    "The secrets match!" :
    "The secrets do not match") 

Producción:

Secret of A is: Ac7p1CjFXyTrdcVxx0HIs0Jqjr3fGb7sUTxfgdUQ+xgXmpJgWKS9SECkFf3ehly+xyvE2MtWFcAxF2gq9F7k7tT5
Secret of B is: Ac7p1CjFXyTrdcVxx0HIs0Jqjr3fGb7sUTxfgdUQ+xgXmpJgWKS9SECkFf3ehly+xyvE2MtWFcAxF2gq9F7k7tT5
The secrets match!

Ejemplo 2: en este ejemplo, el parámetro inputEncoding se pasa como nulo ya que el método generateKeys() no codifica las claves al generarlas.

Javascript

const crypto = require('crypto');
  
const geekOne = crypto.createECDH('secp521r1');
  
// Generate keys for geekOne
const geekOneKey = geekOne.generateKeys();
  
const geekTwo = crypto.createECDH('secp521r1');
  
// Generate keys for geekTwo
const geekTwoKey = geekTwo.generateKeys();
  
// Compute the secrets of both the geeks
// The input 
let secretGeekOne = 
  geekOne.computeSecret(geekTwoKey, null, 'base64');
let secretGeekTwo = 
  geekTwo.computeSecret(geekOneKey, null, 'base64');
  
console.log("Secret of Geek One is:", secretGeekOne);
console.log("Secret of Geek Two is:", secretGeekTwo);

Producción:

Secret of Geek One is: ACc+SKe9XQMw5quzSEKs0Os+OhGKPRqHIwkW13+lxhs2HNwUEvbZdCEOE/PCzdNKk3v5zqdWSHO0kfRy1qBM8Kc6
Secret of Geek Two is: ACc+SKe9XQMw5quzSEKs0Os+OhGKPRqHIwkW13+lxhs2HNwUEvbZdCEOE/PCzdNKk3v5zqdWSHO0kfRy1qBM8Kc6

Referencia: https://nodejs.org/api/crypto.html#crypto_ecdh_computesecret_otherpublickey_inputencoding_outputencoding

Publicación traducida automáticamente

Artículo escrito por sayantanm19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *