Qué es una llave RSA, cómo crearla y cómo utilizarla

Author
By Darío Rivera
Posted on 2020-09-23 in SSH

RSA (Rivest-Shamir-Adleman) es un sistema de criptográfico de llave pública ampliamente utilizado en internet para asegurar dos atributos de la información, la confidencialidad y la autenticidad. Si deseas profundizar en el tema de criptografía de llave pública te invito a revisar el artículo Criptografía asimétrica en OpenSSL - Llave pública.

Qué es una llave RSA ?

Una llave RSA es una llave generada por el algoritmo RSA. Esta llave en realidad está compuesta por dos partes, una parte pública y otra parte privada. Para generar una llave RSA basta ejecutar el siguiente comando en sistema Unix.

ssh-keygen -t rsa

El parámetro -t especifica el tipo de llave, en este caso rsa. Puedes especificar un passphrase en la ejecución del comando, es altamente recomandable que lo hagas ya que si alguien logra hacerse con tu llave no podrá utilizarla a menos que sepa el passphrase. La parte privada de una llave rsa luce así:

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA21mZndAY/uha5LdJoJPXtVer6VUbIw1wn5SGYg1SSNKhf9nns/TQ
61FJiBC5KdaCS6xmLZ74uhoB1ud9lS870ZZ/q3qLnWu4nsR8AvYWJYQfX2NP+4G6GzNDt8
pBfQN1dfV2vus5QKoZHq/bcI8sDQOWMJYc/2b1lro8CYhvFLbIp3J3RtW8cgmCVUOm7LOt
Qv5vdWichW5a1eKEKLVsR8od5u1iaMymZDT3CCLq/iCZ2Au0P/bh4hgpUdtkMogHfuQD1R
5BLk2D/tb8AErpliBJIZAEIiEYzYTU7jOqDZRCamxuu/xqzCqIHX4p81+hCX6qi6rnGncV
DPf91kyidwAAA8hb1Fp3W9RadwAAAAdzc2gtcnNhAAABAQDbWZmd0Bj+6Frkt0mgk9e1V6
vpVRsjDXCflIZiDVJI0qF/2eez9NDrUUmIELkp1oJLrGYtnvi6GgHW532VLzvRln+reoud
a7iexHwC9hYlhB9fY0/7gbobM0O3ykF9A3V19Xa+6zlAqhker9twjywNA5Ywlhz/ZvWWuj
wJiG8UtsincndG1bxyCYJVQ6bss61C/m91aJyFblrV4oQotWxHyh3m7WJozKZkNPcIIur+
IJnYC7Q/9uHiGClR22QyiAd+5APVHkEuTYP+1vwASumWIEkhkAQiIRjNhNTuM6oNlEJqbG
67/GrMKogdfinzX6EJfqqLqucadxUM9/3WTKJ3AAAAAwEAAQAAAQEAqKdN2+9jKKvTJ0Re
Uh8ang4Y2kFbqintTGXQpZeEiwWYs0sCQnWcJTLNDNd+51JNwI1/ytgOelkAzRIUlx5IKj
BDXb/NlW5792cvyr8X7CSYUqlzl/f49m0GRkw26j48lEP113nY/YVL5zJj0TnkLuVxF050
YVPyxL/Q5auHbS5o1elFvuq4kg8w6EymrzAqczZS+CheSKZqftCf8FtoF1TRo4klg1ms7y
tiSqpH23rqkZIa9yukfijiWTqWPFXdpGj+G9YpX6B32nvxBBtou2fGkC1LUYVT3l+NSAdX
cyaMrHyGsQG+/hRyPxCu2HAtdIYpOYZMbM9OVhn8hOz1YQAAAIEAsNVRP72N9mN4kjzCTx
9cOImO8YCQtx77zDjeu98mxTGQMjR//Z2/j46p5NRqc3Q6VHiI0hzQKIBNw0kTgQvQDpOc
tWyIYatvYsG+DTJtFOoYYyRSzzgkeW70PfN4KsLZa6c0SXUd8vimqmG+1V7/XK5UfWNuGO
yDEPoMYFbBnjQAAACBAO1sP2huiLJPl19Zj2xV3LYWXcD9bgmHIR9d0zS4aH01fA+kO5DF
qFGTWsVRk7wBDbB5CQTya0+vaDnF3RWj9pj+aVBckXSgXN30yaCPNbxSuUeV2zl/VF+aPZ
4yhk63COGxWTuA2bVg7KaXSywuxGF1YB1NZK1LIn7YlxFLtcMvAAAAgQDsg1cW+Pm79saz
GxfCL2i+W8zRoe+Wky789C2DriRj5WEu91apWO6UW1oR5kqli510AHtM3ok0kVZ3wEadC0
KgAO2galA8Htp4Zwtbqj6zE4CFE6r6lJJFkpGPzemc14ZjyUZ5tVOU9MpkatyvtRspm4Sw
Vw8NoBWVk+C5AvdjOQAAAA5mZXJtaXVzQGRlYmlhbgECAw==
-----END OPENSSH PRIVATE KEY-----

