Bắt đầu sử dụng công cụ mã hóa dòng lệnh trên Linux

theanh

Administrator
Nhân viên

1 Giới thiệu​

Mã hóa là quá trình mã hóa tin nhắn hoặc thông tin theo cách mà chỉ những bên được ủy quyền mới có thể đọc được. Với sự thiếu vắng quyền riêng tư trong thế hệ kỹ thuật số này của chúng ta, mã hóa dữ liệu là một trong những công cụ cần thiết nhất. Hầu hết các ứng dụng như gmail đều mã hóa dữ liệu của chúng ta, nhưng dữ liệu trên hệ thống của bạn vẫn không được bảo mật và có tin tặc hoặc người dùng trái phép đang chờ truy cập vào chúng. Một cách để giảm thiểu rủi ro bị đánh cắp dữ liệu là mã hóa dữ liệu hiện diện ngay cả trên hệ thống cục bộ của chúng ta.

Hướng dẫn này trình bày một số phương pháp mã hóa dữ liệu trên hệ thống Linux bằng các công cụ dòng lệnh.


2 Mã hóa bằng GPG​

2.1 Giới thiệu về GPG​

GPG là viết tắt của GNU Private Guard, một tiện ích dòng lệnh được sử dụng để mã hóa và giải mã các tệp hoặc thư mục dữ liệu bằng mã hóa khóa đối xứng hoặc khóa công khai. GPG là một giải pháp thay thế được cấp phép theo GPL cho bộ phần mềm mã hóa PGP. GPG cũng được sử dụng bởi các hệ thống biên dịch OpenPGP.

2.2 Mã hóa bằng Khóa đối xứng​

Ở đây tôi có một tệp có tên "test.txt" mà tôi sẽ mã hóa rồi giải mã bằng khóa đối xứng và in văn bản đã giải mã vào một tệp khác có tên "output.txt".

Chạy lệnh sau để mã hóa tệp test.txt bằng khóa đối xứng. Tùy chọn "-c" chỉ ra GPG sử dụng khóa đối xứng.
Mã:
gpg -c test.txt
Kết quả sẽ giống như hình ảnh bên dưới. Lần đầu tiên khi GPG được chạy, một thư mục .gnupg được tạo. Thư mục này chứa các tệp cần thiết cho quá trình mã hóa. Sau đó, nó yêu cầu bạn nhập mật khẩu hai lần. Vui lòng đảm bảo rằng bạn nhập mật khẩu mạnh và nhớ mật khẩu này vì bạn cần mật khẩu này trong tương lai để giải mã các tệp của mình.



Vì vậy, sau khi nhập đúng mật khẩu, một tệp có tên "test.txt.gpg" sẽ được tạo. Đây là tệp được mã hóa. Hình ảnh sau đây hiển thị tệp trước và sau khi mã hóa. Bạn có thể thấy rằng văn bản được mã hóa ở định dạng không thể đọc được.



Sử dụng lệnh sau để giải mã tệp đã mã hóa
Mã:
gpg -o output.txt test.txt.gpg
Bạn sẽ được nhắc nhập mật khẩu được sử dụng để mã hóa. Sau khi nhập đúng, tệp "output.txt" sẽ được tạo với cùng nội dung với tệp "test.txt". Đầu ra của quá trình giải mã có thể trông giống như hình ảnh bên dưới:


2.3 Mã hóa khóa công khai​

Ở đây chúng ta sẽ mã hóa một tập hợp các tệp bằng cơ chế mã hóa khóa công khai/riêng tư của GPG. Quá trình này bao gồm việc tạo một khóa riêng tư không bao giờ được chia sẻ với bất kỳ ai và một khóa công khai phải được chia sẻ với những người muốn gửi dữ liệu đã mã hóa cho bạn.

