He estado observando cómo funciona el cifrado del lado del servidor. Gracias al documento nextcloud entiendo la implementación.
Básicamente, cuando inicias sesión por primera vez, se crea un par de claves y la clave privada se encripta utilizando una clave derivada de la contraseña del usuario. Cuando se crea un nuevo archivo, se utiliza una clave simétrica y esa clave se cifra con la clave pública y solo se puede descifrar con la clave privada.
Cuando quiera leer ese archivo, inicie sesión, la clave privada se descifra mediante la clave derivada de la contraseña (y se almacena en la memoria), luego se descifra la clave simétrica (entonces puede descifrar el archivo).
Pero, estoy usando la autenticación de dos factores en el servidor, con un Yubikey. Entonces, cuando quiero que un cliente de escritorio se conecte a mi siguiente nube, uso una contraseña de aplicación. ¿Cómo se descifra la clave privada cuando utilizo el cliente de escritorio de nextcloud con una contraseña de aplicación? Además, la contraseña del usuario no se almacena en texto sin formato. Tal vez la contraseña de la aplicación se deriva de la contraseña del usuario, pero ¿cómo?
Editar: no estoy viendo cómo se implementa la técnica en Nextcloud en particular, solo en una explicación general sobre cómo se puede hacer.