A developer-friendly Elliptic Curve Cryptography (ECC) playground for generating keys, signing and verifying messages (ECDSA), and securely deriving shared secrets (ECDH) — all executed locally in your browser with no data sent to any server.
A developer-friendly Elliptic Curve Cryptography (ECC) playground for generating keys, signing and verifying messages (ECDSA), and securely deriving shared secrets (ECDH) — all executed locally in your browser with no data sent to any server.
100% Client-Side Execution. No Data Sent to Server Secure
We do not store, log any key you enter. This tool is intended for personal and educational use. We suggest not to use online tools to protect real production secrets.
This tool provides a practical, browser-based implementation of Elliptic Curve Cryptography (ECC) using modern, audited JavaScript cryptographic libraries. All cryptographic operations are executed entirely on the client side — your keys and messages never leave your device.
Supported curves include secp256k1 (widely used in blockchain systems) and NIST P-256 (commonly used in TLS, certificates, and enterprise security).
ECDSA and RSA are both widely used public-key cryptographic algorithms, but they differ significantly in performance, key size, and security characteristics. The table below highlights the key differences to help you choose the right algorithm for your use case.
| Aspect | ECDSA (Elliptic Curve Digital Signature Algorithm) | RSA (Rivest–Shamir–Adleman) |
|---|---|---|
| Cryptographic Basis | Elliptic Curve Discrete Logarithm Problem (ECDLP) | Integer Factorization Problem |
| Key Size (≈128-bit security) | 256-bit | 3072-bit |
| Signature Size | ~64 bytes | 256–384 bytes |
| Performance | Fast signing, fast verification | Slow signing, fast verification |
| Bandwidth Usage | Low (small keys & signatures) | High (large keys & signatures) |
| CPU & Memory Efficiency | Highly efficient on mobile & embedded devices | Resource-intensive for constrained devices |
| Security per Bit | High | Lower compared to ECC |
| Common Use Cases | Blockchain, TLS, WebAuthn, IoT, Secure APIs | Legacy systems, older TLS implementations, enterprise PKI |
| Key Generation Speed | Fast | Slow (large prime generation) |
| Forward Secrecy Support | Yes (when used with ECDH) | No (without additional protocols) |
| Modern Recommendation | ✅ Strongly recommended for modern systems | ⚠️ Acceptable for legacy compatibility |
In modern cryptographic systems, ECDSA is generally preferred due to its smaller key sizes, better performance, and stronger security guarantees.
I build these tools to give you fast, secure, privacy-friendly utilities—free and signup-free.
Buying me a coffee helps keep the project running and supports new features.
Thank you for helping this tool thrive!
A key pair consists of a private key and a corresponding public key. The private key must be kept secret, while the public key can be shared freely.
In this tool, keys are generated using a cryptographically secure random number generator and displayed in hexadecimal format.
// Generate a private key
const privateKey = curve.utils.randomPrivateKey();
// Derive the public key (uncompressed)
const publicKey = curve.getPublicKey(privateKey, false);
ECDSA (Elliptic Curve Digital Signature Algorithm) is used to prove the authenticity and integrity of a message. A signature is created using a private key and can be verified by anyone holding the corresponding public key.
const message = new TextEncoder().encode("Hello, ECC");
const signature = curve.sign(message, privateKey);
// Compact hex representation
const signatureHex = signature.toCompactHex();
const isValid = curve.verify(
signatureHex,
message,
publicKey
);
If the verification succeeds, it confirms that the message has not been altered and was signed by the holder of the private key.
ECDH (Elliptic Curve Diffie–Hellman) allows two parties to derive the same shared secret over an insecure channel without ever transmitting the secret itself.
Each party combines their own private key with the other party’s public key to compute an identical shared secret.
// Alice's private key + Bob's public key
const sharedSecret = curve.getSharedSecret(
alicePrivateKey,
bobPublicKey
);
// Derive a symmetric key (SHA-256)
const derivedKey = sha256(sharedSecret);
The derived key is typically used as input for symmetric encryption algorithms such as AES.
This tool is intended for educational, testing, and development purposes. For production systems, always rely on well-audited cryptographic libraries and follow established security standards.