Cifrado de repositorios Git

Esto de tener un repositorio en GitHub, o incluso en GitHub, por no decir, en cualquier otro de los servicios que hay disponibles, es algo que ha pasado de ser extraño, a estar a la orden del día. Es mas, incluso te diría que si no tienes un repositorio, no estás de moda (quizás con esto me he pasado). No solo se utiliza para el trabajo colaborativo en el desarrollo de software. También se utiliza para multitud de otras actividades. Desde guardar tus archivos de configuración, hasta para escribir libros, ya sea solo o de forma colaborativa. Lo cierto, es que en estos repositorios, es posible que guardes información sensible. Es posible que quieras compartir con todo el mundo, excepto una parte, que solo la quieres compartir con tus colaboradores. En este sentido, la solución es el cifrado de repositorios Git.

Aunque el repositorio sea privado, es mejor, seguro que es mejor, que esta información sensible esté protegida. Y ¿como mantener tu información sensible protegida?. Sin lugar a dudas, la mejor forma de mantener esta información es mediante el cifrado. Y ¿que mejor manera de cifrar que mediante clave pública privada?¿Que mejor forma de cifrar que con GPG?. Así en este artículo te indico una forma de para proteger la información sensible en repositorios, es decir, cifrado de repositorios Git.

Cifrado de repositorios Git

Cifrado de repositorios Git.

Nadie me puede discutir (creo), que la mejor forma de guardar y compartir código es mediante el uso de repositorios. Esto con independencia del sistema de control de versiones que estés utilizando. Cuando estás implementando una aplicación que se relaciona con otros sistemas, bases de datos, APIs, etc, necesitarás contraseñas, nombres de usuario, claves, etc. Esto evidentemente, es información sensible. Muy sensible diría yo.

Igualmente, si mantienes tus dotfiles en algún repositorio, como explico en el podcast sobre archivos de configuración, seguro que también guardas información mas o menos sensible.

Ya sea por una razón u otra, y con independencia de que utilices un repositorio público o privado, lo mas conveniente es que esta información sensible esté cifrada. Tu información sensible debe estar protegida de ojos ajenos. Evidentemente en algunos casos será mucho mas necesario que en otras, o incluso obligatorio.

Entonces ¿como proteger la información sensible en repositorios? Mediante el cifrado de repositorios Git.

git-crypt

Existen diferentes sistemas para hacer esto. Pero desde luego lo que necesitamos es un medio que nos permita hacerlo sin que tengamos que preocuparmos. El cifrado debe hacerse de forma completamente transparente. Lo suyo es que cuando hagas un git push no te tengas que preocupar de si los archivos con información sensible estaban cifrados o no…

Precisamente git-crypt es esa herramienta que vamos buscando. Nos permite el cifrado y descifrado de archivos en un repositorio git.

La ventaja de esta herramienta es que nos permite compartir un repositorio mixto. Con un repositorio mixto me refiero a uno que tenga parte de sus archivos cifrados y otra parte sin cifrar. Así, todo el código lo puedes tener abierto y disponible para compartir, mientras que contraseñas y claves estarán cifradas.

Esta herramienta cifrará aquellos archivos que le indiquemos antes de realizar un git push. De esta manera, siempre nos aseguramos que lo que tenemos en el repositorio remoto está perfectamente cifrado.

De esta manera, tu puedes compartir con todos tu repositorio, sin tener que preocuparte, de estar dejando a la vista tus vergüenzas.

Instalar git-crypt

git-crypt se encuentra en los repositorios oficiales de Ubuntu, con lo que la instalación es tremendamente sencilla. Tan solo tienes que ejecutar la siguiente orden en un terminal,

sudo apt install git-crypt

Cifrado de repositorios Git. Configuración

Para configurar el cifrado de repositorios Git, de forma que pueda utilizar git-crypt tan solo tienes que ejecutar git-crypt init en el repositorio que quieras.

Una vez inicializado tu repositorio, es necesario que indiques que archivos tienen que estar cifrados. Para ello tienes que utilizar un archivo .gitattributes en tu repositorio. Este archivo puede ser como el que ves a continuación,

archivosecreto filter=git-crypt diff=git-crypt`
*.clave filter=git-crypt diff=git-crypt

Con este archivo .gitattributes estás indicando que se cifre el archivo archivosecreto y todos aquellos que tengan la extensión *.clave.

Como compartir con otros

Para la parte no cifrada, poco hay que decir. Simplemente comparte tu repositorio como haces siempre. Pero, ¿que pasa si quieres compartir con tus colaboradores la parte cifrada?

Si alguien clona el repositorio encontrará que parte de este repositorio es ilegible. Básicamente es ilegible la parte que está cifrada. Y será ilegible a menos que tenga o bien la clave GPG o la contraseña.

Si estás trabajando con un equipo, donde sois varios los que estais desarrollando y trabajando sobre el código, es posible que necesites compartir la parte cifrada, pero que sea accesible. Que esté descifrada.

Si tu colaborador, quiere depurar el código y lo tiene cifrado, ¿como va a depurar?

git-crypt te ofrece dos opciones para compartir el código descifrado.

Modo GPG

Uno de los medios para compartir con otros la parte cifrada, y contigo mismo claro, es utilizando GPG. Así si quieres añadir a un colaborador, o a ti, solo tienes que ejecutar la siguiente orden,

git-crypt add-gpg-user <CLAVE>

Donde <CLAVE> puede ser o bien la clave GPG, o bien la huella o el correo electrónico, o cualquier otro medio que identifique de forma unívoca la clave pública GPG.

Una vez que has clonado el repositorio, la primera operación que tienes que hacer es desbloquear el mismo. Para ello, ejecuta la siguiente orden,

git-crypt unlock

Modo simétrico

No solo puedes utilizar el modo GPG, sino que git-crypt también te permite utilizar una clave simétrica. Esta clave simétrica tendrás que compartirla con tus colaboradores para que puedan tener acceso a la parte cifrada. Para compartir esa clave secreta, tienes que ejecutar la siguiente orden,

git-crypt export-key /ruta/al/fichero-clave

Una vez que has clonado un repositorio con claves cifradas, para desbloquearlo, tendrás que ejecutar la siguiente orden,

git-crypt unlock /ruta/al/fichero-clave

Objetivo y conclusiones

El objetivo de utilizr git-crypt para el cifrado de repositorios Git, no es el de cifrar todos los archivos del repositorio, sino cifrar la información sensible. No se me ocurriría en ningún caso cifrar todos los archivos del repositorio, se trata de compartir con otros, no impedir a otros su uso.

Dicho esto, lo cierto es que esta solución es treméndamente útil y sencilla. Pero sobre todo, cómoda. Como he comentado en repetidas ocasiones, no te tienes que preocupar de absolutamente nada. Cuando realices un git pull, se realiza el cifrado, de forma que la información sensible, sube ya cifrada al repositorio. No te tienes que preocupar, me parece sencillamente genial.


Más información,

git-crypt

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *