Điểm:1

Kết nối SSL có cung cấp tính toàn vẹn không?

lá cờ us

Tôi mới sử dụng mật mã và tôi đang cố gắng triển khai ứng dụng trò chuyện an toàn bằng OpenSSL.

Tôi muốn đảm bảo rằng các thông báo công khai (sẽ được hiển thị cho tất cả người dùng) không thể bị thay đổi trong quá trình truyền.

Việc sử dụng kết nối SSL có đảm bảo điều đó không?

Nếu không, liệu sử dụng chữ ký điện tử để ký mọi thư nhằm chứng minh danh tính của người gửi có phải là một giải pháp thích hợp không?

dave_thompson_085 avatar
lá cờ cn
Ý bạn thực sự là SSL, cả hai phiên bản hiện đã bị hỏng hoặc TLS, giao thức hiện được sử dụng và triển khai bởi nhiều thứ (vẫn) được đặt tên cho SSL bao gồm cả OpenSSL? Bạn đã đọc thẻ 'tls' bạn đã sử dụng chưa? Di chuột qua nó để xem câu trả lời cho câu hỏi của bạn.
Gilles 'SO- stop being evil' avatar
lá cờ cn
@dave_thompson_085 Phân biệt giữa SSL và TLS là điều không cần thiết. Trong thực tế, chúng là từ đồng nghĩa. Chỉ xảy ra là các phiên bản cũ hơn (SSL 1, SSL 2, SSL 3) có cách đánh số và tên khác với các phiên bản mới hơn (TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3). Nhiều thư viện SSL không còn hỗ trợ SSL 3 nữa và thậm chí TLS 1.0 và 1.1 đang biến mất, ngay cả khi tên của thư viện hoặc chức năng bao gồm âSSLâ. Nếu một số người hỏi về âSSLâ và nó không nằm trong ngữ cảnh của phần mềm cũ hoặc các giao thức lịch sử, thì câu hỏi là về các phiên bản của giao thức được gọi là TLS.
kelalaka avatar
lá cờ in
[Dấu vết của các gói SSL có cung cấp bằng chứng về tính xác thực của dữ liệu không?](https://crypto.stackexchange.com/q/5455/18298)
Điểm:2
lá cờ cn

Đúng. Kết nối SSL cung cấp tính bảo mật và tính toàn vẹn của quá trình truyền: đối thủ (một người nào đó không phải là một trong hai bên giao tiếp) không thể tìm hoặc kiểm tra dữ liệu nào được truyền và không thể sửa đổi dữ liệu được truyền. Đối thủ cũng không thể phát lại dữ liệu.

Liên quan đến tính bảo mật, lưu ý rằng kẻ thù có thể quan sát máy nào đang kết nối với máy nào khi nào và lượng dữ liệu được trao đổi. Điều này có nghĩa là mặc dù kẻ thù không thể biết nội dung của tin nhắn, nhưng họ có thể đoán được ai đang nói chuyện với ai. Quyền riêng tư yêu cầu các biện pháp phòng ngừa bổ sung.

Đối với tính toàn vẹn, lưu ý rằng nó dựa trên tính xác thực. Tính toàn vẹn đảm bảo rằng khi Alice đang nói chuyện với ai đó, không ai ngoại trừ Alice và ai đó có thể sửa đổi dữ liệu mà họ đang trao đổi. Nhưng nếu Alice muốn nói chuyện với Bob, thì việc cô ấy có thể liên lạc không bị thay đổi với một bên không xác định sẽ không tốt cho cô ấy: cô ấy cần biết rằng cô ấy đang có liên lạc không bị thay đổi với Bob. TLS là giao thức máy khách-máy chủ và luôn đảm bảo tính xác thực của máy chủ. Nó có thể tùy chọn đảm bảo tính xác thực của khách hàng.

Xin lưu ý rằng các phiên bản TLS lên tới 1.2 có một số bộ mật mã bất thường với mức độ đảm bảo an ninh giảm.Mặc dù cấu hình mặc định của tất cả các thư viện TLS chính đều vô hiệu hóa các bộ mật mã đó theo mặc định, nhưng bạn cần phải cẩn thận để không vô tình kích hoạt chúng. TLS 1.3 chỉ có bộ mật mã bảo mật đầy đủ (lưu ý rằng xác thực ứng dụng khách vẫn là tùy chọn, vì TLS được thiết kế để hỗ trợ các ứng dụng khách không xác định kết nối với các máy chủ đã biết).

Cuối cùng, hãy nhớ rằng TLS chỉ có thể cung cấp các đảm bảo về bảo mật cho việc truyền tải. Rất khó để hai máy ngẫu nhiên trên Internet giao tiếp trực tiếp, do đó, trò chuyện thường chuyển qua một máy chủ trung tâm. Nếu bạn chỉ dựa vào TLS giữa từng máy khách và máy chủ, thì TLS sẽ bảo mật thư trong khi thư được truyền giữa máy khách 1 và máy chủ và khi thư được truyền giữa máy chủ và máy khách 2. Tuy nhiên, điều đó phụ thuộc vào phần mềm máy chủ để đảm bảo bảo mật của tin nhắn ở giữa — ví dụ: tin nhắn được chuyển đến đúng người nhận. Có nhiều giao thức tinh vi hơn có thể đảm bảo tính bảo mật từ đầu đến cuối của tin nhắn, một giao thức phổ biến là Dấu hiệu. Các ứng dụng sử dụng các giao thức như vậy vẫn có thể sử dụng TLS giữa các bước nhảy. Ví dụ, điều này có thể giúp bảo vệ quyền riêng tư bằng cách ẩn khỏi kẻ nghe trộm thông tin về ai đang nói chuyện với ai hoặc giúp chống lại việc tiêu tốn tài nguyên vào việc định tuyến các tin nhắn giả mạo mà nếu không chúng sẽ chỉ bị loại bỏ khi chúng đến được người nhận dự kiến).

