A partir de su descripción, asumo que (A) en realidad no necesita acceder a los datos de los usuarios (B) en ningún momento. Es decir. A almacena los datos de B, nada más.
Si es así, toda tu idea suena bastante mal.
Algo sobre el cifrado asimétrico normal primero:
- La clave pública se utiliza para en crypt. La clave pública, no la clave privada. La idea es que descifrar es difícil. No será difícil si necesita la clave pública para ello.
- No hay algo como una clave pública / semiprivada. Una de las dos llaves siempre puede calcular la otra clave también (pero no al revés), es decir, la clave privada puede usarse para calcular la clave pública.
- No hay un esquema de encriptado asimétrico (único) donde el descifrado necesita ambas claves. Podrías usar dos pares de kay, es decir. 4 teclas, para hacer algo así, pero no un solo par público / privado.
Dijo que el siguiente problema es su definición de "almacenamiento sin acceso". Si A quiere almacenar datos sin tener acceso, ¿por qué B debería enviar los datos simples a A? Porque eso es exactamente lo que está proponiendo: B envía datos a A para que A pueda cifrarlos en ese momento. Antes de encriptar, A tiene mucho acceso. La misma historia más tarde, cuando se descifra en el lado de A otra vez antes de que los datos se devuelvan a B.
Tercero, A le da a B una clave, y luego B envía la clave a A? ¿Cómo estás seguro de que A no mantendrá la clave para tener acceso todo el tiempo? ¿Y por qué las llaves se envían alrededor?
Lo que podrías hacer (y es mucho más fácil): A almacena los datos, como dijiste, y nada más . No invente estrategias de cifrado no genéticas que involucren a ambos lados. Si B desea que los datos sean privados, B puede cifrarlos solo, con sus propias claves y métodos, antes enviándolos a A. A nunca obtendrá ninguna clave.
Y si tiene eso, también debería pensar en integridad + autenticidad.