Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> An Ninh Mạng

Các bước tạo cặp khóa công khai/riêng tư (Public/Private Key Pair) trong an ninh mạng

Cơ chế Public Key Infrastructure (PKI) & Cặp khóa Asymmetric

Trong mật mã học khóa công khai (Asymmetric Cryptography), một cặp khóa bao gồm:

  • Private Key (Khóa riêng): Giữ bí mật tuyệt đối, dùng để giải mã hoặc ký số.
  • Public Key (Khóa công khai): Phân phát công khai, dùng để mã hóa hoặc xác thực chữ ký.

Hai khóa liên kết toán học: dữ liệu mã hóa bằng Public Key chỉ Private Key tương ứng mới giải mã được; chữ ký tạo bằng Private Key thì Public Key nào cũng xác thực được.

Quy trình sinh cặp khóa (Key Generation Process)

  1. Chọn thuật toán: RSA (2048/3072/4096-bit), ECC (ECDSA/EdDSA - curve P-256, P-384, Curve25519), Ed25519 (khuyến nghị hiện nay: nhanh, nhỏ, an toàn).
  2. Tạo số ngẫu nhiên an toàn (CSPRNG): Hệ điều hành cung cấp entropy source (/dev/urandom Linux, BCryptGenRandom Windows, SecRandomCopyBytes macOS/iOS).
  3. Sinh Private Key:
    • RSA: Chọn 2 số nguyên tố lớn p, q → tính n = p*q, φ(n), chọn e (thường 65537), tính d = e⁻¹ mod φ(n). Private key = (n, d) hoặc dạng CRT (p, q, dP, dQ, qInv).
    • ECC/Ed25519: Chọn scalar ngẫu nhiên d trong khoảng [1, n-1] (n = order của base point). Private key = d.
  4. Tính Public Key từ Private Key:
    • RSA: Public key = (n, e).
    • ECC: Q = d * G (nhân scalar điểm cơ sở G trên đường cong elliptic). Public key = điểm Q (x, y).
  5. Mã hóa lưu trữ (Serialization):
    • Private Key: PKCS#8 (PEM/DER), thường mã hóa thêm bằng passphrase (AES-256-CBC/PBKDF2).
    • Public Key: X.509 SubjectPublicKeyInfo (PEM/DER) hoặc trong chứng chỉ X.509 (certificate).
  6. Bảo vệ Private Key: Lưu trữ trong HSM, TPM, Secure Enclave, YubiKey, hoặc file được mã hóa passphrase mạnh, quyền file 0400.

Các công cụ phổ biến

Môi trườngCông cụ / Lệnh
Linux/macOS (OpenSSL)openssl genpkey -algorithm Ed25519 -out private.key
openssl pkey -in private.key -pubout -out public.pem
Linux/macOS (ssh-keygen)ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 (tạo cặp SSH key Ed25519)
Windows (PowerShell/OpenSSH)ssh-keygen -t ed25519 (tương tự Linux)
Windows (PuTTYgen GUI)Chọn EdDSA / RSA → Generate → Save private key (.ppk) & public key (OpenSSH format)
Python (cryptography library)private_key = ed25519.Ed25519PrivateKey.generate()
Go / Rust / Node.jsThư viện chuẩn crypto/ed25519, ring, @noble/ed25519

Ứng dụng thực tế

  • SSH Authentication: Public key lên server (~/.ssh/authorized_keys), Private key trên client.
  • TLS/HTTPS: Public key trong chứng chỉ X.509 (cấp bởi CA), Private key trên web server.
  • Email Encryption/Signing: PGP/GPG (OpenPGP), S/MIME (X.509).
  • Code Signing: Ký driver, ứng dụng, container image (cosign, sigstore).
  • Blockchain / Crypto: Private key ký giao dịch, Public keyderive address.

Lưu ý an ninh quan trọng

  • KHÔNG BAO GIỜ chia sẻ Private Key (file .pem, .ppk, .key, mnemonic seed phrase).
  • Dùng Passphrase mạnh cho Private Key file.
  • Xoay vòng khóa (Key Rotation) định kỳ: 1 năm cho RSA, 90 ngày cho signing key nhạy cảm.
  • Thu hồi (Revocation) ngay khi nghi ngờ Private Key bị lộ (CRL, OCSP, CT log).
  • Không tự "roll your own crypto" – dùng thư viện đã được kiểm toán (OpenSSL, BoringSSL, libsodium, cryptography.io).