2012-04-05 26 views
6

Tôi đang cố gắng hiểu khái niệm về dấu thời gian trong tiêu đề yêu cầu trong các dịch vụ web nhưng bằng cách nào đó vẫn không thể hiểu đầy đủ cách hoạt động của nó.Dấu thời gian giúp ngăn ngừa tấn công Replay trong webservices

Tôi sẽ đánh giá cao nếu ai đó có thể giải thích việc sử dụng dấu thời gian từ đầu đến cuối theo yêu cầu và phản hồi của các dịch vụ web.

Đây có phải là phương pháp ngăn chặn các cuộc tấn công phát lại hay không?

Trả lời

6

Dấu thời gian của chính nó sẽ không đủ, nhưng thường nó được kết hợp với cơ chế băm để đảm bảo rằng các giá trị không bị giả mạo.

Ý tưởng là khách hàng tạo ra các tham số và sử dụng khóa riêng của họ để băm các tham số. Sau đó, [hash + original value + public key] được gửi cùng với yêu cầu. Máy chủ có thể sử dụng khóa công khai để tra cứu khóa cá nhân và đảm bảo rằng các thông số là chính xác.

Dấu thời gian được sử dụng, cùng với một số ngưỡng, để đảm bảo rằng yêu cầu cụ thể không thể được sử dụng nhiều lần. Nếu ngưỡng nhỏ (vài trăm mili giây) thì tấn công phát lại hầu như là không thể.

+0

Giá trị của dấu thời gian được mã hóa chưa? Làm thế nào để máy chủ xác nhận rằng yêu cầu gửi đến có dấu thời gian hợp lệ và nằm trong ngưỡng –

+0

@Kunal - Giống như tôi đã nói, máy khách Hashes các tham số đầu vào và gửi băm cùng với các đầu vào. Các máy chủ băm như một tổng kiểm tra chống giả mạo. Máy chủ sử dụng khóa riêng tương ứng với khóa công khai của người dùng để tính toán giá trị băm của riêng chúng. Nếu hai băm phù hợp, thì bạn biết các giá trị được cung cấp là hợp pháp và không bị giả mạo. – Josh

+0

@Kunal, không có dấu thời gian nào không được mã hóa và phải nằm trong tiêu đề xà phòng. – Don

2

Dấu thời gian không được mã hóa và phải nằm trong tiêu đề xà phòng.

<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> 

Nếu hết hạn thời gian sau thời gian tạo, nó có thể giảm thiểu tấn công phát lại. Thực ra nó không chỉ là dấu thời gian. Bạn nên thêm thông báo của dấu thời gian vào phầ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> 

Vì vậy, ở phía máy chủ, các thông báo này phải khớp nhau. Thậm chí đó không phải là tất cả, sau đó bạn đăng nhập signInfo toàn bộ với khóa riêng và thêm giá trị chữ ký cho phần tử Signature như sau.

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

Bây giờ chúng tôi có thể đảm bảo rằng không thể thực hiện lại các cuộc tấn công phát lại. Vì bất kỳ ai khác không thể có cùng khóa riêng và do đó không có cách nào để thay đổi dấu thời gian và vẫn có chữ ký hợp lệ.

Các vấn đề liên quan