Public Key và Private Key là gì? Khi nào thì dùng và cách dùng như thế nào
Public Key và Private Key là gì?#
Public Key (Khóa công khai) và Private Key (Khóa bí mật) là một cặp khóa được sử dụng trong mật mã bất đối xứng (Asymmetric Cryptography). Chúng giúp mã hóa, giải mã và xác thực dữ liệu một cách an toàn.
Private Key (Khóa bí mật): Chỉ được giữ bởi chủ sở hữu và không được chia sẻ. Nó dùng để giải mã dữ liệu đã mã hóa bằng public key hoặc tạo chữ ký số.
Public Key (Khóa công khai): Có thể chia sẻ với bất kỳ ai. Nó dùng để mã hóa dữ liệu (chỉ private key tương ứng mới giải mã được) hoặc xác minh chữ ký số.
Khi nào dùng Public Key và Private Key?#
1. Bảo mật dữ liệu (Mã hóa & Giải mã)
Khi cần gửi dữ liệu an toàn, người gửi sử dụng public key của người nhận để mã hóa dữ liệu.
Chỉ người nhận mới có thể giải mã bằng private key của họ.
Ứng dụng: Bảo mật email (PGP, S/MIME), truyền dữ liệu nhạy cảm.
2. Xác thực và Chữ ký số
Người gửi dùng private key để ký vào tài liệu hoặc tin nhắn.
Người nhận dùng public key của người gửi để xác minh chữ ký.
Ứng dụng: SSL/TLS (HTTPS), chữ ký số trên hợp đồng điện tử.
3. Quản lý danh tính & Xác thực (Authentication)
Hệ thống có thể sử dụng public key để xác thực danh tính mà không cần gửi password.
Ứng dụng: SSH key (đăng nhập server), xác thực người dùng trong các hệ thống bảo mật cao.
4. Giao dịch tiền điện tử (Blockchain)
Mỗi người dùng có một private key để ký giao dịch.
Public key được dùng để tạo địa chỉ ví và xác minh giao dịch.
Ứng dụng: Bitcoin, Ethereum.
Tóm tắt#
| Tính năng | Public Key | Private Key |
|---|---|---|
| Chia sẻ công khai? | Có | Không |
| Dùng để mã hóa? | Có | Không |
| Dùng để giải mã? | Không | Có |
| Dùng để xác minh chữ ký số? | Có | Không |
| Dùng để tạo chữ ký số? | Không | Có |
Nếu bạn đang làm trong lĩnh vực bảo mật, phát triển web (SSL/TLS), hoặc blockchain, thì việc hiểu và sử dụng đúng Public Key & Private Key là rất quan trọng. 🚀
Bạn có thể tạo cặp Public Key và Private Key bằng nhiều công cụ khác nhau, tùy thuộc vào hệ điều hành và mục đích sử dụng. Dưới đây là một số cách phổ biến:
1. Sử dụng OpenSSL (Linux, macOS, Windows)#
OpenSSL là công cụ phổ biến để tạo khóa RSA, ECDSA, hay Ed25519.
Tạo cặp khóa RSA (2048-bit hoặc 4096-bit)#
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 openssl rsa -pubout -in private_key.pem -out public_key.pem
private_key.pem: Khóa bí mật.public_key.pem: Khóa công khai.
Tạo cặp khóa ECDSA (secp256r1)#
openssl ecparam -name prime256v1 -genkey -noout -out private_key.pem openssl ec -in private_key.pem -pubout -out public_key.pem
2. Sử dụng SSH Key (Linux, macOS, Windows với Git Bash)#
Dùng để đăng nhập SSH, GitHub, GitLab,...
ssh-keygen -t rsa -b 4096 -f my_ssh_key
my_ssh_key: Private Key.my_ssh_key.pub: Public Key.
3. Sử dụng Java (BouncyCastle hoặc Java Security API)#
Bạn có thể dùng Java để tạo cặp khóa:
Ví dụ tạo RSA Key bằng Java#
` import java.security.*; import java.util.Base64;
public class RSAKeyPairGenerator { public static void main(String[] args) throws NoSuchAlgorithmException { KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); KeyPair pair = keyGen.generateKeyPair();
String publicKey = Base64.getEncoder().encodeToString(pair.getPublic().getEncoded());
String privateKey = Base64.getEncoder().encodeToString(pair.getPrivate().getEncoded());
System.out.println("Public Key: " + publicKey);
System.out.println("Private Key: " + privateKey);
}
} `
4. Sử dụng Python (cryptography library)#
` from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives import serialization
Tạo khóa
private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048 )
Lưu khóa riêng
with open("private_key.pem", "wb") as f: f.write(private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption() ))
Lưu khóa công khai
public_key = private_key.public_key() with open("public_key.pem", "wb") as f: f.write(public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo )) `
5. Sử dụng Công cụ Trực Tuyến#
Bạn có thể sử dụng các trang web để tạo cặp khóa nhanh chóng:
⚠️ Lưu ý: Nếu dùng công cụ online, tránh nhập khóa bí mật vào trang web không đáng tin cậy!
Nên Chọn Công Cụ Nào?#
Dùng SSH? →
ssh-keygenMã hóa web & SSL/TLS? → OpenSSL
Lập trình Java? → Java Security API hoặc BouncyCastle
Lập trình Python? →
cryptographylibraryChơi với blockchain? → Các thư viện crypto như
secp256k1cho Bitcoin/Ethereum
Bạn đang muốn tạo cặp khóa để làm gì? Mình có thể tư vấn cụ thể hơn! 🚀
Bài liên quan trong #Tin tức
-
Hướng dẫn cách sửa boot trong 2 phút không cần cài lại Windows
minhdev · 💬 1 -
Tội phạm mạng đang dần "bỏ trốn" khỏi Telegram
minhdev -
Top 4 Website Đăng Tin Rao Vặt Bất Động Sản Miễn Phí Uy Tín Nhất Hiện Nay
topdev -
Tổng Hợp Các Trang Đăng Tin Bất Động Sản Miễn Phí Hiệu Quả Nhất 2025
topdev -
Cách Rời Nhóm Telegram Trong Im Lặng (Không Ai Biết) – Hướng Dẫn Chi Tiết
topdev