Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
noble-curves — Implementación JS auditada y minimalista de criptografía de curva elíptica. | Kitploit
Herramientas/GitHubGitHub/paulmillr/noble-curves
Herramientas de Cifrado/DescifradoAnálisis de HashCriptografíaUtilidades y FrameworksAprendizaje y Educación
GitHubpaulmillr/noble-curves

noble-curves

Implementación JS auditada y minimalista de criptografía de curva elíptica.

Ver Repositorio
96010366hace 27 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

noble-curves

Implementación JS auditada y minimalista de criptografía de curva elíptica.

  • 🔒 Auditada por firmas de seguridad independientes
  • 🪶 Minimalista: 15KB (comprimido con gzip) secp256k1, el código no utilizado se excluye de tus compilaciones
  • 🏎 Rápida: optimizada manualmente para las particularidades de los motores JS
  • 🔍 Fiable: pruebas cruzadas entre bibliotecas / wycheproof garantizan la corrección
  • ➰ Curvas de Weierstrass, Edwards; firmas ECDSA, EdDSA, Schnorr, BLS
  • ✍️ ECDH, hash-to-curve, OPRF, FROST, hash Poseidon, FFT
  • 🔖 No repudio (SUF-CMA, SBS) y compatibilidad con consenso (ZIP215) en ed25519, ed448
  • 🥈 Wrapper con API idéntica sobre WebCrypto nativo

Las curvas tienen proyectos hermanos de 5kb secp256k1 y ed25519. Tienen una superficie de ataque menor, pero menos características.

Esta biblioteca pertenece a la criptografía noble

noble cryptography — conjunto de bibliotecas y herramientas criptográficas contenidas, de alta seguridad y fácilmente auditables.

  • Dependencias nulas o mínimas
  • Código TypeScript / JS altamente legible
  • Lanzamientos firmados con PGP y compilaciones NPM transparentes
  • Todas las bibliotecas: ciphers, curves, hashes, post-quantum, 5kb secp256k1 / ed25519
  • Versión WASM: awasm-noble
  • Consulta la página principal para recursos de lectura, documentación y aplicaciones construidas con noble

Uso

npm install @noble/curves

deno add jsr:@noble/curves

Soportamos todas las plataformas y entornos de ejecución principales. Para React Native, es posible que necesites un polyfill para getRandomValues. También está disponible un archivo independiente noble-curves.js.```js // import * from '@noble/curves'; // Error: use sub-imports, to ensure small app size import { secp256k1 } from '@noble/curves/secp256k1.js'; const { secretKey, publicKey } = secp256k1.keygen(); const msg = new TextEncoder().encode('hello noble'); const sig = secp256k1.sign(msg, secretKey); const isValid = secp256k1.verify(sig, msg, publicKey);

- [Firmas ECDSA, EdDSA, Schnorr](#ecdsa-eddsa-schnorr-signatures)
- [ECDH: secretos compartidos Diffie-Hellman](#ecdh-diffie-hellman-shared-secrets)
- [webcrypto: envoltorio amigable](#webcrypto-friendly-wrapper)
- [Firmas BLS, bls12-381, bn254 aka alt\_bn128](#bls-signatures-bls12-381-bn254-aka-alt_bn128)
- [hash-to-curve: hashing a puntos de curva](#hash-to-curve-hashing-to-curve-points)
- [OPRFs](#oprfs) | [Firmas de umbral FROST](#frost-threshold-signatures)
- [poseidon: hash Poseidon](#poseidon-poseidon-hash) | [fft: Transformada Rápida de Fourier](#fft-fast-fourier-transform) | [utils](#utils-byte-shuffling-conversion)
- Internos: [Aritmética de puntos](#elliptic-curve-point-math) | [modular](#modular-modular-arithmetics--finite-fields) | [curvas personalizadas](#weierstrass-custom-weierstrass-curve--ecdsa)
- [Especificaciones](#specs)
- [Seguridad](#security) | [Velocidad](#speed) | [Actualización](#upgrading) | [Contribución y pruebas](#contributing--testing) | [Licencia](#license)

### Firmas ECDSA, EdDSA, Schnorr

#### secp256k1, p256, p384, p521, ed25519, ed448, brainpool```js
import { secp256k1, schnorr } from '@noble/curves/secp256k1.js';
import { p256, p384, p521 } from '@noble/curves/nist.js';
import { ed25519 } from '@noble/curves/ed25519.js';
import { ed448 } from '@noble/curves/ed448.js';
import { brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 } from '@noble/curves/misc.js';
for (const curve of [
  secp256k1, schnorr,
  p256, p384, p521,
  ed25519, ed448,
  brainpoolP256r1, brainpoolP384r1, brainpoolP512r1
]) {
  const { secretKey, publicKey } = curve.keygen();
  const msg = new TextEncoder().encode('hello noble');
  const sig = curve.sign(msg, secretKey);
  const isValid = curve.verify(sig, msg, publicKey);
  console.log(curve, secretKey, publicKey, sig, isValid);
}

