2012-05-15 38 views
9

Ai đó có thể đặt tâm trí của tôi nghỉ ngơi và xem liệu thiết lập này có xác minh rằng tệp đã đến từ tôi hay không. Một ý tưởng về cách bảo mật này sẽ là tuyệt vời và bất kỳ vectơ tấn công tiềm năng nào.Ký DSA an toàn

  1. Tạo khóa công khai và riêng tư với DSACryptoServiceProvider.
  2. Thêm khóa công khai như tài nguyên ứng dụng
  3. Tạo một bản cập nhật
  4. Nhận dsa hash của cập nhật bằng tin quan trọng
  5. Gửi băm và cập nhật cho ứng dụng (Hãy cho chúng có thể bị chặn/thay đổi)
  6. Xác băm là chính xác bằng cách sử dụng khóa công khai.
  7. Nếu xác nhận áp dụng cập nhật

Bản cập nhật là một exe và sẽ được thực hiện vì vậy tôi muốn chắc chắn nó không được thực hiện nếu có ai thay thế hoặc tampers với nó.

EDIT: Đã cập nhật điểm 6 vì khóa công khai không thực sự tạo băm, chỉ cần xác minh nó. Tôi nghĩ rằng đó là phần tôi đang đấu tranh với sự an toàn của.

+2

Đó chính xác là thuật toán đúng, ngoại trừ việc bạn không _hash_ bằng khóa riêng của mình; bạn tạo ra một băm và sau đó _encrypt hash_ với khóa riêng của bạn. Người nhận sử dụng khóa _public_ của bạn để giải mã và xác minh hàm băm. Tôi cũng giả sử khóa riêng của bạn nằm trên một phương tiện bị cô lập (một khóa USB hoặc máy tính không nối mạng). :-) Khóa riêng của bạn phải được giữ bí mật, nhưng tất cả các thành phần khác (bản cập nhật, băm và khóa công khai của bạn) không cần được giữ an toàn. –

+0

Cảm ơn Adam, Chỉ cần một vài điểm tôi nghĩ rằng tôi đang thiếu. Làm thế nào để tôi nhận được băm từ DSACryptoProvider mà không có khóa riêng tư? Tôi nghĩ hash = DSACryptoServiceProvider.fromxmlstring (privatekey) .signdata (fileToGetHashFrom) - Điểm thứ hai. Tôi không nghĩ rằng tôi có thể mã hóa dữ liệu với DSA, tôi có nên sử dụng cái gì khác không? Ngoài ra, bạn không thường mã hóa dữ liệu bằng khóa công khai và giải mã bằng khóa riêng tư. Chìa khóa của tôi là vòng tròn sai trong trường hợp đó? Xin lỗi nếu tôi ngu ngốc ở đây ;-) – Oli

+2

@Oli tạo chữ ký số thường được mô tả như là một quy trình gồm 2 bước bao gồm 1) tạo ra một băm dữ liệu được ký, sau đó 2) chuyển đổi băm * bằng * khóa riêng, theo cách nó có thể được xác minh bằng khóa công khai và không thể giả mạo được. Bản chất một chiều của quá trình tạo/xác minh mang những điểm tương đồng với mã hóa/giải mã, chỉ sử dụng khóa công khai và riêng tư "ngược lại". 'DSACryptoServiceProvider' sẽ xử lý tất cả các chi tiết này theo cách bạn đã nhận xét, nhưng tôi nghĩ điểm của Adam là khóa riêng tư không được sử dụng để tạo băm. – shambulator

Trả lời

1

Cách tiếp cận của bạn có vẻ tốt. Câu hỏi còn lại là ứng dụng của bạn an toàn như thế nào trên máy khách. Có cơ hội ai đó có thể giả mạo với tệp thi hành không? Có thể chuyển khóa công khai trong tài nguyên ứng dụng?

Đó là nhận được lý thuyết ở đây, nhưng tôi wold đề nghị một sửa đổi nhỏ để bước 6: Hãy cụ thể mà chính xác khóa công khai bạn muốn sử dụng. Nếu một số kẻ tấn công có thể chuyển khóa trong tài nguyên ứng dụng, anh ta có thể gửi một gói đã thay đổi với một băm chính xác cho một khóa riêng khác. Điều này có thể chỉ là một mối quan tâm nhỏ kể từ khi kẻ tấn công đã sửa đổi phần mềm của bạn. Nhưng nếu anh ta chỉ có thể thay thế tài nguyên ứng dụng và không có gì khác anh ta sẽ có thì khả năng để cho ứng dụng của bạn tự cập nhật bằng mã độc của mình.