2012-04-05 9 views
6

Estoy tratando de entender el concepto de marcas de tiempo en los encabezados de solicitud en los servicios web, pero de alguna manera todavía no puedo entender completamente cómo funciona.¿Cómo funciona Timestamp ayuda a prevenir ataques de reproducción en webservices

Agradecería que alguien pudiera explicar el uso integral de las marcas de tiempo en la solicitud y respuesta de los servicios web.

¿Es realmente un método infalible para prevenir ataques de repetición?

Respuesta

6

Una marca de tiempo en sí misma no sería suficiente, pero por lo general se combina con un mecanismo de hash para garantizar que los valores no se hayan alterado.

La idea es que el cliente genere los parámetros y use su clave privada para ajustar los parámetros. Los [valores originales hash + clave pública] se envían con la solicitud. El servidor puede usar la clave pública para buscar la clave privada y asegurarse de que los parámetros sean correctos.

La marca de tiempo se utiliza, junto con algunos umbrales, para garantizar que una solicitud en particular no se pueda usar más de una vez. Si el umbral es pequeño (algunos cientos de milisegundos), un ataque de repetición es prácticamente imposible.

+0

¿Está encriptado el valor de la marca de tiempo? ¿Cómo valida el servidor que la solicitud entrante tiene una marca de tiempo válida y está dentro del umbral –

+0

@Kunal? Como dije, el cliente modifica los parámetros de entrada y envía el hash junto con las entradas. Los servidores hash como suma de comprobación contra la manipulación. El servidor usa la clave privada que corresponde a la clave pública de los usuarios para computar su propio hash de los parámetros. Si los dos valores hash coinciden, entonces sabrá que los valores proporcionados son legítimos y no han sido manipulados. – Josh

+0

@Kunal, ninguna marca de tiempo no está encriptada y debe estar en el encabezado de soap. – Don

2

La marca de tiempo no está encriptada y debe estar en el encabezado de soap.

<wsu:Timestamp wsu:Id="timestamp"> 
     <wsu:Created>2014-07-01T11:30:28.123+05:30</wsu:Created> 
     <wsu:Expires>2014-07-01T11:35:28.123+05:30</wsu:Expires> 
    </wsu:Timestamp> 

Si el tiempo de expiración es poco después del tiempo creado, puede minimizar el ataque de reproducción. En realidad, no es solo la marca de tiempo. Debe agregar el resumen de la marca de tiempo a la sección SignedInfo.

<ds:Reference URI="#timestamp"> 
    <ds:Transforms> 
     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
      <InclusiveNamespaces PrefixList="wsse soap" xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
     </ds:Transform> 
    </ds:Transforms> 
    <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> 
    <ds:DigestValue>TGgFBvglhb+jZCvjV0+oVnNaivpVBp5iVbJEqkTfaCU=</ds:DigestValue> 
</ds:Reference> 

Por lo tanto, en el servidor estos compendios deben coincidir. Incluso eso no es todo, entonces usted firma toda la información con la clave privada y agrega el valor de la firma al elemento Firma de la siguiente manera.

<ds:SignatureValue>jdO5GIZ9v1VTngFZcMpz5hz62RwToq2W24A9KhJ5JNySZW1AHhd3s+eTduZZPD0Ok6Wtgzu5kquK 
    IinPdi5IbGjlg6mXGDbVkLd79RBdnbzFxsJFBtRr9r3mQZp9xfU7zSJW3kbizz6Jjk3h+S2nNbUu 
    f7rFrNN53ciRtj9RlKzQzmW7BDaFuq18DUfcr70muSkmd4DIqxYDGScjEjgIqLE2pYwIdDDRUGPD 
    MuwuIN3DgB051QwcE75SVrKBKsTHmFADmN3nKzmQ/JUQuLot0vW6WUFRMLVlAcl5C09SGPOcpow2 
    kjbuWx/bI7Aj4nAaAnmAYsWKIA3xVao+nPBOWmM0Lg7kpC4Dr5DwahmjH0/78aVUU23DEiMc0kR0 
    YDg5CxD8MUuj24w8tAjuzoHrvcsIYw+vWCTKvucnXwTlZ+K3QFB6gkct2zVOyQeYaPpkAnmPYS3W 
    DDpNmsx3lDcNr+5QWTsUbSQaFDddjHT/zoOJ8+iZKY/RujOI5vfXVwgN</ds:SignatureValue> 

Ahora podemos asegurarnos de que los ataques de repetición no sean posibles. Como cualquier otra persona no puede tener la misma clave privada, no hay manera de alterar las marcas de tiempo y aún así tener una firma válida.

Cuestiones relacionadas