Điểm:2
lá cờ my

TLS (tên thích hợp cho cái mà bạn đang gọi là SSL) cung cấp đảm bảo tính toàn vẹn từ đầu đến cuối; nghĩa là, người nhận có thể biết rằng những gì họ nhận được chính xác là những gì người gửi đã gửi.

Tuy nhiên, nó là một giao thức điểm-điểm; bất kỳ tin nhắn (máy ghi) nào là từ một người gửi cụ thể và đến một người nhận cụ thể.

Một cách để xem nó giống như nó là một 'đường ống' an toàn; một bên có thể đặt thứ gì đó vào trong đường ống và bên kia có thể lấy nó ra - không ai khác có thể nhìn vào thứ gì đã đi vào đường ống (ngoài thứ gì đó đã đi vào) và không ai khác có thể sửa đổi thứ gì trong đường ống (không có bị phát hiện). Tuy nhiên, TLS không đảm bảo về điều gì sẽ xảy ra với dữ liệu trước khi dữ liệu được đưa vào hệ thống hoặc điều gì sẽ xảy ra với dữ liệu sau khi dữ liệu rời khỏi hệ thống.

Bạn nói rằng bạn có tin nhắn công khai; làm thế nào để tin nhắn đến được nhiều người nhận? TLS chỉ cung cấp cho bạn các kết nối điểm-điểm (đường ống); làm thế nào để bạn biến nó thành một hệ thống phát sóng? Người gửi có gửi tin nhắn đến từng người nhận bằng các kết nối TLS độc lập không? Người nhận ban đầu có chuyển tiếp tin nhắn đến những người nhận khác không? Người gửi có đặt tin nhắn vào một khu vực chung mà những người nhận khác nhau có thể đọc được không?

Trong trường hợp đầu tiên, TLS sẽ cung cấp tính toàn vẹn từ đầu đến cuối (giả sử rằng người gửi có thể được tin cậy để gửi cùng một thông báo - TLS không làm gì để xác minh điều đó).

Trong trường hợp thứ hai (tin nhắn được chuyển tiếp), không có gì ngăn cản người nhận ban đầu sửa đổi tin nhắn mà nó chuyển tiếp - nếu anh ta có thể được tin cậy để không làm điều đó thì sẽ an toàn. Nếu anh ta không đáng tin cậy, thì cần có một số biện pháp bảo vệ bên ngoài TLS (chẳng hạn như chữ ký bằng khóa công khai của người gửi).

Trong trường hợp thứ ba (tin nhắn được đặt vào một khu vực chung), TLS không cung cấp biện pháp bảo vệ nào - bạn sẽ cần một thứ gì đó như chữ ký.

Điểm:1
lá cờ in