Đầu tiên, chúng ta sẽ phải đóng gói các tệp vào một thư mục nén. Ở đây tôi có một thư mục có tên là "enctest"với ba tệp test1.txt đến test3.txt. Chúng ta sẽ nén tệp tar.gz của thư mục này. Tôi sẽ sử dụng lệnh sau để tạo tệp nén tar.gz:
Mã:
tar czf files.tar.gz ~/enctest
Lệnh này sẽ tạo tệp "files.tar.gz". Bây giờ chúng ta phải tạo cặp khóa công khai/riêng tư. Chạy lệnh sau để tạo khóa:
Mã:
gpg --gen-key
Hãy nhớ rằng, lệnh này chỉ được thực hiện một lần và có thể mã hóa bất kỳ số lượng tệp và thư mục nào bằng khóa này. Sau khi bạn nhập lệnh này, một loạt các câu hỏi sẽ được hỏi. Các câu hỏi sẽ là:
  • Sử dụng loại mã hóa nào? Tôi đã chọn 1 là RSA và RSA.
  • Kích thước khóa nên là bao nhiêu? Tôi chọn 2048, bạn có thể chọn bất kỳ kích thước nào trong phạm vi từ 1024 đến 4096.
  • Khi nào thì Khóa hết hạn? Tôi chọn 0, nghĩa là khóa không bao giờ hết hạn. Nhưng có thể cung cấp ngày, tuần hoặc năm nếu bạn muốn khóa hết hạn trong thời gian cụ thể.
Những thông tin khác như mật khẩu sẽ được hỏi, bạn sẽ được nhắc nhập mật khẩu hai lần. Hãy đảm bảo rằng bạn sử dụng mật khẩu mạnh và nhớ mật khẩu. Thông tin đăng nhập của bạn cũng sẽ được sử dụng. Thông tin đăng nhập mà tôi đã sử dụng ở đây (được cung cấp bên dưới) chỉ để thử nghiệm. Bạn nên sử dụng thông tin đăng nhập chính hãng của mình như tên, ID email và cung cấp một số bình luận.

Nội dung sau đây hiển thị câu trả lời của tôi và kết quả sẽ như thế nào:
Mã:
gpg (GnuPG) 1.4.16; Bản quyền (C) 2013 Free Software Foundation, Inc.Đây là phần mềm miễn phí: bạn được tự do thay đổi và phân phối lại.KHÔNG CÓ BẢO HÀNH, trong phạm vi pháp luật cho phép.Vui lòng chọn loại khóa bạn muốn: (1) RSA và RSA (mặc định) (2) DSA và Elgamal (3) DSA (chỉ ký) (4) RSA (chỉ ký)Lựa chọn của bạn? 1Khóa RSA có thể dài từ 1024 đến 4096 bit.Bạn muốn kích thước khóa nào? (2048) 2048Kích thước khóa được yêu cầu là 2048 bitVui lòng chỉ định thời hạn hiệu lực của khóa. 0 = khóa không hết hạn  = khóa hết hạn sau n ngày w = khóa hết hạn sau n tuần m = khóa hết hạn sau n tháng y = khóa hết hạn sau n nămKhóa có hiệu lực trong? (0) 0Khóa không hết hạnĐiều này có đúng không? (y/N) yBạn cần ID người dùng để xác định khóa của mình; phần mềm sẽ xây dựng ID người dùngtừ Tên thật, Bình luận và Địa chỉ email theo mẫu này: "Heinrich Heine (Der Dichter) "Tên thật: John DoeĐịa chỉ email: [emailprotected]Bình luận: tis is key generationBạn đã chọn USER-ID này: "John Doe (tis is key generation) "Thay đổi (N)ame, (C)omment, (E)mail hoặc (O)kay/(Q)uit? oBạn cần Mật khẩu để bảo vệ khóa bí mật của mình.
Sau khi bạn nhập mật khẩu, nó sẽ bắt đầu tạo khóa. Nó sẽ yêu cầu bạn thực hiện một số công việc. Bạn nên di chuyển chuột hoặc nhập gì đó hoặc sử dụng ổ đĩa để mở một số tệp. Nó sẽ sử dụng công việc này để tạo ra các bit ngẫu nhiên. Bạn có thể phải thực hiện điều này nhiều lần. Đầu ra cho tôi được hiển thị bên dưới:
Mã:
Chúng ta cần tạo ra nhiều byte ngẫu nhiên. Thực hiện một số hành động khác (gõ trên bàn phím, di chuyển chuột, sử dụngcác đĩa) trong quá trình tạo số nguyên tố là một ý tưởng hay; điều này giúp trình tạo số ngẫu nhiên có cơ hội tốt hơn để thu thập đủ entropy.Không đủ byte ngẫu nhiên khả dụng. Vui lòng thực hiện một số công việc khác đểhệ điều hành có cơ hội thu thập thêm entropy! (Cần thêm 187 byte)++++++...++++++Chúng ta cần tạo ra nhiều byte ngẫu nhiên. Thực hiện một số hành động khác (gõ trên bàn phím, di chuyển chuột, sử dụngcác đĩa) trong quá trình tạo số nguyên tố là một ý tưởng hay; điều này giúp trình tạo số ngẫu nhiên có cơ hội tốt hơn để thu thập đủ entropy.Không đủ byte ngẫu nhiên khả dụng. Vui lòng thực hiện một số công việc khác đểhệ điều hành có cơ hội thu thập thêm entropy! (Cần thêm 92 byte).....++++++Không đủ byte ngẫu nhiên. Vui lòng thực hiện một số công việc khác đểhệ điều hành có cơ hội thu thập thêm entropy! (Cần thêm 114 byte)++++++
Sau khi hoàn tất, khóa đã được tạo. Nó sẽ trông giống như nội dung bên dưới:
Mã:
gpg: /home/akshay/.gnupg/trustdb.gpg: trustdb createdgpg: khóa FA2314B6 được đánh dấu là đáng tin cậykhóa công khai và bí mật đã được tạo và ký.gpg: kiểm tra trustdbgpg: cần 3 margin(s), cần 1 complete(s), mô hình tin cậy PGPgpg: độ sâu: 0 hợp lệ: 1 đã ký: 0 tin cậy: 0-, 0q, 0n, 0m, 0f, 1upub 2048R/FA2314B6 2015-04-02 Dấu vân tay khóa = 5A02 5D77 3E0A 8B69 8086 3032 DE51 6EA5 FA23 14B6uid John Doe (đây là thế hệ khóa) sub 2048R/6F78E642 2015-04-02
Có hai điều quan trọng ở đây: cung cấp một mật khẩu mạnh và đảm bảo nhớ mật khẩu của bạn

