Hiểu hơn HTTPS với bồ câu đưa thư

1290

Cryptography là một topic khó hiểu. Nó cần các áp dụng toán học để chứng minh. Trừ khi bạn đang thực sự phát triển các hệ thống cryptography, phần lớn sự phức tạp đó không cần thiết để hiểu những gì đang diễn ra ở mức cao.

Alice, Bob và … chim bồ câu?

Bất kỳ hoạt động nào bạn làm trên Internet (đọc báo, mua đồ trên Amazon, tải lên 1 bức hình ảnh) đi xuống để gửi và nhận tin nhắn đến và từ máy chủ.

Thật khó vì nó có một chút trừu tượng nên chúng ta hãy tưởng tượng rằng những thông điệp đó được cung cấp bởi bồ câu đưa thư. Tôi biết rằng điều này có vẻ rất tùy ý, nhưng tôi tin rằng HTTPS hoạt động theo cùng một cách, mặc dù nhanh hơn rất nhiều.

Thay vì nói về máy chủ, client và hacker, chúng ta sẽ nói về Alice, Bob và Mallory. Nếu đây không phải là lần đầu tiên bạn tìm hiểu các khái niệm về cryptography, bạn sẽ nhận ra những cái tên đó vì chúng được sử dụng rộng rãi trong các tài liệu kỹ thuật.

Naive communication đầu tiên

Nếu Alice muốn gửi tin nhắn cho Bob, cô ấy sẽ gắn thông điệp trên chân bồ câu và gửi cho Bob. Bob nhận được thông báo, đọc nó.

Nhưng điều gì sẽ xảy ra nếu Mallory chặn bồ câu của Alice và thay đổi thông điệp? Bob sẽ không có cách nào biết được thông điệp đã được gửi bởi Alice đã bị sửa đổi trong chuyển hàng.

Đây là cách HTTP hoạt động. Nhưng tôi sẽ không gửi các chứng chỉ ngân hàng của tôi qua HTTP và cũng không nên.

Secret code

Sẽ ra sao nếu Alice và Bob xảo quyệt. Họ đồng ý rằng họ sẽ viết thư của họ bằng cách sử dụng secret code. Họ sẽ chuyển mỗi chữ bằng 3 vị trí trong bảng chữ cái. Ví dụ D → A, E → B, F → C. Thông điệp “secret messagt” sẽ là “pbzobq jbppxdb”.

Nếu Mallory chặn được chim bồ câu, cô ấy sẽ không thể thay đổi thông điệp thành một thông tin có ý nghĩa và cũng không hiểu những gì họ nói, bởi vì cô ấy không biết code. Nhưng Bob chỉ đơn giản có thể áp dụng code ngược lại và giải mã thông điệp từ A → D, B → E, C → F. Văn bản mật mã “pbzobq jbppxdb” sẽ được giải mã lại thành “secret message”.

Success!

Đây được gọi là cryptography về mật mã đối xứng, bởi vì nếu bạn biết cách mã hóa tin nhắn cũng như cách giải mã nó.

Code tôi mô tả ở đây thường được gọi là Caesar cipher. Trong cuộc sống thực, chúng ta sử dụng code giả mạo và phức tạp hơn, nhưng ý tưởng chính là.

Làm thế nào để quyết định key?

Cryptography về mật mã đối xứng rất an toàn nếu không có ai ngoài người gửi và người nhận biết chìa khóa đã được sử dụng. Trong mật mã Caesar, chìa khóa là một sự bù đắp cho bao nhiêu chữ cái mà chúng ta dịch chuyển từng chữ. Trong ví dụ của mình, tôi sử dụng một offset cho 3, nhưng cũng có thể sử dụng 4 hoặc 12.

Vấn đề xảy ra nếu Alice và Bob không gặp nhau trước khi gửi tin nhắn với pigeon, họ sẽ không có cách nào để thiết lập một key an toàn. Nếu họ gửi chính bản tin, Mallory sẽ chặn thông điệp và tìm hiểu về key. Điều này sẽ cho phép Mallory đọc hoặc thay đổi thông điệp như mong muốn trước và sau khi Alice và Bob bắt đầu mã hóa tin nhắn.

Đây là ví dụ điển hình của Man in the Middle Attack và cách duy nhất để tránh nó là thay đổi hệ thống mã hóa tất cả lại.

