Thứ sáu, 26/05/2017 | 00:00 GMT+7

Cách sử dụng GPG để mã hóa và ký tin nhắn

GPG, hay GNU Privacy Guard, là một triển khai mật mã public key . Điều này cho phép truyền thông tin an toàn giữa các bên và được dùng để xác minh nguồn root của một tin nhắn là chính hãng.

Trong hướng dẫn này, ta sẽ thảo luận về cách GPG hoạt động và cách triển khai nó. Ta sẽ sử dụng server Ubuntu 16.04 cho phần trình diễn này, nhưng cũng sẽ bao gồm hướng dẫn cho các bản phân phối khác.

Cách hoạt động của mã hóa public key

Một vấn đề mà nhiều user gặp phải là làm thế nào để giao tiếp an toàn và xác thực danh tính của bên mà họ đang nói chuyện. Nhiều chương trình cố gắng trả lời câu hỏi này, ít nhất ở một số điểm, yêu cầu chuyển password hoặc thông tin xác thực khác, qua một phương tiện không an toàn.

Đảm bảo rằng chỉ Bên được chỉ định mới có thể đọc

Để giải quyết vấn đề này, GPG dựa vào một khái niệm bảo mật được gọi là mã hóa public key . Ý tưởng là bạn có thể chia các giai đoạn mã hóa và giải mã của quá trình truyền thành hai phần riêng biệt. Bằng cách đó, bạn có thể tự do phân phối phần mã hóa, miễn là bạn bảo mật phần giải mã.

Điều này sẽ cho phép truyền thông điệp một chiều có thể được tạo và mã hóa bởi bất kỳ ai, nhưng chỉ được giải mã bởi user được chỉ định (người có khóa giải mã riêng). Nếu cả hai bên tạo các cặp public key / riêng tư và cung cấp cho nhau các khóa mã hóa công khai của bạn , thì cả hai đều có thể mã hóa thông điệp cho nhau.

Vì vậy, trong trường hợp này, mỗi bên có private key của họ và public key của user khác.

Xác thực danh tính của người gửi

Một lợi ích khác của hệ thống này là người gửi tin nhắn có thể “ký tên” vào tin nhắn bằng private key của họ. Khóa công khai mà người nhận có được dùng để xác minh chữ ký thực sự được gửi bởi user được chỉ định.

Cài đặt khóa GPG

GPG được cài đặt theo mặc định trong hầu hết các bản phân phối.

Nếu vì bất kỳ lý do gì GPG không được cài đặt, trên UbuntuDebian , bạn có thể cập nhật index repo local và cài đặt nó bằng lệnh :

  • sudo apt-get update
  • sudo apt-get install gnupg

Trên CentOS , bạn có thể cài đặt GPG bằng lệnh :

  • sudo yum install gnupg2

Để bắt đầu sử dụng GPG để mã hóa thông tin liên lạc của bạn, bạn cần tạo một cặp khóa. Bạn có thể thực hiện việc này bằng cách sử dụng lệnh sau:

  • gpg --gen-key

Điều này sẽ đưa bạn qua một số câu hỏi sẽ cấu hình khóa của bạn:

  • Vui lòng chọn loại khóa bạn muốn: (1) RSA và RSA (mặc định)
  • Bạn muốn kích thước phím nào? 4096
  • Khóa có giá trị? 1y (hết hạn sau 1 năm. Nếu bạn chỉ đang thử nghiệm, bạn có thể cần tạo khóa tồn tại trong lần đầu tiên bằng cách sử dụng một số như “3”.)
  • Điều này có chính xác? y
  • Tên thật: tên thật của bạn ở đây
  • Địa chỉ email: your_email@address.com
  • Comment : Comment tùy chọn sẽ hiển thị trong chữ ký của bạn
  • Thay đổi (N) ame, © omment, (E) mail hay (O) kay / (Q) uit? O
  • Nhập passphrase (password bảo vệ) : Nhập passphrase (password bảo vệ) an toàn tại đây (chữ hoa và chữ thường, chữ số, ký hiệu)

Đến đây, gpg sẽ tạo ra các khóa bằng cách sử dụng entropy. Entropy mô tả lượng không thể đoán trước và không xác định tồn tại trong một hệ thống. GPG cần entropy này để tạo một bộ khóa an toàn.

Quá trình này có thể mất nhiều thời gian tùy thuộc vào mức độ hoạt động của hệ thống và kích thước phím bạn đã chọn. Để tạo thêm entropy dễ dàng hơn, bạn có thể sử dụng một công cụ có tên là hasged . Mở một terminal mới và SSH vào server để cài đặt haveged trên server của bạn.