Bây giờ các khóa đã được tạo, chúng ta sẽ phải xuất tệp khóa công khai để nhập vào các hệ thống khác hoặc gửi qua email. Để bắt đầu xuất, hãy sử dụng lệnh sau:
Mã:
gpg --armor --output file-enc-pubkey.txt --export 'John Doe'
Thay thế 'John Doe' bằng tên bạn đã sử dụng khi tạo khóa.

Bạn cũng nên sao lưu khóa riêng. Chúng ta có thể sử dụng gpg để thực hiện việc đó. Để sao lưu, hãy sử dụng lệnh sau:
Mã:
gpg --armor --output file-enc-privkey.asc --export-secret-keys 'John Doe'
Tại đây, tệp "file-enc-privkey.asc" sẽ lưu trữ bản sao lưu của khóa riêng một cách an toàn. Sau khi xuất và sao lưu khóa hoàn tất, giờ chúng ta có thể mã hóa và giải mã tệp .tar.gz. Sử dụng lệnh sau để mã hóa:
Mã:
gpg --encrypt --recipient 'John Doe' files.tar.gz
Nhớ đổi 'John Doe' trong lệnh trên thành tên mà bạn đã cung cấp trong quá trình tạo khóa, nếu không quá trình mã hóa sẽ không thành công. Khi lệnh chạy thành công, một tệp được mã hóa có tên "files.tar.gz.gpg" sẽ được tạo.

Bây giờ chúng ta có thể giải mã tệp lưu trữ tar.gz bằng lệnh sau. Nó sẽ sử dụng khóa riêng cùng với mật khẩu để giải mã và cung cấp thư mục đã giải mã. Sử dụng lệnh sau để giải mã:
Mã:
gpg --output output.tar.gz --decrypt files.tar.gz.gpg
Lệnh trên sẽ yêu cầu mật khẩu rồi giải mã tệp đã mã hóa và tạo tệp nén có tên "output.tar.gz" sau đó có thể giải nén vào thư mục bằng tar để lấy lại các tệp. Hình ảnh sau đây hiển thị đầu ra của lệnh mã hóa và giải mã:


2.4 Tại sao lại là GPG?​

GPG hỗ trợ cả hai: mã hóa khóa công khai và mã hóa đối xứng, mang lại tính linh hoạt cao và có thể sử dụng cho nhiều ứng dụng. Không cần cung cấp bất kỳ loại thông tin nhạy cảm nào và gpg cũng có thể có bất kỳ số lượng bộ mã hóa nào bằng cách sử dụng khóa công khai. Người dùng có thể lựa chọn từ nhiều thuật toán mã hóa. Những lý do này khiến GPG trở thành một công cụ bảo mật rất hữu ích để mã hóa tệp, thư mục hoặc dữ liệu.


3 Mã hóa bằng OpenSSL​

3.1 Giới thiệu về OpenSSL​

Dự án OpenSSL là nỗ lực hợp tác để phát triển một bộ công cụ mạnh mẽ, cấp thương mại, đầy đủ tính năng và Nguồn mở triển khai các giao thức Secure Sockets Layer (SSL v2/v3) và Transport Layer Security (TLS) cũng như một thư viện mật mã mục đích chung toàn diện. OpenSSL khả dụng cho hầu hết các hệ điều hành giống Unix và dựa trên SSLeay. OpenSSL cũng hỗ trợ nhiều ứng dụng SSH, SFTP và SCP. Ở đây chúng tôi sử dụng OpenSSL để mã hóa dữ liệu bằng cách sử dụng mã hóa bất đối xứng và mã hóa AES. Mã hóa đối xứng có thể được sử dụng để mã hóa các tệp hoặc dữ liệu lớn hơn.

3.2 Tạo khóa công khai và khóa riêng tư​

Điều đầu tiên chúng ta phải làm là tạo khóa công khai và khóa riêng tư. Đầu tiên, chúng ta tạo khóa riêng tư. Để thực hiện, hãy sử dụng lệnh sau:
Mã:
openssl genrsa -out private_key.pem 1024
Lệnh trên hướng dẫn OpenSSL sử dụng RSA để tạo khóa riêng tư có kích thước 1024 byte. Sau đó, khóa được lưu trữ an toàn trong tệp có tên "private_key.pem". Đầu ra của lệnh này sẽ trông giống như hình ảnh bên dưới:



Sau khi khóa riêng (bí mật) được tạo, chúng ta có thể sử dụng khóa đó để tạo khóa công khai để chúng tạo thành một cặp. Sử dụng lệnh sau để tạo khóa công khai:
Mã:
openssl rsa -in private_key.pem -out public_key.pem -outform PEM -pubout
Nó sẽ trông giống như hình ảnh bên dưới:


3.3 Mã hóa dữ liệu​

Bây giờ chúng ta có thể sử dụng khóa công khai để mã hóa dữ liệu. Ở đây, chúng ta sẽ mã hóa tệp "test.txt" và lưu trữ văn bản đã mã hóa trong tệp encrypt.dat. Thực hiện lệnh sau:
Mã:
openssl rsautl -encrypt -inkey public_key.pem -pubin -in encrypt.txt -out encrypt.dat
Các hình ảnh sau đây hiển thị tệp văn bản trước và sau khi mã hóa:


3.4 Giải mã dữ liệu​

Ở đây chúng tôi sử dụng khóa riêng để giải mã tệp. Chạy lệnh sau:
Mã:
openssl rsautl -decrypt -inkey private_key.pem -in encrypt.dat -out decrypt.txt
Tệp decrypt.txt sẽ chứa dữ liệu đã giải mã. Việc thực hiện lệnh trên và nội dung tệp cũng được hiển thị trong hình ảnh bên dưới:




4 Kết luận​

Các phương pháp được hiển thị ở trên có tính bảo mật cao khi được sử dụng cẩn thận và cho phép nhiều mã hóa và mức độ bảo mật phù hợp với các mức độ bảo mật khác nhau. Do đó, bất kỳ phương pháp nào trong số này cũng có thể được sử dụng trong nhiều tình huống khác nhau để mã hóa tệp/thư mục và dữ liệu thô.


5 Liên kết​

 
Back
Bên trên