Giới thiệu về Mật Mã Khóa Công Khai và PGP
Cập nhật lần cuối: May 09, 2018
PGP là viết tắt của từ Pretty Good Privacy (Bảo mật rất mạnh). Nó thật sự bảo mật rất mạnh. Nếu sử dụng đúng cách, PGP có thể bảo vệ các nội dung tin nhắn của bạn, văn bản, và thậm chỉ cả tập tin khỏi bị đọc bởi cả các chương trình theo dõi được tài trợ nhiều tiền của chính phủ. Khi Edward Snowden nói về “mã hóa hiệu nghiệm”, thứ mà anh ta nói chính là PGP và phần mềm liên quan đến nó. Cần lưu ý rằng đã có nghe đến việc chính phủ ăn trộm các chìa khóa riêng trong máy tính của một người nào đó (bằng cách lấy đi máy tính, hoặc cài mã độc trong máy tính qua cách xâm nhập máy trực tiếp hoặc bằng lừa phỉnh (phishing)). Cách này tháo gỡ lớp bảo vệ và thậm chí cho phép đọc các email cũ. Điều này có thể so sánh với việc cửa nhà có một bộ khóa không thể cạy được, nhưng ai đó vẫn có thể móc trộm chìa khóa của bạn ở ngoài đường, rồi sao chép nó và lẳng lặng trả lại vào túi của bạn- và sau đấy xâm nhập vào nhà của bạn mà không cần phải bẻ khóa.
Rất tiếc PGP không phải dễ hiểu và cũng khó để sử dụng. Loại mã hóa kiến cố mà PGP sử dụng – mã hóa chìa khóa công khai- rất tuyệt vời, nhưng rất khó hiểu. Phần mềm PGP đã được lưu hành từ năm 1991, nó cũng cổ lổ như những phiên bản đầu của hệ điều hành Microsoft Windows, và giao diện mạo của nó cũng không thay đổi gì nhiều từ dạo ấy.
Tin vui là có rất nhiều phần mềm hiện nay che dấu bớt các thiết kế cổ của PGP và làm nó dễ sử dụng hơn, đặc biệt khi mã hóa và xác minh email- cũng là mục đích chính của PGP. Chúng tôi đã kèm theo hướng dẫn cài đặt và sử dụng phần mềm này.
Trước khi mày mò về PGP hoặc các phần mềm khác sử dụng PGP, thì cũng nên dành thì giờ để hiểu căn bản của mã hóa chìa khóa công khai: nó có thể làm gì cho bạn, nó không thể làm gì, và khi nào bạn nên sử dụng nó.
Câu chuyện về hai chiếc khóa anchor link
Khi chúng ta sử dụng mã hóa để chống lại theo dõi, đây là điều chúng ta muốn làm: Chúng ta có một tin nhắn dễ đọc như “chào mẹ”. Chúng ta mã hóa nó thành một tin nhắn mật mã không ai đọc được (nó trở thành “OhsieW5ge+osh1aehah6,”). Chúng ta gửi tin nhắn mã hóa này qua mạng internet, mà trên đó có nhiều người có thể thấy nó, nhưng hy vọng là không ai hiểu nó. Sau đó, khi tin nhắn đã đến nơi, người nhận mà chúng ta gửi và chỉ người nhận mà chúng ta muốn gửi đến có cách nào đó giải mã tin nhắn thành tin nhắn ban đầu.
Bằng cách nào người nhận biết cách giải mã tin nhắn, trong khi người khác lại không biết? Điều này là bởi vì họ biết các thông tin phụ trội mà không ai khác biết. Hãy gọi thông tin phụ trội này là khóa giải mã, bởi vì nó đã mở khóa tin nhắn nằm trong dòng mã đó.
Bằng cách nào người nhận biết được khóa này? Bởi vì người gửi trước đó đã bảo cho họ chìa khóa là gì, dầu nó là “hãy đặt tin nhắn đó trước gương” hoặc “lấy mỗi ký tự và đổi nó thành kí tự tiếp theo trong bảng chữ cái”. Tuy nhiên có vấn đề với chiến thuật này. Nếu bạn lo lắng về việc bị dọ thám khi bạn gửi tin nhắn mã hóa, thì bằng cách nào bạn gửi chìa khóa cho người nhận mà cũng không để người khác dọ thám cuộc nói chuyện đó? Thật là vô ích nếu như gửi một tin nhắn được mã hóa một cách tài tình mà kẻ tấn công bạn đã biết chìa khóa để giải mã. Và nếu bạn có một cách bí mật để gửi chìa khóa giải mã, vậy tại sao bạn không dùng cách này cho toàn bộ tin nhắn bí mật?
Mật mã khóa công khai có một giải pháp tài tình cho vấn đề này. Mỗi người trong cuộc trò chuyện có cách để tạo ra hai chìa khóa. Một chiếc là khóa riêng, giữ cho riêng mình và không bao giờ để lộ cho ai biết. Chìa khóa kia là khóa công khai, khóa này họ trao cho bất kỳ ai muốn liên lạc với họ. Ai thấy khóa công khai cũng được, không sao cả. Bạn còn có thể đưa nó lên mạng để mọi người đều thấy.
Những chiếc “khóa” tự bản thân chúng là những dãy số rất lớn, với các đặc tính toán học đặc biệt. Khóa công khai và khóa riêng được kết nối với nhau. Nếu bạn mã hóa thứ gì đó bằng khóa công khai, thì ai đó khác có thể giải mã nó bằng cách dùng khóa riêng cùng bộ.
Hãy xem nó hoạt động như thế nào. Bạn muốn gửi một tin nhắn bí mật cho Aaray. Aaray có một khóa riêng, nhưng cũng như bao người sử dụng mã hóa khóa công khai thông thạo, anh ta đưa khóa công khai của anh ấy lên trang mạng của anh ta. Bạn tải xuống khóa công khai, mã hóa tin nhắn bằng khóa công khai đó, và gửi nó cho anh ta. Anh ta có thể giải mã nó, bởi vì anh ta có khóa cá riêng tương ứng- mà không ai khác có thể giải mã.
Chữ ký của thời đại anchor link
Mật mã khóa công khai loại bỏ vấn đề phải đưa lén khóa giải mã cho người mà bạn muốn gửi tin nhắn đến, vì người này đã có sẵn chìa khóa. Bạn chỉ cần cần khóa mã hóa công khai của người nhận, mà họ có thể đưa cho mọi người, kể cả là gián điệp. Bởi vì nó chỉ hữu ích để mã hóa một tin nhắn, cho nên nó vô ích nếu ai đó tìm cách giải mã.
Nhưng còn nữa! Nếu bạn mã hóa một tin nhắn bằng khóa công khai nào đó, thì nó chỉ có thể được giải mã bằng khóa riêng tương hợp. Nhưng điều ngược lại cũng đúng luôn. Nếu bạn mã hóa một tin nhắn bằng khóa riêng nào đó, thì nó cũng chỉ có thể được giải mã bằng khóa công khai tương hợp.
Tại sao điều này hữu ích? Thoạt nhìn qua, thì dường như không có gì ích lợi khi tạo tin nhắn bí mật với khóa riêng mà mọi người trên trái đất này có thể mở được (hoặc ít nhất, những người có khóa công khai của bạn). Nhưng giả sử như tôi viết một tin nhắn “Tôi hứa sẽ trả Aszul 100 đô”, và sau đó biến nó thành một tin nhắn bí mật với khóa riêng của tôi. Bất kỳ ai có thể giải mã tin nhắn đó- nhưng chỉ có một người có thể viết tin đó: người nào có khóa riêng của tôi. Nếu tôi bảo vệ khóa riêng thật kỹ càng, thì có nghĩa rằng người đó là tôi, và chỉ có thể là tôi. Kết quả là, bằng cách mã hóa nó với khóa riêng, tôi đảm bảo rằng nó chỉ có thể đến từ tôi. Nói cách khác, tôi đã ký vào tin nhắn số này tương tự như tôi ký vào một tin nhắn ở ngoài đời.
Ký tên cũng khiến cho tin nhắn không bị sửa đổi, giả mạo. Nếu ai đó cố thay đổi “Tôi hứa sẽ trả Aszul 100 đô” thành “Tôi hứa sẽ trả Bob 100 đô”, họ sẽ không thể ký lại tin nhắn đó dùng khóa riêng của tôi. Do đó một tin nhắn được ký thì bảo đảm là đến từ một nguồn nào đó, và không bị thay đổi trên đường chuyển tải.
Vậy mật mã khóa công khai giúp bạn mã hóa và gửi tin nhắn một cách an toàn đến bất kỳ ai mà bạn biết khóa công khai của họ. Nếu người khác biết khóa công khai của bạn, họ có thể gửi bạn tin nhắn, mà chỉ có bạn mới có thể giải mã. Và nếu người khác biết khóa công khai của bạn thì bạn có thể ký vào tin nhắn để họ biết tin nhắn chỉ có thể đến từ bạn. Và nếu bạn biết khóa công khai của ai đó, bạn có thể giải mã một tin nhắn được họ ký tên và biết chắc là nó phải đến từ họ.
Đến đây thì thấy rõ là mật mã khóa công khai càng trở nên hữu dụng thì càng nhiều người biết khóa công khai của bạn. Và cũng thấy rõ là bạn phải giữ an toàn cho khóa riêng của mình. Nếu ai đó có một bản sao của khóa riêng của bạn, họ có thể giả dạng làm bạn, và ký vào tin nhắn khẳng định rằng chúng được viết bởi bạn. PGP có một chức năng để bạn hủy khóa riêng, và cảnh báo mọi người rằng nó không còn đáng tin nữa, nhưng đó cũng không phải là giải pháp tốt. Điều quan trọng nhất của việc sử dụng hệ thống mật mã khóa công khai là bảo vệ khóa riêng của bạn thật cẩn thận.
Cách làm việc của PGP anchor link
Pretty Good Privacy chủ yếu quan tâm đến chi tiết tạo và sử dụng khóa công khai và khóa riêng. Bạn có thể tạo cặp khóa công khai/riêng với PGP, bảo vệ khóa riêng với mật khẩu , và sử dụng nó cùng khóa công khai để ký tên và mã hóa văn bản. Phần mềm cũng cho phép bạn tải xuống các khóa công khai của người khác, và tải khóa công khai của bạn lên “máy chủ khóa công khai”, là kho chứa nơi người khác có thể tìm ra khóa của bạn. Hãy xem hướng dẫn để cài đặt các phần mềm tương thích PGP trong phần mềm email.
Nếu có một điều duy nhất mà bạn cần nhớ trong mục tổng quan này, thì đó là: bạn nên giữ khóa riêng của bạn ở nơi an toàn, và bảo vệ nó bằng mật khẩu thật dài. Bạn có thể đưa khóa công khai cho bất kỳ ai bạn muốn liên lạc với nhau, hoặc đưa cho ai muốn kiểm xem tin nhắn có thực sự do bạn gửi đi không.
PGP cao cấp: Chuỗi tin cậy anchor link
Bạn có thể đã nhận một lỗ hổng tiềm tàng trong cách mật mã khóa công khai hoạt động. Giả sử tôi bắt đầu phân phát một chìa khóa công khai tôi nói là của Barack Obama. Nếu mọi người tin tôi, họ có thể sẽ gửi các tin nhắn mật đến Barack, được mã hóa với khóa đó. Hoặc có thể họ tin thứ gì được ký tên bằng khóa đó là tuyên bố chính thức của Barack. Điều này khá hiếm, vậy mà nó đã xảy ra cho vài người ở ngoài đời, luôn cả một số tác giả của tài liệu này- vài người viết thư đến họ đã bị lừa phỉnh! (Chúng tôi không chắc chắn trong các trường hợp này là những người làm khóa giả thực sự có thể chặn đọc các tin nhắn trên đường chuyển tải, hay đây chỉ là một loại trò chơi khăm để gây bất tiện cho mọi người khi muốn nói chuyện được bảo mật.)
Một kiểu tấn công lén lút khác là kẻ tấn công ngồi giữa hai người đang nói chuyện qua mạng, nghe trộm toàn bộ câu chuyện của họ, và thi thoảng nhét thêm những tin nhắn sai lạc vào câu chuyện. Cũng vì mô hình thiết kế của internet là một hệ thống chuyển tải các tin nhắn xuyên qua nhiều máy tính và thành phần khác nhau, cách tấn công này hoàn toàn có thể xảy ra. Trong điều kiện này (được gọi là “cuộc tấn công với kẻ trung gian”), trao đổi khóa mà không có quy ước trước thì trở nên rất rủi ro. “Đây là khóa của tôi”, một câu thông báo của một người nghe giọng giống như Barack Obama, và gửi cho bạn một tập tin khóa công khai. Có gì bảo đảm là không có ai đó đợi đến thời điểm đó, phá đường truyền chìa khóa của Obama, và sau đó chèn khóa của họ vào?
Làm cách nào chúng ta chứng minh được một khóa nào đó thực sự thuộc về một người nào đó? Có một cách là lấy khóa trực tiếp từ họ, nhưng cách này không hay ho gì hơn việc lấy được khóa bí mật mà không bị ai phát hiện. Nhưng người ta vẫn trao đổi khóa công khai khi họ gặp nhau, riêng tư hay tại các tiệc ký nhận khóa.
PGP có cách giải pháp tốt hơn gọi là “chuỗi tin cậy”. Trong chuỗi tin cậy, nếu tôi tin một chiếc chìa khóa thuộc về một ai đó, tôi có thể ký tên vào khóa đó, và tải khóa đó (và cả chữ ký nữa) lên máy chủ khóa công khai. Máy chủ khóa công khai này sẽ trao khóa cho bất kỳ ai yêu cầu.
Đại khái là nếu có càng nhiều người mà tôi tin cậy đã ký vào một chìa khóa thì tôi càng tin là khóa đó thực sự thuộc về chủ nhân của nó. PGP cho bạn ký tên vào khóa của người khác, và cũng cho bạn tin vào những người đã ký khác, do đó nếu họ ký tên vào một khóa, phần mềm của bạn sẽ tự động tin rằng khóa đó hợp lệ.
Chuỗi tin cậy có những thách thức của riêng nó, và các tổ chức như EFF vẫn đang tìm giải pháp tốt hơn. Nhưng cho đến hiện này, nếu bạn muốn có cách nào khác hơn việc trao đổi khóa tận tay thì việc dùng chuỗi tin cậy và mạng lưới máy chủ khóa công khai vẫn là an toàn nhất.
Siêu dữ liệu: Điều gì mà PGP không thể làm được? anchor link
PGP chủ yếu là đảm bảo rằng nội dung của tin nhắn được bảo mật, thật, và không bị xáo trộn, giả mạo. Nhưng đó không phải là điều quan tâm về riêng tư duy nhất mà bạn lo ngại. Như chúng tôi đã nêu ra, thông tin về tin nhắn của bạn cũng phơi bày nhiều chi tiết như phần nội dung (hãy xem “siêu dữ liệu ”). Nếu bạn trao đổi tin nhắn PGP với một người bất đồng chính kiến nổi tiếng ở trong nước, bạn có thể bị nguy hiểm chỉ vì đang liên lạc với người này, ngay cả khi những tin nhắn đó không được giải mã. Thêm vào đó, ở một vài quốc gia bạn có thể phải đối mặt với án tù nếu từ chối giải mã tin nhắn có mã hóa.
PGP không làm gì cả để che dấu người mà bạn đang giao tiếp, hoặc dấu việc bạn đang sử dụng PGP. Thêm vào đó, nếu bạn tải khóa công khai lên máy chủ khóa công khai, hoặc ký tên khóa của người khác, bạn đang nói cho cả thế giới biết khóa nào của bạn, và bạn quen với ai.
Bạn không cần phải làm vậy. Bạn có thể giữ khóa công khai PGP thầm kín, và chỉ đưa nó cho người mà bạn cảm thấy an toàn, và nói với họ đừng tải khóa đó lên máy chủ khóa công khai. Bạn không cần phải điền tên mình vào khóa.
Che dấu việc thông tin liên lạc với một ai đó thì khó hơn hẳn. Có một cách để thực hiện việc này là cả hai người dùng tài khoản email ẩn danh, và truy cập hòm thư bằng Tor. Nếu bạn thực hiện việc này, PGP vẫn hữu ích, bằng cả cách giữ nội dung email bảo mật, và chứng minh cho đôi bên thấy rằng tin nhắn không bị lục lọi.