Tạo certificate thu hồi

Bạn cần có cách làm mất hiệu lực cặp khóa của bạn trong trường hợp có vi phạm bảo mật hoặc trong trường hợp bạn bị mất khóa bí mật. Có một cách dễ dàng để thực hiện việc này với phần mềm GPG.

Điều này nên được thực hiện ngay sau khi bạn tạo cặp key , không phải khi bạn cần. Khóa thu hồi này phải được tạo trước thời hạn và được giữ ở một vị trí an toàn, riêng biệt trong trường hợp máy tính của bạn bị xâm phạm hoặc không thể hoạt động. Để tạo khóa thu hồi, hãy nhập:

  • gpg --output ~/revocation.crt --gen-revoke your_email@address.com

Bạn cần xác nhận việc tạo khóa thu hồi và sau đó được yêu cầu về lý do mà nó đang bị thu hồi. Thông tin này sẽ hiển thị với những user khác nếu việc thu hồi được sử dụng trong tương lai. Bạn có thể chọn bất kỳ tùy chọn nào có sẵn, nhưng vì điều này đang được thực hiện trước thời hạn, bạn sẽ không có thông tin chi tiết cụ thể. Thông thường, bạn nên tạo certificate thu hồi cho từng tình huống có thể xảy ra để có tính linh hoạt tối đa.

Sau đó, bạn cần cung cấp comment và cuối cùng là xác nhận các lựa chọn. Trước khi tạo certificate thu hồi, bạn cần nhập passphrase (password bảo vệ) của khóa GPG để xác nhận danh tính của bạn . Chứng chỉ thu hồi sẽ được ghi vào file được chỉ định bởi cờ --output (trong ví dụ của ta là revocation.crt ):

Output
Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others!

Bạn nên hạn chế ngay các quyền trên file certificate đã tạo để ngăn truy cập trái phép:

  • chmod 600 ~/revocation.crt

Chứng chỉ thu hồi phải được giữ an toàn để user khác không thể thu hồi khóa của bạn. Như thông báo nêu rõ, bạn nên xem xét backup certificate vào các máy khác và in nó ra, miễn là bạn có thể bảo mật nó đúng cách.

Cách nhập public key của user khác

GPG sẽ khá vô dụng nếu bạn không thể chấp nhận các public key khác từ những người bạn muốn giao tiếp.

Bạn có thể nhập public key của ai đó theo nhiều cách khác nhau. Nếu bạn đã lấy được public key từ ai đó trong file văn bản, GPG có thể nhập khóa đó bằng lệnh sau:

  • gpg --import name_of_pub_key_file

Cũng có khả năng người mà bạn muốn giao tiếp đã tải khóa của họ lên server public key . Những server chính này được sử dụng để chứa public key của mọi người từ khắp nơi trên thế giới.

Một server khóa phổ biến đồng bộ thông tin của nó với nhiều server khác là server public key MIT. Bạn có thể tìm kiếm mọi người theo tên hoặc địa chỉ email của họ bằng cách truy cập vào đây trong trình duyệt web :

https://pgp.mit.edu/ 

Bạn cũng có thể tìm kiếm server chính từ bên trong GPG bằng lệnh như sau:

  • gpg --keyserver pgp.mit.edu --search-keys search_parameters

Bạn có thể sử dụng phương pháp tìm kiếm theo tên hoặc địa chỉ email. Bạn có thể nhập khóa mà bạn tìm thấy theo dấu nhắc .

Cách xác minh và ký khóa

Mặc dù bạn có thể tự do phân phối file public key đã tạo của bạn và mọi người có thể sử dụng file này để liên hệ với bạn một cách an toàn, nhưng điều quan trọng là bạn phải tin tưởng rằng khóa thuộc về người bạn nghĩ trong quá trình truyền public key ban đầu.

Xác minh danh tính của người khác

Làm thế nào để bạn biết rằng người cung cấp cho bạn public key chính là người mà họ nói? Trong một số trường hợp, điều này có thể đơn giản. Bạn có thể đang ngồi ngay bên cạnh người có notebook của bạn vừa mở và trao đổi key . Đây sẽ là một cách khá an toàn để xác định rằng bạn đang nhận được khóa chính xác, hợp lệ .

Nhưng có nhiều trường hợp khác mà liên hệ cá nhân như vậy là không thể. Bạn có thể không biết cá nhân bên kia, hoặc bạn có thể bị ngăn cách bởi khoảng cách vật lý. Nếu bạn không bao giờ muốn giao tiếp qua các kênh không an toàn, việc xác minh public key có thể gặp vấn đề.