Có, TLS có thể cung cấp mã hóa đầu cuối, tính toàn vẹn và tính xác thực của thư để truyền tải - nó không được gọi là Bảo mật tầng truyền tải mà không có lý do.

Tuy nhiên, bạn cần thiết lập niềm tin cho cả hai bên: nếu bạn không thể xác định được khách hàng thì kẻ thù có thể giả dạng một khách hàng và có thể cũng sẽ nhận được tin nhắn. Nói chung với PKIX, bạn vẫn cần phải tin tưởng máy chủ (giống như trình duyệt vẫn làm), nhưng nếu bạn không tin tưởng thì kẻ thù có thể giả làm máy chủ và gửi tin nhắn đến máy khách; điều này sẽ không gây hại cho tính bảo mật hoặc tính toàn vẹn của chính thư sau khi thiết lập phiên, nhưng nó không phải là những gì bạn muốn.

Xác thực ứng dụng khách là tùy chọn cho TLS, thứ thường bị bỏ qua đối với các kết nối trình duyệt-máy chủ. Ví dụ: hội thảo trực tuyến, đây không phải là vấn đề: bạn đăng nhập bằng mật khẩu (có thể không an toàn lắm) nhưng nếu bạn thanh toán, bạn sẽ xác thực với ngân hàng của mình. Tuy nhiên, đối với ứng dụng trò chuyện, bạn cũng có thể muốn xác thực ứng dụng khách bằng chứng chỉ ứng dụng khách. Nếu PKI như vậy là không khả thi, bạn có thể thực hiện theo cách tương tự như trong trình duyệt: trước tiên hãy kết nối với máy chủ, sau đó xác thực ứng dụng khách bằng kết nối mà máy chủ đã được xác thực.

Ngoài ra, hãy lưu ý rằng nếu điểm cuối của kết nối không nằm ở máy chủ hoặc máy khách thì về cơ bản bạn có mã hóa điểm-điểm thay thế; bạn cũng cần phải tin tưởng các bên trung gian/kết nối không an toàn.


Ghi chú:

  • Nó có thể là một ý tưởng tốt để nhìn vào e.g. giao thức Tín hiệu, được nhắm mục tiêu nhiều hơn tới mục tiêu của các ứng dụng trò chuyện;
  • Tôi thực sự muốn giới thiệu TLS 1.3 nếu bạn sử dụng TLS;
  • Xin lưu ý rằng rất ít nếu có bất kỳ giao thức mật mã nào được bảo vệ trước máy tính lượng tử, vì vậy nếu bạn muốn giữ bí mật lâu hơn 10 năm, bạn cần tìm hiểu sâu hơn.
Maarten Bodewes avatar
lá cờ in
Hmm, bằng cách nào đó mà "chính trực" đã được dịch thành "bảo mật" khi tôi viết điều đó... Thật kỳ lạ khi tâm trí con người đôi khi (không) hoạt động.
Điểm:0
lá cờ bd

Tôi cũng chưa quen với mật mã, nhưng gần đây tôi đang làm việc trong một dự án SSL. Dưới đây là chi tiết hơn trong hướng dẫn về quy trình bắt tay SSL (TLS 1.2 và TLS 1.3)

Những gì quy trình bắt tay SSL thực hiện là tạo khóa đối xứng bằng cách sử dụng mã hóa bất đối xứng.

Trước bước trao đổi khóa, máy khách hoặc máy chủ (hoặc cả hai) sẽ kiểm tra danh tính của bên kia, được xác định trong tls_ process_cert_verify(). Và máy chủ sẽ gửi cho máy khách một chữ ký của bộ đệm bắt tay.

Sau bước trao đổi khóa, họ lấy bí mật chính của mình để tạo khóa chính (khóa đối xứng), được sử dụng để bảo vệ dữ liệu ứng dụng.

Vì vậy, đây là tài sản của CIA:
bảo mật: Khóa chính mã hóa dữ liệu ứng dụng.
Tính toàn vẹnï¼ Băm của bộ đệm bắt tay
Tính xác thực: Xác minh chứng nhận và chữ ký của bộ đệm bắt tay.

Bạn có thể theo dõi hàm SSL_Handshake() để biết tất cả những điều đã xảy ra trong quá trình tạo khóa chính.

Khi bắt tay xong. Lớp bản ghi TLS sử dụng hmac để bảo vệ tính toàn vẹn của phiên.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.