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
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
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
Mã:
gpg --gen-key
- 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ể.
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.
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)++++++
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
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'
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'
Mã:
gpg --encrypt --recipient 'John Doe' files.tar.gz
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
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
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
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
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