May mắn là thay vì xác minh toàn bộ public key của cả hai bên, bạn có thể chỉ cần so sánh "dấu fingerprint " có được từ các khóa này. Điều này sẽ cung cấp cho bạn sự đảm bảo hợp lý rằng cả hai bạn đang sử dụng cùng một thông tin public key .

Bạn có thể lấy dấu fingerprint của public key bằng lệnh :

  • gpg --fingerprint your_email@address.com
Output
pub 4096R/311B1F84 2013-10-04 Key fingerprint = CB9E C70F 2421 AF06 7D72 F980 8287 6A15 311B 1F84 uid Test User <test.user@address.com> sub 4096R/8822A56A 2013-10-04

Điều này sẽ tạo ra một chuỗi số dễ quản lý hơn nhiều để so sánh. Bạn có thể so sánh chuỗi này với chính người đó hoặc với người khác có quyền truy cập vào người đó.

Ký tên vào key của họ

Việc ký khóa cho phần mềm của bạn biết rằng bạn tin tưởng vào khóa mà bạn được cung cấp và bạn đã xác minh khóa đó được liên kết với người được đề cập.

Để ký một khóa mà bạn đã nhập, chỉ cần nhập:

  • gpg --sign-key email@example.com

Khi bạn ký vào khóa, điều đó nghĩa là bạn xác minh bạn tin tưởng người đó là chính họ. Điều này có thể giúp người khác quyết định có nên tin tưởng người đó hay không. Nếu ai đó tin tưởng bạn và họ thấy rằng bạn đã ký vào khóa của người này, thì nhiều khả năng họ cũng tin tưởng danh tính của họ.

Bạn nên cho phép người có khóa mà bạn đang ký tận dụng mối quan hệ tin cậy của bạn bằng cách gửi lại cho họ khóa đã ký. Bạn có thể thực hiện việc này bằng lệnh :

  • gpg --output ~/signed.key --export --armor email@example.com

Bạn sẽ phải nhập lại passphrase (password bảo vệ) của bạn . Sau đó, public key của họ, do bạn ký, sẽ được hiển thị. Gửi cho họ cái này, để họ có thể hưởng lợi từ việc đạt được “dấu chấp thuận” của bạn khi tương tác với những người khác.

Khi họ nhận được khóa mới, đã ký này, họ có thể nhập khóa, thêm thông tin ký mà bạn đã tạo vào database GPG của họ. Họ có thể làm điều này bằng lệnh :

  • gpg --import ~/signed.key

Như vậy, họ có thể chứng minh cho người khác thấy rằng bạn tin tưởng rằng danh tính của họ là chính xác.

Cách Làm cho Khóa Công khai của Bạn Khả dụng Cao

Do cách mã hóa public key được thiết kế, không có bất kỳ điều gì độc hại có thể xảy ra nếu những người không quen biết có public key của bạn.

Lưu ý đến điều này, có thể có lợi khi công khai public key của bạn. Sau đó, mọi người có thể tìm thấy thông tin của bạn để gửi tin nhắn cho bạn một cách an toàn ngay từ lần tương tác đầu tiên của bạn.

Bạn có thể gửi cho bất kỳ ai public key của bạn bằng cách yêu cầu nó từ hệ thống GPG:

  • gpg --output ~/mygpg.key --armor --export your_email@address.com
Output
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.11 (GNU/Linux) mQINBFJPCuABEACiog/sInjg0O2SqgmG1T8n9FroSTdN74uGsRMHHAOuAmGLsTse 9oxeLQpN+r75Ko39RVE88dRcW710fPY0+fjSXBKhpN+raRMUKJp4AX9BJd00YA/4 EpD+8cDK4DuLlLdn1x0q41VUsznXrnMpQedRmAL9f9bL6pbLTJhaKeorTokTvdn6 5VT3pb2o+jr6NETaUxd99ZG/osPar9tNThVLIIzG1nDabcTFbMB+w7wOJuhXyTLQ JBU9xmavTM71PfV6Pkh4j1pfWImXc1D8dS+jcvKeXInBfm2XZsfOCesk12YnK3Nc u1Xe1lxzSt7Cegum4S/YuxmYoh462oGZ7FA4Cr2lvAPVpO9zmgQ8JITXiqYg2wB3 . . .

Sau đó, bạn có thể gửi file này cho bên kia qua một phương tiện thích hợp.

Nếu bạn muốn xuất bản khóa của bạn lên một server khóa, bạn có thể thực hiện việc đó theo cách thủ công thông qua các biểu mẫu có sẵn trên hầu hết các trang web của server .

