2010-01-28 22 views
5

Tôi không chắc chắn cách đặt cụm từ câu hỏi này, vì vậy xin lỗi trước nếu đó là bản sao của nội dung khác.Thông tin cơ bản về bảo mật giao thức dựa trên chuỗi

Tôi muốn sanity kiểm tra cách tôi đã bảo đảm ứng dụng dựa trên xoắn của mình và nghĩ rằng tôi đã làm tốt công việc, nhưng đã hơn một thập kỷ kể từ khi tôi viết bất kỳ thứ gì sử dụng ổ cắm thô hoặc được quản lý.

Giao dịch xác thực: Khách hàng kết nối và ngay lập tức phản hồi thử thách được gửi lại với chuỗi ký tự 16 ký tự. Phía máy khách có tên người dùng & mật khẩu, mật khẩu được chuyển đổi sha1 (muối + sha1 (mật khẩu)) và thông tin đăng nhập được gửi lại cho máy chủ dưới dạng {tên người dùng, mật khẩu}. Về phía máy chủ, xác thực có mẫu tra cứu chuẩn (nếu người dùng tồn tại và có mật khẩu bằng đầu vào rồi cấp).

Nếu kết nối giữa người dùng & khách hàng bị mất, lớp giao thức tự đánh dấu là bị bẩn và ngắt kết nối khỏi đối tượng người dùng. Bất kỳ lúc nào sau thời điểm này, để truy cập lại đối tượng người dùng, khách hàng sẽ phải lặp lại quy trình xác thực bằng một muối mới.

Tôi có thiếu gì đó không? Có cách tiếp cận tốt hơn/an toàn hơn cho giao thức dựa trên luồng ký tự không?

+0

Điều này về cơ bản http://www.ietf.org/rfc/rfc2617.txt Xác thực thông báo? –

+0

@S.Lott Khá gần thực sự vì tôi đã mô hình hóa phần thực hiện hiện tại của tôi một phần sau nó. – David

+0

@David: Tại sao bạn không sử dụng nó hoàn toàn? Tại sao bạn bỏ qua qop và khách hàng nonce? –

Trả lời

6

Giao thức bạn mô tả giải quyết một cuộc tấn công, đó là cuộc tấn công phát lại. Tuy nhiên, bạn rất dễ bị tấn công MITM. Kết nối TCP sẽ không rơi khi kẻ tấn công di chuyển vào giao thức. Hơn nữa bất cứ điều gì được chuyển qua hệ thống này có thể được đánh hơi. Nếu bạn đang ở trên mạng không dây tại một quán cà phê, tất cả mọi người trong khu vực sẽ có thể đánh hơi mọi thứ được truyền đi và sau đó là MITM phiên được xác thực. Một điểm khác là sha1() đã được chứng minh là không an toàn, bạn nên sử dụng sha256 cho bất kỳ bảo mật nào liên quan.

KHÔNG BAO GIỜ QUAN TRỌNG BÁNH XE, đặc biệt là khi nói đến bảo mật.

Sử dụng SSL! Mọi người đều sử dụng SSL và nó có một lịch sử lâu dài của secuirty đã được chứng minh, và đó là một cái gì đó bạn không thể xây dựng. SSL Không chỉ giải quyết Man trong Middle Attacks mà bạn còn có thể sử dụng Certificates thay vì mật khẩu để xác thực cả client và server mà làm cho bạn miễn dịch với sức mạnh vũ phu. Mặt trời sẽ cháy ra trước khi kẻ tấn công có thể gây sức mạnh cho chứng chỉ RSA 2048bit. Cha nhiều hơn, bạn không cần phải lo lắng về một giọt nước mắt đêm trước đánh hơi sự lây truyền.

Hãy nhớ rằng OpenSSL là MIỄN PHÍ, tạo chứng chỉ MIỄN PHÍ và việc hát chứng chỉ là MIỄN PHÍ. Mặc dù lý do duy nhất tại sao bạn muốn ký chứng chỉ là nếu bạn muốn triển khai PKI, điều này có lẽ không cần thiết. Máy khách có thể mã hóa khóa công khai của máy chủ để xác minh kết nối. Máy chủ có thể có cơ sở dữ liệu về khóa công khai của khách hàng. Hệ thống này sẽ tự chứa và không yêu cầu OCSP hoặc CRL hoặc bất kỳ phần nào khác của Cơ sở hạ tầng khóa công khai.

+6

+1 SSL. Sử dụng SSL không phải là một viên đạn ma thuật, và sẽ có (và đã được) lỗ hổng bảo mật. Tuy nhiên, có rất nhiều người chú ý đến SSL và sửa các lỗ hổng này cho bạn. Khi bạn phát minh ra một chương trình bảo mật mới, rất có khả năng những người duy nhất tìm kiếm lỗ hổng trong đó là những người đang cố tấn công bạn. Họ sẽ không sửa chữa các lỗ hổng của bạn khi họ tìm thấy chúng, chúng sẽ khai thác chúng. –

+0

Aah vâng, tôi thấy sự an toàn trong cuộc tranh luận tối tăm. Bạn không biết làm thế nào an toàn một cái gì đó là cho đến khi nó bị hỏng. Càng có nhiều con mắt bạn gặp vấn đề thì hệ thống càng tốt. – rook

+0

Tôi giả sử bạn tin rằng giao thức chính nó là âm thanh nếu đề xuất của bạn bổ sung cho các lớp vận chuyển? – David

1

Xác thực của bạn có vẻ chắc chắn nhưng dễ bị man in the middle attacks vì nó không đảm bảo tính toàn vẹn của kết nối với máy chủ.

Thay vào đó, tôi khuyên bạn nên triển khai giao thức SRP 6. Nó được chứng minh là an toàn, đảm bảo tính toàn vẹn của kết nối và thậm chí tạo ra một bí mật chung có thể được sử dụng để thiết lập một số mã hóa đối xứng dạng. Giao thức có vẻ hơi khó khăn ngay từ cái nhìn đầu tiên nhưng thực sự khá dễ thực hiện. Ngoài ra còn có một Demo JavaScript có sẵn trên project website và liên kết đến một số triển khai bằng các ngôn ngữ khác nhau.

+0

Huh, bạn nghĩ gì sai với tôi? Tôi đoán nếu SSL sẽ là một lựa chọn David woudn't đã hỏi câu hỏi này. Và bằng cách này, SRP không chỉ an toàn hơn mà còn có nhiều ưu điểm khác so với SSL. xem: http://srp.stanford.edu/analysis.html – x4u

+0

Bạn cũng có sáng tạo lại những chiếc xe trên xe để bạn có thể lái xe đi làm không? – rook

+3

@unknown: _ "mọi thứ đều sử dụng ssl" _ ?! Có thật không?? Mọi điều? Tôi đồng ý rằng SSL là tiêu chuẩn trong các giao tiếp giữa máy tính với máy tính dựa trên Internet, nhưng điều đó hầu như không phải mọi thứ. Có rất nhiều trường hợp trong đó chi phí của SSL quá lớn (các thiết bị nhúng) hoặc khi TCP không có sẵn để SSL không nằm trong câu hỏi. Ngoài ra còn có nhiều trường hợp trong đó chỉ cần xác thực là cần thiết và mã hóa toàn dòng không phải là. –

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