Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
noble-curves — Проверенная и минималистичная реализация эллиптической криптографии на JS. | Kitploit
Инструменты/GitHubGitHub/paulmillr/noble-curves
Инструменты шифрования/дешифрованияАнализ хэшейКриптографияУтилиты и фреймворкиОбучение и Образование
GitHubpaulmillr/noble-curves

noble-curves

Проверенная и минималистичная реализация эллиптической криптографии на JS.

Репозиторий
9601036627 дней назадПроверено Kitploit

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

noble-curves

Проверенная аудитом и минималистичная реализация эллиптической криптографии на JS.

  • 🔒 Проверена аудитом независимыми фирмами по безопасности
  • 🪶 Минималистична: 15КБ (gzip) secp256k1, неиспользуемый код исключается из ваших сборок
  • 🏎 Быстрая: ручная оптимизация под особенности JS-движков
  • 🔍 Надёжна: кросс-библиотечные / wycheproof тесты гарантируют корректность
  • ➰ Кривые Вейерштрасса, Эдвардса; подписи ECDSA, EdDSA, Schnorr, BLS
  • ✍️ ECDH, hash-to-curve, OPRF, FROST, хеш Poseidon, FFT
  • 🔖 Неотказуемость (SUF-CMA, SBS) и совместимость с консенсусом (ZIP215) в ed25519, ed448
  • 🥈 Обёртка с идентичным API поверх нативного WebCrypto

У кривых есть 5кб родственные проекты secp256k1 и ed25519. У них меньше поверхность атаки, но и меньше возможностей.

Эта библиотека принадлежит noble криптографии

noble криптография — высокобезопасный, легко проверяемый аудитом набор изолированных криптографических библиотек и инструментов.

  • Нулевые или минимальные зависимости
  • Высокочитаемый код на TypeScript / JS
  • Релизы с PGP-подписью и прозрачные сборки NPM
  • Все библиотеки: ciphers, curves, hashes, post-quantum, 5кб secp256k1 / ed25519
  • WASM-версия: awasm-noble
  • Посетите домашнюю страницу для материалов для чтения, документации и приложений, созданных с помощью noble

Использование

npm install @noble/curves

deno add jsr:@noble/curves

Мы поддерживаем все основные платформы и среды выполнения. Для React Native может потребоваться полифилл для getRandomValues. Также доступен автономный файл 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);

- [ECDSA, EdDSA, Schnorr signatures](#ecdsa-eddsa-schnorr-signatures)
- [ECDH: Diffie-Hellman shared secrets](#ecdh-diffie-hellman-shared-secrets)
- [webcrypto: friendly wrapper](#webcrypto-friendly-wrapper)
- [BLS signatures, bls12-381, bn254 aka alt\_bn128](#bls-signatures-bls12-381-bn254-aka-alt_bn128)
- [hash-to-curve: hashing to curve points](#hash-to-curve-hashing-to-curve-points)
- [OPRFs](#oprfs) | [FROST threshold signatures](#frost-threshold-signatures)
- [poseidon: Poseidon hash](#poseidon-poseidon-hash) | [fft: Fast Fourier Transform](#fft-fast-fourier-transform) | [utils](#utils-byte-shuffling-conversion)
- Internals: [Point math](#elliptic-curve-point-math) | [modular](#modular-modular-arithmetics--finite-fields) | [custom curves](#weierstrass-custom-weierstrass-curve--ecdsa)
- [Specs](#specs)
- [Security](#security) | [Speed](#speed) | [Upgrading](#upgrading) | [Contributing & testing](#contributing--testing) | [License](#license)

### ECDSA, EdDSA, Schnorr signatures

#### 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);

Сообщения всегда сначала хешируются: см. подписывание с предварительным хешированием. ECDSA использует детерминированный k, EdDSA следует RFC 8032, Schnorr (только secp256k1) следует BIP 340: см. Спецификации.

Схема подписи MuSig2 и отображение BIP324 ElligatorSwift для secp256k1 доступны в отдельном пакете.

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);

Ознакомьтесь с [RFC 9496](https://www.rfc-editor.org/rfc/rfc9496) для получения дополнительной информации о ristretto255 и decaf448.
Ознакомьтесь с отдельной документацией для [Point](#elliptic-curve-point-math), [hasher](#hash-to-curve-hashing-to-curve-points) и [oprf](#oprfs).

#### Предварительно хешированная подпись```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 });

По умолчанию (prehash: true) sign() и verify() сначала применяют встроенную хеш-функцию кривой к сообщению: sha256 для secp256k1, sha512 для p521. prehash: false позволяет использовать пользовательскую хеш-функцию (например, secp256k1 + keccak_256). В noble-curves v1 значением по умолчанию было prehash: false.

Восстановление открытых ключей из подписей```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');

Восстановление открытого ключа поддерживается только с ECDSA. Это простая математическая операция:
нет никаких гарантий, что подпись действительно была создана. Поддельная (r, s, h) восстанавливается в
случайный открытый ключ, но найти m, которое привело бы к этому конкретному поддельному h, невозможно.
Скачать инструмент