Anunciamos nuestra biblioteca Rust de función aleatoria verificable (VRF)

Una biblioteca de funciones aleatorias verificables (VRF) rápida y extensible, que actualmente admite algunas de las suites de cifrado elíptico más utilizadas.

Recientemente, Gorka Irazoqui Apecechea y yo publicamos con orgullo una caja VRF como un proyecto de código abierto bajo la licencia MIT.

La biblioteca es una rápido, flexible y propósito general Biblioteca verificable de funciones aleatorias (VRF) escrita en Rust, que sigue el borrador estándar del IETF escrito por Sharon Goldberg, Moni Naor, Dimitris Papadopoulos, Leonid Reyzin y Jan Včelák.

Presentamos la librería vrf-rs

RFC6979 para la función de generación de nonce. Actualmente, las suites de cifrado admitidas utilizan el SHA256 Algoritmo hash y las siguientes curvas elípticas: secp256k1, secp256r1 y sect163k1.

La biblioteca fue escrita con la idea de ser extensible para que se puedan agregar fácilmente conjuntos de cifrado y algoritmos mediante la implementación del rasgo VRF.

RFC6979 para la función de generación de nonce. Actualmente, las suites de cifrado admitidas utilizan el SHA256 Algoritmo hash y las siguientes curvas elípticas: secp256k1, secp256r1 y sect163k1.use vrf :: openssl :: {CipherSuite, ECVRF};
use vrf :: VRF; fn main () {
// Inicialización del contexto VRF proporcionando una curva
sea ​​mut vrf = ECVRF :: from_suite (CipherSuite :: SECP256K1_SHA256_TAI) .unwrap ();
// Entradas: clave secreta, clave pública (derivada) y mensaje
vamos secret_key =
hex :: decodificar ("c9afa9d845ba75166b5c215767b1d6934e50c3db36e89b127b8a622b120f6721"). unwrap ();
deje public_key = vrf.derive_public_key (& secret_key) .unwrap ();
dejar mensaje: & (u8) = b "muestra";

// VRF prueba y hash de salida
vamos a pi = vrf.prove (& secret_key, & message) .unwrap ();
let hash = vrf.proof_to_hash (& pi) .unwrap ();

// Verificación de prueba de VRF (devuelve salida de hash de VRF)
deje que beta = vrf.verify (& public_key, & pi, & message);
}

Un ejemplo completo se puede encontrar en examples / basic.rs.

¿Qué es un VRF?

Un VRF es una primitiva criptográfica que proporciona un función pseudoaleatoria junto con un prueba públicamente verificable de la corrección de sus salidas. Además, el La salida de hash VRF es determinista, en el sentido de que siempre produce la misma salida dado el mismo par de entradas. VRF fue introducido por primera vez por Micali, Rabin y Vadhan en 1999.

Puede entenderse mejor como la versión de clave pública de un hash criptográfico con clave. Solo el titular de la clave secreta VRF puede calcular un hash válido (es decir, un valor pseudoaleatorio), mientras que cualquier persona con el público puede verificar su corrección.

¿Por qué VRFs?

Los VRF se utilizan ampliamente en varios esquemas, protocolos y sistemas criptográficos. Al igual que Algorand, el Protocolo de red Witnet utiliza VRFs para realizar clasificaciones criptográficas secretas que se utilizan para el líder y selecciones de comités como parte del protocolo de consenso subyacente. La clasificación criptográfica permite que la cadena de bloques de Witnet sea segura a la vez que es eficiente y escalable.