Cifrar un mensaje de formato fijo con comandos y transmitir a través de Internet

3

Vinculado a: ¿Encriptando un mensaje de formato fijo?

Necesito comunicarme desde el Sitio A, un conjunto de información que se presentará a los usuarios del Sitio A, que cuando elijan enviar, deben viajar a mi Sitio B. En el Sitio B, debo validar que la solicitud de hecho vino del sitio A.

El sitio A tiene una clave secreta que se puede usar para el cifrado.

La información que se debe pasar:

// The SiteName must somehow be identified to Site B otherwise 
// I dont know which secret key to use for decryption
$SiteName = "SiteA"; 
$Command = "commandA";
$UserId = "42";
$UserName = "John";
$UserTimeZone ="America/New_York";
$UserCountryCode ="US"
$BookId ="966";
$message = encryptionfunction($SiteName.'-'.time());

En este momento, estoy enviando todo lo anterior, visible para el usuario.

¿Debo cifrar $ Command y otros campos y enviar solo

$SiteName = "SiteA"; 
$message = encryptionfunction($SiteName.'-'.$Command.'-'.$UserId.'-'.$UserName
           .'-'.$UserTimeZone.'-'.$UserCountryCode.'-'.$BookId.'-'.time());

1.Editar

frm: enlace

proporcionaré las claves de api a los sitios de mi socio y usarán el código que les doy para generar "tokens".

estos tokens estarán presentes automáticamente en los formularios en los que los usuarios de los sitios asociados harán clic y llegarán a mi sitio. cuando lleguen a mi sitio, tendré que validar que efectivamente proceden de un sitio asociado.

¿Cómo puedo validar esto? el apikey será secreto, pero lo que se presenta en el formulario NO lo será, por lo que los usuarios inteligentes no deben poder aplicar ingeniería inversa a mi algoritmo.

    
pregunta siliconpi 02.05.2011 - 08:17
fuente

3 respuestas

2

Mirando la pregunta a la que te vinculaste, la respuesta de Thomas lo dice todo. Desea firmar sus mensajes y probablemente desee utilizar un HMAC para hacerlo. Para evitar la repetición, debe incluir un mecanismo que identifique de forma única cada mensaje y evite que se procese más de una vez. Una posible respuesta a eso, si los relojes están sincronizados, es recordar los tokens que ha procesado durante los últimos diez segundos y solo procesar tokens que tengan cinco segundos o menos. Ese tipo de superposición debería evitar una condición de carrera.

Si su información debe ser confidencial para su transmisión, fírmela antes de cifrarla.

    
respondido por el Jeff Ferland 02.05.2011 - 16:53
fuente
3

Como ya mencionó @Georgios , si todo lo que quiere es validar la integridad de su transmisión y el hecho de que fue generado en el sitio A , entonces deberías mirar la firma .

Si usar o no el cifrado es otro caso. Y depende de usted decidir.

¿Está de acuerdo con que su usuario vea los datos enviados en texto sin formato? Supongo que sí, ya que asumo que la mayoría de las entradas generadas por el usuario se transmiten de cualquier manera (corríjame si me equivoco).

Es posible que desee cifrar estos datos para evitar las escuchas ilegales en el camino hacia el sitio B, pero es su decisión decidir si vale la pena la sobrecarga adicional.

    
respondido por el Karol J. Piczak 02.05.2011 - 12:49
fuente
2

Está cometiendo el error de confundir la autenticación con el cifrado. Necesita protección de integridad, no secreto. La autenticación proporciona protección de integridad. El cifrado proporciona protección secreta. Quieres autenticación. Hay dos categorías de esquemas para la autenticación: autenticación con clave simétrica (un código de autenticación de mensaje, por ejemplo, AES-CMAC o SHA256-HMAC) o autenticación con clave asimétrica (una firma digital, por ejemplo, firmas RSA o DSA). Dado que tiene varios sitios asociados, le sugiero que utilice una firma digital de clave pública, como una firma RSA, y no una autenticación de clave simétrica.

Para hacerlo simple: use una firma digital RSA. El sitio A firma la información con una clave RSA privada conocida solo por el sitio A. El sitio B verifica la información mediante la clave pública del sitio A (que se distribuye a todos).

Debes firmar todos los campos.

    
respondido por el D.W. 03.05.2011 - 06:49
fuente

Lea otras preguntas en las etiquetas