Almacenamiento de Claves RSA en macOS Keychain
security
rsa
encryption
macos
keychain
Tutorial práctico para almacenar y recuperar claves privadas RSA de forma segura
Almacenamiento de Claves RSA en macOS Keychain
Contenido
Introducción
macOS Keychain es un sistema de almacenamiento de credenciales integrado que ofrece encriptación hardware (Secure Enclave en Apple Silicon) y protección automática. Sin embargo, almacenar claves privadas RSA en formato PEM presenta desafíos técnicos que este tutorial resuelve.
El Problema
El comando estándar para almacenar contraseñas en Keychain:
security add-generic-password \
-a "$USER" \
-s "mi-clave-rsa" \
-w "$(cat private.pem)" \
-T ""No funciona correctamente para claves PEM multilínea. El resultado es contenido hexadecimal inutilizable.
La Solución
Codificar la clave en base64 antes de almacenarla:
# Almacenar
ENCODED=$(base64 < private.pem | tr -d '\n')
security add-generic-password -a "$USER" -s "rsa-key" -w "$ENCODED"
# Recuperar
security find-generic-password -s "rsa-key" -w | base64 -d > recovered.pemContenido del Tutorial
Teoría
- 01 - El Problema con Keychain - Análisis técnico del comportamiento
- 02 - Solución con Base64 - Codificación y decodificación
- 03 - Scripts Prácticos - Herramientas reutilizables
Laboratorio
- Lab 1 - Almacenamiento en Keychain - Ejercicio completo
Prerrequisitos
| Requisito | Descripción |
|---|---|
| Sistema | macOS con Keychain |
| Herramientas | Terminal, OpenSSL |
| Conocimientos | Bash básico, concepto de clave pública/privada |
| Archivos | Clave privada RSA en formato PEM |
Objetivos de Aprendizaje
Al completar este tutorial serás capaz de:
- Entender por qué el comando directo falla con claves PEM
- Implementar la solución con codificación base64
- Usar scripts automatizados para almacenar y recuperar claves
- Verificar la integridad de las claves recuperadas
- Aplicar buenas prácticas de seguridad en el manejo de claves
Flujo de Trabajo
┌─────────────────────────────────────────────────────────────────┐
│ FLUJO KEYCHAIN RSA │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ALMACENAMIENTO │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ private.pem │ -> │ base64 │ -> │ Keychain │ │
│ │ (multilínea)│ │ encode │ │ storage │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ RECUPERACIÓN │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Keychain │ -> │ base64 │ -> │ private.pem │ │
│ │ storage │ │ decode │ │ (válido) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Tiempo Estimado
| Sección | Tiempo |
|---|---|
| Teoría (3 secciones) | 20 min |
| Laboratorio | 15 min |
| Total | 35 min |