Một tùy chọn khác là thực hiện việc này thông qua giao diện GPG. Tra cứu ID khóa của bạn bằng lệnh :

  • gpg --list-keys your_email@address.com

Phần được đánh dấu trong kết quả bên dưới là ID khóa (hãy tìm pub dọc theo cột bên trái nếu bạn không chắc chắn về việc sử dụng cái nào). Đây là một cách ngắn gọn để tham chiếu khóa đến phần mềm bên trong.

Output
pub 4096R/311B1F84 2013-10-04 uid Test User <test.user@address.com> sub 4096R/8822A56A 2013-10-04

Để tải khóa của bạn lên một server khóa nhất định, bạn có thể sử dụng cú pháp sau:

  • gpg --send-keys --keyserver pgp.mit.edu key_id

Khóa sẽ được tải lên server được chỉ định. Sau đó, nó có thể sẽ được phân phối đến các server quan trọng khác trên toàn thế giới.

Mã hóa và giải mã tin nhắn bằng GPG

Bạn có thể dễ dàng mã hóa và giải mã tin nhắn sau khi bạn đã chia sẻ khóa của bạn với bên kia.

Mã hóa tin nhắn

Bạn có thể mã hóa tin nhắn bằng cờ “–encrypt” cho GPG. Cú pháp cơ bản sẽ là:

  • gpg --encrypt --sign --armor -r person@email.com name_of_file

Thao tác này mã hóa tin nhắn bằng public key của người nhận, ký nó bằng private key của bạn đảm bảo rằng nó đến từ bạn và xuất tin nhắn ở định dạng văn bản thay vì byte thô. Tên file sẽ giống với tên file đầu vào, nhưng có phần mở rộng .asc .

Bạn nên bao gồm người nhận “-r” thứ hai với địa chỉ email của bạn nếu bạn muốn có thể đọc thư được mã hóa. Điều này là do thư sẽ được mã hóa bằng public key của mỗi người và sẽ chỉ có thể được giải mã bằng private key được liên kết.

Vì vậy, nếu nó chỉ được mã hóa bằng public key của bên kia, bạn sẽ không thể xem lại tin nhắn, trừ khi bạn lấy được private key của họ bằng cách nào đó. Việc thêm chính bạn làm người nhận thứ hai sẽ mã hóa tin nhắn hai lần riêng biệt, một lần cho mỗi người nhận.

Giải mã tin nhắn

Khi bạn nhận được tin nhắn, chỉ cần gọi GPG trên file tin nhắn:

  • gpg file_name.asc

Phần mềm sẽ nhắc bạn khi cần thiết.

Nếu thay vì một file , bạn có thư dưới dạng stream văn bản thô, bạn có thể copy paste nó sau khi nhập gpg mà không có bất kỳ đối số nào. Bạn có thể nhấn “CTRL-D” để biểu thị sự kết thúc của tin nhắn và GPG sẽ giải mã nó cho bạn.

Bảo trì chính

Có một số thủ tục mà bạn có thể cần sử dụng thường xuyên để quản lý database khóa của bạn .

Để liệt kê các khóa GPG có sẵn của bạn mà bạn có từ người khác, bạn có thể ra lệnh sau:

  • gpg --list-keys

Thông tin chính của bạn có thể trở nên lỗi thời nếu bạn đang dựa vào thông tin được lấy từ các server public key . Bạn không muốn dựa vào các khóa bị thu hồi, vì điều đó nghĩa là bạn đang tin tưởng các khóa có khả năng bị xâm phạm.

Bạn có thể cập nhật thông tin chính bằng cách phát hành:

  • gpg --refresh-keys

Thao tác này sẽ lấy thông tin mới từ các server chính.

Bạn có thể lấy thông tin từ một server khóa cụ thể bằng cách sử dụng:

  • gpg --keyserver key_server --refresh-keys

Bạn có thể nhận được thông báo lỗi nếu không tìm thấy bất kỳ khóa nào của bạn trên server khóa.

Kết luận

Sử dụng GPG đúng cách có thể giúp bạn bảo mật thông tin liên lạc của bạn với những người khác nhau. Điều này cực kỳ hữu ích, đặc biệt là khi xử lý thông tin nhạy cảm, cũng như khi xử lý các tin nhắn thông thường, hàng ngày.

Do các chương trình giám sát có thể gắn cờ một số thông tin liên lạc được mã hóa nhất định, bạn nên sử dụng mã hóa cho mọi thứ, không chỉ dữ liệu “bí mật”. Điều đó sẽ khiến mọi người khó biết khi nào bạn đang gửi dữ liệu quan trọng hay chỉ gửi lời chào thân thiện.


Tags:

Các tin liên quan