Tengo un objeto que necesito transmitir a los clientes y necesito que los clientes sepan que realmente creé el objeto. Obviamente, este proceso implica que yo firme el objeto con mi clave privada, de modo que los clientes puedan verificarlo con mi clave pública. El único problema que tengo es que hay algún procesamiento en otra aplicación que cambia algunas propiedades dentro de este objeto. Esto significa que no puedo firmar todo el objeto ya que la verificación fallará. Sin embargo, lo que realmente necesito verificar es la carga útil, que no cambia. El proceso que seguí es el siguiente. Déjeme saber si esta es la forma correcta de hacerlo y señale cualquier falla de seguridad que pueda haber.
- Agregué 2 propiedades en el objeto (SignedPayload y PublicKey)
- Crear un par de claves públicas / privadas
- Firmó la carga útil utilizando la clave privada y configuró SignedPayload
- Se agregó la clave pública a la propiedad PublicKey
La aplicación del medio ahora se verá afectada, y algunas propiedades van a cambiar, pero la carga no lo hará. En última instancia, los siguientes pasos se realizarán una vez que se reciba el mensaje en el cliente:
- Deserializó el mensaje
- Verifique el mensaje usando las propiedades PublicKey, Payload y SignedPayload. Si la carga útil ha cambiado o la clave pública no se origina en mi organización, el mensaje se ignora. Esto significa que tengo que firmar la clave pública.
Mis preguntas principales son:
- ¿Es seguro este enfoque?
- ¿Cómo firmo la clave pública para que el cliente pueda verificar que soy el propietario de la clave?
- De lo que he leído, es una práctica común Transmitir la clave pública al firmar y verificar datos. Es esto correcto?
- ¿Hay algún problema con el enfoque de crear un par de claves para cada ¿Mensaje, ya que siempre estoy transmitiendo la clave pública? La razón de esto es evitar tener que almacenar la clave privada en el servidor, que puede ser secuestrada.
Muchas gracias de antemano.