Non sei completamente sicuro di cosa stai chiedendo; se le tue app supportano nativamente un formato specifico, usa quello. C'è un'app specifica che vorresti chiedere?
Se desideri semplicemente un formato semplice per le app che stai scrivendo, il formato OpenSSH è semplice e intuitivo (e ampiamente utilizzato / supportato). Anche i certificati X.509 sono un po 'più complicati, ma anche ampiamente supportati, anche se questo potrebbe essere un po' oltre lo scopo di ciò che stai cercando di fare (X.509 è una specifica completa per PKI [Public Key Infrastructure] e PMI [Privilege Management Infrastructure]).
OpenPGP ha anche implementazioni gratuite (gnupg), e ha un buon supporto per le librerie / un bel formato di chiave (quando si usa l'armatura ascii).
[OT]:
Su una nota semi-offtica, generare la chiave privata lato server e poi darla al client è quasi sempre una cattiva idea che sconfigge lo scopo della crittografia a chiave pubblica / privata. Dovresti invece pre-avviare i client con la chiave pubblica dei server, generare una chiave privata sul client, utilizzare la chiave pubblica dei server per verificare la connessione (se stai già utilizzando TLS hai fatto questa parte) e poi inviare il server la chiave pubblica del client. Inoltre, se stai già utilizzando TLS non sono sicuro del motivo per cui avresti bisogno di un altro livello, quindi, ancora una volta, non so quale caso d'uso avevi in mente.
Esempi
Per ottenere un esempio di ciascun tasto su un sistema Unix / Linux:
OpenSSH: ssh-keygen -t rsa -b 2048 -f filename
GnuPg: gpg --keyserver pgp.mit.edu --recv-key 0xEC2C9934 && gpg --armor --export 0xEC2C9934
(scaricherà e mostrerà la mia chiave pubblica)
X.509: openssl genrsa -sha512 -out keyfile.key 2048
sputerà una chiave privata.
È quindi possibile generare una richiesta di firma del certificato utilizzando openssl req -new -key keyfile.key -out keyfile.csr
e infine un certificato: openssl x509 -req -days 1 -in keyfile.csr -signkey keyfile.key -out keyfile.crt
Considerazioni finali
Dopo aver letto i commenti, sembra che tu stia cercando più di una soluzione completa. Se capisco cosa vuoi, penso che la soluzione ideale sarebbe usare i certificati X.509. Potresti creare la tua CA (Certificate Authority) o acquistare un certificato da una terza parte attendibile online (mi piace RapidSSL ). Puoi quindi fare in modo che le tue app verifichino le comunicazioni dal server e utilizzare ECDH (Eliptic Curve Diffie-Hellman) per negoziare una chiave condivisa e facilitare comunicazioni sicure (hai detto che volevi un ingombro ridotto, quindi immagino che l'ECDH sarà più veloce del normale DH) . AES256 per la crittografia e SHA2 per la verifica del digest dei messaggi dovrebbe fornire una connessione sicura, ben supportata e ragionevolmente bassa. In pratica, utilizza TLS e assicurati di scegliere buone opzioni per il tipo di crittografia, il meccanismo di scambio delle chiavi e la funzione di digest dei messaggi.