Is it possible to use OpenPGP/SSH key pairs to authenticate with a web application in a secure fashion to replace traditional
password-based authentication?
Sì. È abbastanza possibile.
If it is possible, what will the authentication steps look like? Is there perhaps a known good implementation of such an idea for popular languages and platforms like Ruby, .NET, Java or Python?
Vedi la mia risposta per la prossima domanda.
If it isn't possible, what are the reasons? Is there perhaps a constraint on web browsers accessing the GPG keychain or SSH key
file?
L'elaborazione delle chiavi SSH e OpenPGP in un'app Web è possibile con le librerie di terze parti (in particolare le librerie C o Java data la loro ricca ecologia), ma si perderebbe la soluzione più comune esistente - SSL / TLS.
La soluzione migliore sarebbe che gli utenti generassero il certificato client X509 firmato dal server per autenticarsi - perché allora l'app Web può semplicemente fare affidamento sul contenitore web (Catalina Tomcat, ApacheD, IIS, ecc.) per eseguire la crittografia e autenticazione per la tua applicazione.
Sotto il cofano Le chiavi OpenPGP hanno gli stessi esponenti RSA di un certificato X509, quindi strumenti come openssl
possono convertire chiavi GPG / PGP in certificati X509 autofirmati *; lo stesso vale per chiavi SSH .
* Il web-of-trust OpenPGP si qualifica come "autofirmato" dal punto di vista X509 poiché X509v3 non può avere una catena di trust con radici multiple che sono stato in grado di determinare.