Generatore di coppie di chiavi RSA — ECDSA e Ed25519
Genera chiavi RSA online: la chiave privata non lascia il browser. RSA 2048/4096, ECDSA, Ed25519, PEM PKCS#8 o PKCS#1, JWK e impronta SHA-256.
PKCS#8 (BEGIN PRIVATE KEY) è il valore predefinito moderno ed è ciò che si aspetta il JDK. PKCS#1 (BEGIN RSA PRIVATE KEY) è la forma tradizionale di OpenSSL, ancora richiesta da alcuni gateway. Cambiare ricodifica la stessa chiave.
Tienila segreta. Chiunque la possieda può spacciarsi per te.
Genera lo stesso tipo di coppia di chiavi con OpenSSL
Il nostro team verifica byte per byte la conversione da PKCS#8 a PKCS#1 rispetto all'output di riferimento del modulo crypto di Node, così una chiave esportata qui è identica a quella che OpenSSL produrrebbe per lo stesso materiale.
Cos'è un generatore di chiavi RSA?
Un generatore di chiavi RSA produce una coppia legata matematicamente: una chiave privata che tieni per te e una chiave pubblica che distribuisci. Tutto ciò che firmi con la metà privata si verifica con la metà pubblica, e solo la metà pubblica puoi pubblicarla senza rischi. Questa asimmetria è il punto centrale: permette a chi verifica di controllare le tue firme senza acquisire la capacità di falsificarle, cosa che un segreto condiviso non potrà mai offrire.
Questo generatore lavora dentro il tuo browser tramite l'API Web Crypto, quindi la chiave privata nasce nella scheda e la pagina non invia alcuna richiesta di rete durante la generazione. Oltre a RSA produce anche coppie ECDSA ed Ed25519, che servono allo stesso scopo con chiavi molto più corte: una chiave privata Ed25519 occupa 48 byte in PKCS#8, mentre una chiave RSA da 2048 bit supera 1,2 KB.
Ciò che manda in confusione non è la matematica ma la confezione. La stessa chiave puoi scriverla come PKCS#8, PKCS#1, SPKI o JWK, e una libreria che rifiuta l'una spesso accetta l'altra senza messaggi più chiari di un errore di parsing. La tabella più sotto associa ogni contenitore agli ecosistemi che se lo aspettano.
// Verify a downloaded key pair matches, using OpenSSL: openssl pkey -in rsa-2048-private.pem -pubout | diff - rsa-2048-public.pem // No output means the public key really belongs to that private key.
Caratteristiche principali
Generato nel tuo browser
Le chiavi arrivano dall'API Web Crypto nella tua scheda, e la pagina non invia alcuna richiesta di rete durante la generazione. Stacca la connessione e continua a funzionare, il che dimostra che allo strumento non serve alcun server per fare il suo lavoro.
RSA, ECDSA ed Ed25519
RSA 2048, 3072 e 4096; ECDSA su P-256, P-384 e P-521; ed Ed25519, tutto da una sola pagina e con le stesse opzioni di esportazione.
Output PKCS#8 e PKCS#1
Passa da BEGIN PRIVATE KEY alla disposizione tradizionale BEGIN RSA PRIVATE KEY senza toccare OpenSSL. Il selettore ricodifica la chiave già a schermo, quindi resta la stessa chiave.
Esportazione JWK
Entrambe le metà sono disponibili come JSON Web Key. La JWK pubblica è quella che finisce in un documento JWKS o in un verificatore JOSE; la JWK privata è solo per il tuo firmatario e non va mai pubblicata.
Impronta SHA-256
Ogni coppia arriva con un'impronta della sua chiave pubblica, così puoi verificare su un canale separato che le due parti abbiano la stessa chiave.
Comandi OpenSSL corrispondenti
Sotto l'output trovi i comandi equivalenti per generare in locale lo stesso tipo di chiave, per passare alla riga di comando quando preferisci.
Download con nomi sensati
I file vengono salvati come rsa-2048-private.pem e rsa-2048-public.pem, non con un nome generico da rinominare a mano.
Nessun account, nessun limite d'uso
Non c'è alcun server di mezzo, quindi non devi registrarti e non esiste una quota da esaurire.
Esempi pratici
Coppia Ed25519, mostrata per intero
Algoritmo: Ed25519
-----BEGIN PRIVATE KEY----- MC4CAQAwBQYDK2VwBCIEIA2HJVU1qChbOJN8XksXVhyD0IjYVt0UU6Mwz814rOFf -----END PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAV5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU= -----END PUBLIC KEY-----
Una chiave privata Ed25519 occupa 48 byte in PKCS#8 e la chiave pubblica 44 byte, quindi ogni PEM sta in una sola riga di base64. Questa coppia è una dimostrazione usa e getta: genera la tua invece di copiare questa.
Le intestazioni PKCS#8 e PKCS#1 sono diverse
Algoritmo: RSA 2048, struttura commutata
PKCS#8: -----BEGIN PRIVATE KEY----- PKCS#1: -----BEGIN RSA PRIVATE KEY-----
Stessa chiave, due involucri. PKCS#8 aggiunge un identificatore di algoritmo attorno alla struttura RSA, ed è per questo che vale per ogni algoritmo mentre PKCS#1 esiste solo per RSA. Azionare il selettore ricodifica la chiave già a schermo, quindi l'impronta non cambia.
Chiave pubblica RSA 2048
Algoritmo: RSA 2048
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk/fbpPCGDyh71m73oB9Bk8+fKVkSThXyWTtpgblB7pX iQBtTvSWVZGHprkLgMGkU2Yw8Z43m1WpoRuYyXNFe92S5viIdVuKTj/VEUuEpzHd ffWMIUw70LaUdTP04iQdkNVeS3M6VHkpTwsPSQfsFSwObtLVNy2Lf+ODwJRqCk2r C749hgKqBdJqkcIj49R7UP4SMQ/9V3yy8DFMrIcgsjC4tHwlQSCGeXNxTNlapGSa ke55LUR83FASryVJRbUs678SCZSFkyGcT0qLZ/olu/e7Jj2lB0Qy/SJawkrs9hPE 4QIDAQAB -----END PUBLIC KEY-----
Il prefisso MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A è l'identificatore dell'algoritmo rsaEncryption: è così che riconosci a colpo d'occhio una chiave SPKI di tipo RSA.
Chiave pubblica come JWK
Algoritmo: Ed25519, pannello JWK
{
"key_ops": [
"verify"
],
"ext": true,
"alg": "Ed25519",
"crv": "Ed25519",
"x": "V5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU",
"kty": "OKP"
} Questa è l'esportazione testuale, membri key_ops ed ext inclusi, che Web Crypto aggiunge sempre. Una voce JWKS non li vuole: eliminali entrambi e aggiungi invece kid e use, così chi verifica può selezionare la chiave giusta durante una rotazione. Ed25519 ricade nel tipo di chiave OKP; le chiavi RSA compaiono con kty RSA e i membri n ed e.
Impronta SHA-256
Algoritmo: Ed25519
SHA256(SPKI) = KAXVxapxpG4zLsTVMpPafovT+X1NLWc8fsOXqtrb59o=
Un digest SHA-256 della struttura della chiave pubblica, abbastanza corto da leggerlo al telefono. Attenzione: non è il valore che stampa ssh-keygen, perché OpenSSH calcola l'hash del proprio formato di trasporto e i due non coincidono mai per la stessa chiave.
Come usare il generatore di chiavi RSA
- 1
Scegli l'algoritmo
RSA copre la gamma più ampia di sistemi datati. ECDSA offre una robustezza equivalente con chiavi molto più piccole. Ed25519 è la scelta predefinita moderna per ogni nuovo lavoro di firma.
- 2
Scegli la dimensione della chiave
RSA 2048 soddisfa le indicazioni attuali; 3072 e 4096 aggiungono margine per chiavi di lunga durata. ECDSA propone P-256, P-384 e P-521. Ed25519 ha un'unica dimensione fissa.
- 3
Seleziona la struttura PEM
PKCS#8 emette BEGIN PRIVATE KEY e funziona quasi ovunque, JDK compreso. Passa a PKCS#1 solo quando qualcosa richiede espressamente BEGIN RSA PRIVATE KEY.
- 4
Copia o scarica entrambe le metà
La chiave privata finisce nel tuo gestore di segreti. La chiave pubblica va a chi verifica le tue firme. Non inviare mai la metà privata da nessuna parte.
- 5
Verifica l'impronta
Confronta l'impronta SHA-256 su un canale separato per avere conferma che l'altra parte abbia installato proprio la chiave pubblica che hai generato.
Errori comuni sul formato delle chiavi
Incollare la chiave pubblica dove serve quella privata
Per firmare serve la metà privata. Una libreria che riceve BEGIN PUBLIC KEY dove si aspettava una chiave privata di solito restituisce un errore di parsing poco chiaro invece di nominare il problema reale.
-----BEGIN PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
Struttura PEM sbagliata per la libreria
Pochi ecosistemi leggono solo la disposizione RSA tradizionale: l'output -traditional di OpenSSL stesso, alcuni SDK di gateway di pagamento, strumenti Ruby e Perl datati. La maggior parte delle librerie moderne, e il JDK in particolare, si aspetta PKCS#8. Cambia il selettore della struttura PEM invece di cercare un comando di conversione.
-----BEGIN RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
Perdere l'a capo finale
I file PEM terminano con un a capo dopo l'ultimo delimitatore. Una copia che passa da un campo di modulo che elimina gli spazi produce un file che alcuni parser rifiutano del tutto, e siccome il carattere mancante è invisibile il file sembra corretto in un editor.
-----END PRIVATE KEY-----[EOF]
-----END PRIVATE KEY-----↵[EOF]
Un carattere perso per strada
Ciò che rompe un PEM è un carattere perso, inserito o sostituito, non la larghezza delle righe: quasi tutti i parser accettano qualsiasi andata a capo. Una copia che passa da un client di chat o da un campo di modulo può trasformare in silenzio un a capo in uno spazio, e il base64 non dà alcun indizio su quale carattere sia andato storto; la chiave semplicemente non si carica. Usa il pulsante di copia invece di selezionare a mano.
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
Usare un segreto HS256 dove è configurato RS256
HS256 prende un solo segreto condiviso; RS256 prende una coppia di chiavi. Dare una stringa casuale a un firmatario RS256 fallisce già in fase di parsing. Genera la coppia qui, oppure usa il nostro Generatore di segreti JWT se intendevi HS256.
alg: RS256, key: 8f3a9c2e1b7d
alg: RS256, key: -----BEGIN PRIVATE KEY-----
Incollare un PEM in authorized_keys
Una chiave pubblica SSH è nel formato OpenSSH su una riga, ssh-ed25519 AAAA…, non un blocco PEM: incollare la chiave pubblica di questa pagina in authorized_keys non funziona. Per una chiave RSA puoi ricavare la riga giusta in locale con ssh-keygen -y; per l'accesso SSH in generale, generare sulla macchina di destinazione resta la scelta migliore.
-----BEGIN PUBLIC KEY-----
ssh-keygen -y -f rsa-2048-private.pem > id_rsa.pub
Chi usa questo strumento
- Firmare JWT con RS256 o EdDSA
- Gli algoritmi JWT asimmetrici richiedono una coppia di chiavi anziché un segreto condiviso. Firmi con la chiave privata, pubblichi la chiave pubblica e chi verifica non ha mai in mano nulla che gli permetta di coniare token. Il nostro Codificatore JWT accetta le chiavi prodotte in questa pagina.
- Firmare webhook e release
- Pubblica la chiave pubblica una volta sola, firma ogni payload con la chiave privata e chi consuma il servizio può verificarne l'autenticità senza una credenziale condivisa che possa trapelare.
- Sviluppo locale e test
- Le suite di test che esercitano la verifica delle firme hanno bisogno di una coppia usa e getta. Generarne una qui è più rapido che ricordare l'invocazione di OpenSSL.
- Capire com'è fatta una coppia di chiavi
- Passare tra algoritmi e strutture PEM affiancati rende concrete le differenze in un modo che la lettura di una specifica non ottiene.
- Preparare un endpoint JWKS
- La JWK pubblica entra direttamente nell'array keys di un documento di discovery OpenID Connect. Aggiungi un kid così chi verifica può selezionarla durante una rotazione, e tieni la JWK privata fuori da quel file.
- Migrare via da RSA
- Genera la sostituzione Ed25519 accanto all'originale RSA e confronta le dimensioni prima di impegnarti nel cambiamento.
- Risolvere un formato incompatibile
- Quando una libreria rifiuta una chiave con un errore di parsing, riemetterla nell'altra struttura PEM è di solito l'intera soluzione.
I formati PEM e come funziona il generatore
- Quale contenitore serve dove
- Una chiave, cinque confezioni. Sbagliare confezione è il motivo più frequente per cui una chiave viene rifiutata, e il messaggio d'errore raramente è più specifico di un fallimento di parsing.
Per convertire file che hai già,Contenitore Intestazione PEM Contiene Dove lo incontri PKCS#8 BEGIN PRIVATE KEY Qualsiasi algoritmo Web Crypto, JDK, Go, .NET — la maggior parte delle librerie moderne PKCS#1 BEGIN RSA PRIVATE KEY Solo RSA Output tradizionale di OpenSSL, alcuni gateway di pagamento, strumenti Ruby e Perl datati SPKI / X.509 BEGIN PUBLIC KEY Qualsiasi algoritmo, metà pubblica La chiave pubblica che quasi ogni libreria si aspetta PKCS#1 pubblica BEGIN RSA PUBLIC KEY Solo RSA, metà pubblica Strumenti RSA legacy JWK nessuna — è JSON Qualsiasi algoritmo Endpoint JWKS, discovery OIDC, librerie JOSE openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pemconverte in una direzione eopenssl rsa -traditional -in pkcs8.pem -out pkcs1.pemnell'altra. - La casualità arriva dal sistema operativo
- Web Crypto alimenta la generazione delle chiavi dalla sorgente di entropia della piattaforma: getrandom su Linux, e il CSPRNG di sistema su Windows e macOS. È la stessa classe di sorgente da cui attinge OpenSSL, non un generatore pseudo-casuale JavaScript.
- La generazione non congela la pagina
- crypto.subtle.generateKey è asincrona e, nei principali motori di browser, la ricerca dei numeri primi avviene fuori dal thread principale: l'interfaccia resta reattiva mentre viene cercato un modulo da 4096 bit. La pagina mostra comunque un indicatore di attesa, perché quanto duri quella ricerca dipende dalla fortuna del sorteggio.
- PKCS#8 avvolge PKCS#1
- Un PrivateKeyInfo PKCS#8 è un numero di versione, un identificatore di algoritmo e un OCTET STRING. Per una chiave rsaEncryption non cifrata, quell'OCTET STRING contiene una RSAPrivateKey PKCS#1 completa, ed è esattamente così che questa pagina converte tra i due senza riderivare nulla.
- Le chiavi pubbliche usano SubjectPublicKeyInfo
- BEGIN PUBLIC KEY è un SubjectPublicKeyInfo X.509: un identificatore di algoritmo più un BIT STRING. Cosa ci sia dentro quei bit dipende dall'algoritmo: per RSA è una RSAPublicKey PKCS#1, ed è per questo che BEGIN RSA PUBLIC KEY risulta più corta; per ECDSA è il punto di curva non compresso, e per Ed25519 la chiave grezza da 32 byte.
- L'esponente pubblico è 65537
- Ogni chiave RSA qui usa e = 65537, scritto 0x010001. È abbastanza grande da evitare gli attacchi a esponente piccolo e ha solo due bit a uno, quindi la verifica costa 16 elevamenti al quadrato e una sola moltiplicazione.
- Le impronte digeriscono il DER, non il PEM
- L'impronta SHA-256 viene calcolata sul SubjectPublicKeyInfo binario. Calcolarla sul testo base64 la farebbe cambiare ogni volta che cambia l'andata a capo delle righe. L'equivalente in locale è
openssl pkey -in private.pem -pubout -outform DER | openssl dgst -sha256 -binary | openssl base64.
Buone pratiche di gestione delle chiavi
- Genera le chiavi dove verranno usate
- Una chiave privata che attraversa una rete è stata esposta a ogni salto del percorso. Generarla nel browser tiene la chiave stessa fuori dalla rete, anche se il codice della pagina arriva comunque da lì; generarla sull'host di destinazione elimina perfino il passaggio di copia. Per una chiave che protegge sistemi di produzione, preferisci l'host.
- Preferisci Ed25519 se nulla impone RSA
- Ed25519 offre sicurezza solida in una chiave da 32 byte, con firma rapida e nessun parametro da sbagliare. Ricorri a RSA quando una controparte o una libreria datata non ti lascia alternative.
- Considera i 2048 bit come soglia minima
- Il NIST SP 800-131A vieta RSA sotto i 2048 bit per la generazione di firme dal 2013, e nessuna certification authority pubblica emette contro una chiave più corta. Scegli 3072 o 4096 per chiavi destinate a restare in servizio per molti anni.
- Non mettere mai una chiave privata sotto controllo di versione
- Conserva le chiavi private in un gestore di segreti o in una variabile d'ambiente caricata a runtime. Una volta che una chiave finisce in un repository, ruotarla è l'unica risposta sicura.
- Ruota a calendario, non solo dopo un incidente
- Pubblica le nuove chiavi pubbliche con un identificatore di chiave prima di ritirare le vecchie, così chi verifica può accettare entrambe durante la sovrapposizione. Una rotazione praticata di routine è una rotazione che regge sotto pressione.
Domande frequenti
È sicuro generare una chiave privata su un sito web?
Qual è la differenza tra PKCS#8 e PKCS#1?
Come converto una chiave PKCS#1 in PKCS#8, o viceversa?
Come ricavo la chiave pubblica da una chiave privata RSA?
Meglio scegliere RSA o Ed25519?
RSA a 2048 bit è ancora abbastanza robusto?
Posso usare queste chiavi per firmare i JWT?
Questo strumento può generare una chiave SSH?
Posso proteggere la chiave privata con una passphrase?
A cosa serve l'impronta?
Strumenti correlati
Vedi tutti gli strumenti →Strumento di Decifratura AES — OpenSSL e CryptoJS
Strumenti di sicurezza
Decifra AES online — GCM/CBC/CTR, passphrase o chiave grezza, rileva "U2FsdGVkX1" (OpenSSL/CryptoJS). 100% nel browser, le chiavi restano sul dispositivo.
Strumento di Crittografia AES — GCM, CBC e CTR
Strumenti di sicurezza
Crittografia AES online gratuita — AES-128/192/256, GCM/CBC/CTR, passphrase (PBKDF2) o chiave grezza. Funziona al 100% nel browser; nulla viene caricato.
Generatore e verificatore di hash Bcrypt
Strumenti di sicurezza
Genera e verifica hash bcrypt delle password online: costo regolabile, prefissi $2b$/$2a$/$2y$. 100% nel tuo browser; la password non viene mai caricata.
Generatore HMAC e Verificatore di Firma
Strumenti di sicurezza
Generatore e verificatore HMAC online e gratuito. Calcola HMAC-SHA256/SHA1/SHA384/SHA512 con chiavi in Testo, Hex o Base64 e output Hex/Base64/Base64URL. 100% nel tuo browser — le chiavi non lasciano mai la pagina.
Decodificatore JWT
Strumenti di sicurezza
Decodifica token JWT online con il nostro decodificatore JWT gratis. Ispeziona intestazione, payload, firma, scadenza e attestazioni. 100% browser — token mai fuori dal dispositivo. Nessuna registrazione, nessun tracciamento.
Codificatore e Generatore JWT
Strumenti di sicurezza
Generatore JWT online gratis. Costruisci header e payload, firma con HS256, RS256 o ES256 all'istante nel browser; segreto e chiave non lasciano il dispositivo.