// Specific private key
import { hexToBytes } from '@noble/curves/utils.js';
const secret2 = hexToBytes('46c930bc7bb4db7f55da20798697421b98c4175a52c630294d75a84b9c126236');
const pub2 = secp256k1.getPublicKey(secret2);

Los mensajes siempre se hashean primero: véase firma prehasheada. ECDSA utiliza k determinista, EdDSA sigue RFC 8032, Schnorr (solo secp256k1) sigue BIP 340: véase Especificaciones.

El esquema de firma MuSig2 y el mapeo ElligatorSwift de BIP324 para secp256k1 están disponibles en un paquete separado.

ristretto255, decaf448```ts

import { ristretto255, ristretto255_hasher, ristretto255_oprf } from '@noble/curves/ed25519.js'; import { decaf448, decaf448_hasher, decaf448_oprf } from '@noble/curves/ed448.js';

console.log(ristretto255.Point, decaf448.Point);

Consulta el [RFC 9496](https://www.rfc-editor.org/rfc/rfc9496) para obtener más información sobre ristretto255 y decaf448.
Consulta la documentación separada para [Point](#elliptic-curve-point-math), [hasher](#hash-to-curve-hashing-to-curve-points) y [oprf](#oprfs).

#### Firma prehashed```js
import { secp256k1 } from '@noble/curves/secp256k1.js';
import { keccak_256 } from '@noble/hashes/sha3.js';
const { secretKey } = secp256k1.keygen();
const msg = new TextEncoder().encode('hello noble');
// prehash: true (default) - hash using secp256k1.hash (sha256)
const sig = secp256k1.sign(msg, secretKey);
// prehash: false - hash using custom hash
const sigKeccak = secp256k1.sign(keccak_256(msg), secretKey, { prehash: false });

Por defecto (prehash: true), sign() y verify() aplican primero el hash integrado de la curva al mensaje: sha256 para secp256k1, sha512 para p521. prehash: false permite usar un hash personalizado (p. ej. secp256k1 + keccak_256). En noble-curves v1, prehash: false era el valor predeterminado.

Recuperación de claves públicas a partir de firmas```js

import { secp256k1 } from '@noble/curves/secp256k1.js'; const { secretKey, publicKey } = secp256k1.keygen(); const msg = new TextEncoder().encode('hello noble'); const sigRec = secp256k1.sign(msg, secretKey, { format: 'recovered' }); const publicKey_ = secp256k1.recoverPublicKey(sigRec, msg); // == publicKey

// recovered sig is compact sig with an extra byte const sigNoRec = secp256k1.sign(msg, secretKey, { format: 'compact' }); // sigNoRec == sigRec.slice(1)

// Signature instance const sigInstance = secp256k1.Signature.fromBytes(sigRec, 'recovered');

La recuperación de clave pública solo es compatible con ECDSA. Es una operación matemática simple:
no hay garantías de que la firma se haya realizado realmente. Una (r, s, h) falsificada se recupera en
una clave pública aleatoria, pero no es factible encontrar m que conduzca a esta h falsificada específica.
Descargar herramienta