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実装。

リポジトリを見る
9601036628日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

noble-curves

監査済みで最小限の楕円曲線暗号のJS実装。

  • 🔒 独立したセキュリティ企業による監査済み
  • 🪶 最小限: 15KB (gzip圧縮時) のsecp256k1、未使用コードはビルドから除外される
  • 🏎 高速: JSエンジンの特性に合わせて手作業で最適化
  • 🔍 信頼性: クロスライブラリ / wycheproofテストで正確性を保証
  • ➰ Weierstrass曲線、Edwards曲線; ECDSA、EdDSA、Schnorr、BLS署名
  • ✍️ ECDH、hash-to-curve、OPRF、FROST、Poseidonハッシュ、FFT
  • 🔖 ed25519、ed448における否認防止 (SUF-CMA、SBS) とコンセンサス親和性 (ZIP215)
  • 🥈 ネイティブWebCrypto上で同一APIを持つラッパー

各曲線には5kbの姉妹プロジェクトがあります secp256k1 と ed25519。 これらは攻撃対象領域が小さいですが、機能は少なくなっています。

このライブラリは noble cryptographyに属します

noble cryptography — 高セキュリティで監査が容易な、自己完結型の暗号ライブラリとツールのセット。

  • 依存関係はゼロまたは最小限
  • 非常に読みやすいTypeScript / JSコード
  • PGP署名されたリリースと透過的なNPMビルド
  • すべてのライブラリ: ciphers、 curves、 hashes、 post-quantum、 5kb secp256k1 / ed25519
  • WASM版: awasm-noble
  • 読み物リソース、ドキュメント、nobleで構築されたアプリについては ホームページをチェックしてください

使用方法

npm install @noble/curves

deno add jsr:@noble/curves

すべての主要なプラットフォームとランタイムをサポートしています。 React Nativeでは、getRandomValuesのpolyfillが必要になる場合があります。 スタンドアロンファイル 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署名](#ecdsa-eddsa-schnorr-signatures)
- [ECDH: Diffie-Hellman共有秘密](#ecdh-diffie-hellman-shared-secrets)
- [webcrypto: フレンドリーなラッパー](#webcrypto-friendly-wrapper)
- [BLS署名、bls12-381、bn254別名alt\_bn128](#bls-signatures-bls12-381-bn254-aka-alt_bn128)
- [hash-to-curve: 曲線点へのハッシュ](#hash-to-curve-hashing-to-curve-points)
- [OPRF](#oprfs) | [FROST閾値署名](#frost-threshold-signatures)
- [poseidon: Poseidonハッシュ](#poseidon-poseidon-hash) | [fft: 高速フーリエ変換](#fft-fast-fourier-transform) | [utils](#utils-byte-shuffling-conversion)
- 内部: [点演算](#elliptic-curve-point-math) | [modular](#modular-modular-arithmetics--finite-fields) | [カスタム曲線](#weierstrass-custom-weierstrass-curve--ecdsa)
- [仕様](#specs)
- [セキュリティ](#security) | [速度](#speed) | [アップグレード](#upgrading) | [コントリビューションとテスト](#contributing--testing) | [ライセンス](#license)

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

メッセージは常に最初にハッシュ化されます: prehashed signingを参照してください。 ECDSAは決定論的kを使用し、EdDSAはRFC 8032に準拠し、Schnorr(secp256k1のみ)はBIP 340に準拠します: Specsを参照してください。

MuSig2署名スキームとsecp256k1用のBIP324 ElligatorSwiftマッピングは 別のパッケージで利用可能です。

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() はまずメッセージに曲線の組み込みハッシュを適用します: secp256k1 には sha256、p521 には sha512。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) はランダムな公開鍵に復元されますが、この特定の偽造された h につながる m を見つけることは現実的ではありません。

#### ノイズを用いたヘッジ付きECDSA```js
import { secp256k1 } from '@noble/curves/secp256k1.js';
const { secretKey } = secp256k1.keygen();
const msg = new TextEncoder().encode('hello noble');
// extraEntropy: false - default, hedging disabled
const sigNoisy = secp256k1.sign(msg, secretKey);
// extraEntropy: true - fetch 32 random bytes from CSPRNG
const sigNoisyA = secp256k1.sign(msg, secretKey, { extraEntropy: true });
// extraEntropy: bytes - specific extra entropy
const ent = Uint8Array.from([0xca, 0xfe, 0x01, 0x23]);
const sigNoisy2 = secp256k1.sign(msg, secretKey, { extraEntropy: ent });

デフォルトでは、ECDSA署名は決定論的です(RFC 6979)。純粋に決定論的な署名はフォールト攻撃に対して脆弱であるため、BIP340 schnorrのような新しいスキームでは、署名生成にランダム性を取り入れています。これはヘッジングとも呼ばれます。extraEntropyはヘッジモードを有効にします。詳細については、Deterministic signatures are not your friendsをご覧ください。

コンセンサスフレンドリー性 vs 電子投票```js

import { ed25519 } from '@noble/curves/ed25519.js'; const { secretKey, publicKey } = ed25519.keygen(); const msg = new TextEncoder().encode('hello noble'); const sig = ed25519.sign(msg, secretKey); // zip215: true const isValid = ed25519.verify(sig, msg, publicKey); // SBS / e-voting / RFC8032 / FIPS 186-5 const isValidRfc = ed25519.verify(sig, msg, publicKey, { zip215: false });

* `zip215: true`(デフォルト)は、[ZIP215](https://zips.z.cash/zip-0215) で定義された、より寛容で[コンセンサスに優しい](https://hdevalence.ca/blog/2020-10-04-its-25519am)検証ルールを使用します。
* `zip215: false` は厳格な RFC 8032 / FIPS 186-5 検証を強制し、SBS ベースの
  否認防止を追加します。これは契約署名、電子投票、ブロックチェーンに有用です。

どちらのモードも SUF-CMA(選択メッセージ攻撃に対する強存在的偽造不可能性)を備えています。
他のほとんどのライブラリは SUF-CMA も SBS も備えていません。
詳細は [Taming the many EdDSAs](https://eprint.iacr.org/2020/1244) を参照してください。

### ECDH: Diffie-Hellman 共有秘密```js
import { x25519 } from '@noble/curves/ed25519.js';
const alice = x25519.keygen();
const bob = x25519.keygen();
const sharedKey = x25519.getSharedSecret(alice.secretKey, bob.publicKey);
// Same API: secp256k1, p256, p384, p521, x448
ツールをダウンロード