y su contraparte pública así:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxjQrkGBVOZxc4TGpYqB34iIjSZ+F5U92KIpD1cJVb6OLf+mGe3e97tIsk7o4QAw1e4/XRampmJiZ5R+7k6bLGRkrkWB+YtMEPOThgAmiiBoTWa3ddbJVF4jn803TvA6XF5lqmcOYk/0Em0RjL1hJNW/vUbr1xKy483FMhHWCVB2/vwBlPZeJxZ/6pbkhOwhBktcITb4Li8EiSHwmITJzM96VBKPHiioluO9gsJtcXE/N8tqPMDjGGXbQMuDS4JyAC1svINM4N3t0o6V0YoqL5LdGcb4uk2jq9i/Hdye7ZowwacSTFx/K57OnIJXwufXSJcX0j9K68KC7M5h5+W0VL fermius@debian

Cómo utilizar una llave RSA

El uso más común de una llave RSA es para autenticarse por SSH en servidores web o de aplicaciones. Para esto, debes utilizar el comando ssh especificando la llave privada a utilizar. Por su parte, el servidor al cual te deseas conectar deberá tener registrada la parte pública de tu llave rsa. Esta parte pública es la que debes subir a servicios como Digital Ocean, AWS, GitHub, Bitbucket u otros.

ssh -i key_file user@server.com

Si especificaste una passphrase al crear la llave rsa, al momento de autenticarte en un servidor deberás digitarla nuevamente.

Cuando creas una llave rsa por primera vez esta se intentará crear en ~/.ssh/id_rsa tal y como puedes ver a continuación.

07:09:46 fermius@debian ~ → ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fermius/.ssh/id_rsa): 

Si no especificas ningun nombre de archivo diferente a id_rsa esta llave se usará por defecto cuando no se especifique una llave. Es decir, podrías loguearte en un servido solamente con ejecutar el comando ssh así:

ssh user@server.com

De lo contrario, deberás especificar el archivo con el cual te deseas conectar. También puedes utilizar una llave rsa para autenticación en un servidor VCS como GitHub o Butbucket. En nuestro artículo Ejecutar comandos de GIT con llave RSA te enseñamos cómo agregar llaves RSA y utilizarlas con GIT.

Configuración de conexiones SSH

Con el tiempo, puede que tengas más de una llave rsa o distintos servidores a los cuáles conectarte y suele ser tedioso recordar cada uno de ellos y digitar el comando completo para la conexión. Para esto, puedes configurar un set de conexiones predeterminadas a las cuales conectarte en el archivo ~/.ssh/config. Si este archivo no existe, puedes crearlo y colocar algo como lo siguiente:

Host dev
    Hostname dev.compay.com
    IdentityFile ~/.ssh/id_rsa_company
    IdentitiesOnly yes
    User username

Esto suponiendo que deseas conectarte al servidor dev.compay.com con la llave ~/.ssh/id_rsa_company y que tu usuario en ese servidor es username. De esta manera será cuestión de simplemente ejecutar en consola

ssh dev

Si te ha gustado este artículo puedes invitarme a tomar una taza de café


Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.