Pigeons dưa boxes

Vì vậy, Alice và Bob đã đưa ra một hệ thống tốt hơn. Khi Bob muốn gửi tin nhắn cho Alice, cô ấy sẽ làm theo các bước sau:

  • Bob gửi một chú chim bồ câu tới Alice mà không có bất kỳ tin nhắn nào.
  • Alice gửi con chim bồ câu trở lại mang một cái hộp với khóa mở, nhưng giữ chìa khoá.
  • Bob đưa tin nhắn vào box, khóa lại và gửi hộp cho Alice.
  • Alice nhận được box, mở nó và đọc tin nhắn.

Bằng cách này Mallory không thể thay đổi thông điệp bằng cách chặn pigeon, bởi vì cô ấy không có chìa khóa. Quá trình tương tự được theo khi Alice muốn gửi cho Bob một thông báo.

Alice và Bob chỉ sử dụng thuật ngữ được biết đến là asymmetric key cryptography. Nó được gọi là bất đối xứng, bởi vì ngay cả khi bạn có thể mã hóa một tin nhắn (khóa hộp) bạn không thể giải mã nó (mở khóa).
Trong bài phát biểu, box được biết đến như là public key và chìa để mở nó được gọi là private key.

Cách để tin tưởng the box?

Nếu quan tâm bạn có thể nhận thấy rằng chúng tôi vẫn gặp vấn đề. Khi Bob nhận được box đó thì làm thế nào anh ta có thể chắc chắn nó đến từ Alice và Mallory không chặn pigeon và thay đổi hộp với cái mà cô ta có chìa khóa?

Alice quyết định rằng cô sẽ ký tên vào box, khi Bob nhận hộp kiểm tra chữ ký và biết rằng đây là box đến từ Alice.

Một số bạn có thể đặt ra câu hỏi, làm thế nào mà Bob nhận ra chữ ký của Alice ở đâu. Alice và Bob cũng gặp phải vấn đề này, vì vậy họ quyết định rằng, thay vì Alice ký tên vào hộp, Ted sẽ ký tên vào hộp.

Vậy Ted là ai? Anh ta là một người rất nổi tiếng đáng tin cậy. Ted đã ký tên cho tất cả mọi người và mọi người tin tưởng rằng anh ta sẽ chỉ ký tên vào box của những người hợp pháp.

Ted sẽ chỉ ký một box của Alice nếu anh ta chắc chắn rằng người yêu cầu chữ ký là Alice. Vì vậy, Mallory không thể có được Alice box ký bởi Ted thay mặt cho cô ấy vì Bob sẽ biết rằng box bị tráo bởi vì Ted chỉ ký các box sau khi xác minh danh tính của họ.

Ted về mặt kỹ thuật thường được gọi là Cơ quan chứng nhận và trình duyệt bạn đang đọc bài viết này đi kèm với các chữ ký của các Cơ quan chứng nhận khác nhau.

Ted về mặt kỹ thuật thường được gọi là Certification Authority và browser bạn đang đọc bài viết này đi kèm với các chữ ký của các Certification Body khác nhau.

Vì vậy, khi bạn kết nối với trang web lần đầu tiên bạn tin cậy hộp vì bạn tin rằng Ted sẽ cho bạn biết rằng hộp này là hợp pháp hay không.

Boxes quá nặng

Alice và Bob bây giờ có một hệ thống đáng tin cậy để giao tiếp, nhưng họ nhận ra rằng pigeon carrying box chậm hơn so với những pigeon chỉ mang theo tin nhắn.

Họ quyết định rằng họ sẽ sử dụng box method (asymmetric cryptography) chỉ để chọn key để mã hóa tin nhắn bằng cách sử dụng mật mã đối xứng với (nhớ Caesar cipher).

Bằng cách này, họ nhận được sự tốt nhất của cả hai thế giới. Độ tin cậy của asymmetric cryptography và hiệu quả của symmetric cryptography.

Trong thế giới thực, không có pigeon chậm, tuy nhiên việc mã hóa các tin nhắn sử dụng asymmetric cryptography chậm hơn so với sử dụng symmetric cryptography, vì vậy chúng ta chỉ sử dụng nó để trao đổi các encryption key.

TopDev via Freecodecamp