# Claves

La página de **claves** (barra lateral en el iPad, pestaña de claves en el
iPhone) gestiona tus claves SSH. Los bytes de las claves privadas viven
únicamente en el llavero de iOS — Tessera guarda solo metadatos públicos
(nombres, huellas, uso) en su propia base de datos.

## Generar una clave

Toca **+ generar** y elige un algoritmo:

- **Ed25519** — «predeterminado rápido y moderno». Una clave por software
  guardada en el llavero; se puede exportar a un archivo de recuperación y
  mover entre dispositivos.
- **P-256 Enclave** — «vinculada al dispositivo». Se genera dentro del Secure
  Enclave y **nunca sale de él**: la clave no se puede exportar ni mover a otro
  dispositivo. Si pierdes el dispositivo, pierdes la clave — ten en algún sitio
  una segunda clave autorizada.

No se admite la generación de RSA; consulta la
[resolución de problemas](https://bambouville.com/docs/es/troubleshooting/#las-claves-rsa-no-son-compatibles).

## Importar una clave

Toca **importar** y elige un archivo de clave privada OpenSSH (hasta 1 MB). Si
el archivo está protegido con una frase de contraseña, esta se usa una sola vez
para descifrarlo y no se conserva.

- Solo se aceptan importaciones **Ed25519**. La importación de RSA está
  desactivada porque la pila SSH actual solo puede ofrecer la firma obsoleta
  RSA/SHA-1 — usa Ed25519 en su lugar.
- La hoja de importación se oculta a sí misma («importación de clave privada
  oculta») siempre que se captura la pantalla o la app pasa a segundo plano.

## Protección biométrica

Cada clave tiene un interruptor **exigir datos biométricos o código**: entonces
se requiere Face ID / Touch ID o el código del dispositivo cada vez que Tessera
accede a esa clave. En las claves Ed25519 por software esto lo aplica iOS en el
límite del llavero; en las claves P-256 del Enclave el material de la clave
nunca sale del Secure Enclave y es Tessera quien aplica la autenticación antes
de cada uso — por eso el ajuste sigue siendo modificable. Solo las claves
creadas antes de que esto fuera configurable llevan la etiqueta bloqueada de
**obligatorio**.

### Ráfagas de autorización

En **ajustes → seguridad → autorizar ráfagas de conexión con la clave**, una
sola concesión biométrica puede cubrir conexiones repetidas con la misma clave
al mismo endpoint durante 30 segundos, de modo que las pestañas de tmux y las
transferencias de archivos no pregunten cada una por su lado. Pasar la app a
segundo plano siempre invalida estas concesiones, incluso con el
[bloqueo de la app](https://bambouville.com/docs/es/security/) desactivado.

El interruptor se ofrece al generar o importar una clave y se puede cambiar más
tarde desde el detalle de la clave. La excepción son las claves P-256 del
Enclave creadas antes de que esto fuera configurable: llevan una etiqueta
**obligatorio** bloqueada, y cambiarlas implica generar una clave nueva y
rotar.

## El panel de detalle de la clave

Toca una clave para ver su tipo, su **huella (sha256)** (compatible con
OpenSSH) y su clave pública. Desde aquí puedes:

- **copiar clave pública**: la línea de `authorized_keys`.
- **copiar al host…**: instalarla en un servidor (abajo).
- **exportar la clave privada…**: solo Ed25519; escribe un archivo de
  recuperación `openssh-key-v1` cifrado con una frase de contraseña.
- **eliminar la clave privada local…**: consulta la
  [eliminación](#eliminar-una-clave).

Una sección **usada por** lista los hosts que hacen referencia a la clave.

## Instalar una clave en un host

**copiar al host…** elige un host, muestra la línea exacta de
`authorized_keys` y la añade a `~/.ssh/authorized_keys` por SSH, con marcadores
de verificación.

- Antes tienes que haber [confiado en la clave del host](https://bambouville.com/docs/es/host-keys/): conecta
  una vez para revisarla y vuelve a intentarlo.
- Tessera se niega a instalar una clave en un host que ya usa esa clave para
  autenticarse.
- Las instalaciones completadas quedan registradas, y el proceso de eliminación
  las informa («Instalaciones remotas conocidas: N»).

## Exportación y recuperación

La sección de **recuperación** de una clave sigue su estado de copia de
seguridad: si existe una exportación de recuperación verificada (con fecha y
huella) y, para las claves del Enclave, un recordatorio permanente de que el
material privado del Secure Enclave no puede salir del dispositivo.

- **proteger la clave de recuperación…**: exportar con una frase de contraseña.
- **verificar el archivo de recuperación…**: comprobar que un archivo de
  recuperación sigue correspondiendo a la clave.
- **restaurar desde el archivo de recuperación…**: reparación verificada por
  huella de material del llavero ausente o que no corresponde (por ejemplo,
  tras restaurar desde una copia de seguridad).

Haz copia de seguridad de las claves por software antes de instalarlas en
muchos sitios: una clave irrecuperable significa quedarte fuera a medida que
las contraseñas se desactivan.

## Eliminar una clave

**eliminar la clave privada local…** quita la clave del llavero tras
confirmar. Eliminarla en local **no revoca** ninguna entrada de
`authorized_keys` de tus servidores: cuando un host registrado tiene una
credencial alternativa disponible, el proceso de eliminación ofrece «revocar en
N hosts registrados y eliminar» para quitarlas por ti; si no, quita tú mismo
las líneas correspondientes en cada servidor si la clave debe dejar de
funcionar.

Las claves RSA heredadas que quedan de versiones antiguas se muestran
desactivadas.

## Ítems huérfanos del llavero

iOS conserva los ítems del llavero cuando se elimina y se reinstala una app,
así que los metadatos de la clave y su material pueden desincronizarse. Una
clave listada cuyo material privado ha desaparecido muestra un distintivo de
**falta el material privado** (arréglalo con
[restaurar desde el archivo de recuperación](#exportación-y-recuperación)); el
material privado sobrante sin clave correspondiente aparece como «N ítem(s)
huérfano(s) del llavero» con un flujo de **revisar la limpieza…**: si tienes
dudas, exporta antes un archivo de recuperación y luego elimina.

## Acceso al dispositivo

Cuando otro de tus dispositivos queda inscrito en un host mediante
[autorizar este dispositivo](https://bambouville.com/docs/es/continuity/#autorizar-este-dispositivo), la
concesión se registra aquí: dispositivo par, dirección, host y huella de la
clave. **revocar** quita del host la clave pública de ese dispositivo a través
de tu propio acceso, igual que se instaló. Si no se puede alcanzar el host, la
entrada se queda marcada como incierta para que puedas reintentarlo o limpiarla
a mano.

## Dónde están los bytes

- Claves Ed25519 por software: llavero de iOS (sin sincronización).
- Claves P-256: Secure Enclave, no exportables por diseño.
- La base de datos propia de Tessera: claves públicas, huellas, etiquetas,
  uso — nunca material privado.

Para el detalle completo del blindaje, consulta la
[auditoría pública de seguridad de claves privadas](https://github.com/bambouville/tessera/blob/main/docs/private-key-security-audit.md).
