TopDev

Public Key và Private Key là gì? Khi nào thì dùng và cách dùng như thế nào

minhu 📖 4 phút đọc

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? Không
Dùng để mã hóa? Không
Dùng để giải mã? Không
Dùng để xác minh chữ ký số? Không
Dùng để tạo chữ ký số? Không

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-keygen

  • Mã hóa web & SSL/TLS? → OpenSSL

  • Lập trình Java? → Java Security API hoặc BouncyCastle

  • Lập trình Python?cryptography library

  • Chơi với blockchain? → Các thư viện crypto như secp256k1 cho 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

✓ Đã sao chép link