Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mã Hoá Dữ Liệu Trong Thế Giới Cyber

    1. Mã hoá nằm ở đâu trong Cybersecurity?

    Cybersecurity là một lĩnh vực rộng bao gồm nhiều tầng bảo vệ. Mã hoá không phải toàn bộ — nhưng là xương sống kỹ thuật mà gần như mọi cơ chế bảo mật khác đều dựa vào.

    Click image for larger version

Name:	Screenshot 2026-06-27 at 08.22.16.png
Views:	2
Size:	33.8 KB
ID:	442031

    2. Ba trụ cột của mã hoá

    Mọi hệ thống mã hoá đều xoay quanh ba mục tiêu bảo mật gọi là CIA Triad — không phải tình báo, mà là:

    Click image for larger version

Name:	Screenshot 2026-06-27 at 08.23.00.png
Views:	2
Size:	32.5 KB
ID:	442032

    3. Mã hoá đối xứng — AES-256-GCM

    Dùng cùng một khoá để mã hoá và giải mã. Nhanh, phù hợp cho khối lượng dữ liệu lớn. Chuẩn vàng hiện nay là AES-256-GCM — kết hợp mã hoá và xác thực toàn vẹn dữ liệu.
    Click image for larger version

Name:	Screenshot 2026-06-27 at 08.25.23.png
Views:	2
Size:	13.1 KB
ID:	442033
    Code JavaScript | Node.JS mã hoá AES-256-GCM
    const crypto = require('crypto');

    function encrypt(plaintext, key) {
    // IV luôn random và duy nhất — không bao giờ tái sử dụng
    const iv = crypto.randomBytes(12);
    const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);

    let enc = Buffer.concat([
    cipher.update(plaintext, 'utf8'),
    cipher.final()
    ]);

    // GCM auth tag — phát hiện dữ liệu bị giả mạo
    const tag = cipher.getAuthTag();

    // Gói iv + tag + data → lưu hoặc truyền đi
    return Buffer.concat([iv, tag, enc]).toString('base64');
    }

    function decrypt(ciphertext, key) {
    const buf = Buffer.from(ciphertext, 'base64');
    const iv = buf.slice(0, 12);
    const tag = buf.slice(12, 28);
    const data = buf.slice(28);

    const dec = crypto.createDecipheriv('aes-256-gcm', key, iv);
    dec.setAuthTag(tag);

    return Buffer.concat([dec.update(data), dec.final()]).toString('utf8');
    }

    // Sử dụng
    const key = crypto.randomBytes(32); // 256-bit
    const encrypted = encrypt('dữ liệu nhạy cảm', key);
    const decrypted = decrypt(encrypted, key);​
    ⚠️ CẠM BẪY PHỔ BIẾN

    Không bao giờ tái sử dụng IV với cùng một khoá. Đây là lỗ hổng nghiêm trọng cho phép kẻ tấn công giải mã toàn bộ dữ liệu — luôn dùng crypto.randomBytes(12) cho mỗi lần mã hoá.

    4. Mã hoá bất đối xứng — Nền tảng của HTTPS

    Dùng cặp khoá: public key để mã hoá (chia sẻ công khai), private key để giải mã (chỉ mình bạn giữ). Đây là cơ chế nền tảng của TLS, PKI và chữ ký số.

    Click image for larger version

Name:	Screenshot 2026-06-27 at 08.28.38.png
Views:	2
Size:	14.9 KB
ID:	442034

    Code Python mã hoá RSA
    from cryptography.hazmat.primitives.asymmetric import rsa, padding
    from cryptography.hazmat.primitives import hashes

    # Tạo cặp khoá 2048-bit
    private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048
    )
    public_key = private_key.public_key()

    # Mã hoá bằng public key (gửi đi an toàn)
    oaep = padding.OAEP(
    mgf=padding.MGF1(algorithm=hashes.SHA256()),
    algorithm=hashes.SHA256()
    )
    ciphertext = public_key.encrypt(b"du lieu bi mat", oaep)

    # Giải mã chỉ bằng private key
    plaintext = private_key.decrypt(ciphertext, oaep)​

    Trong thực tế, HTTPS dùng hybrid encryption: RSA/ECDH để trao đổi khoá phiên, sau đó AES để mã hoá toàn bộ lưu lượng. Asymmetric crypto chậm — chỉ dùng để "bắt tay", sau đó nhường cho symmetric.​

    5. Hashing mật khẩu — Không phải mã hoá

    Hash là hàm một chiều, không thể đảo ngược. Không có khoá để giải mã. Đây là cách đúng để lưu mật khẩu người dùng — kể cả bạn cũng không nên biết mật khẩu của họ.

    Click image for larger version

Name:	Screenshot 2026-06-27 at 08.36.12.png
Views:	2
Size:	35.7 KB
ID:	442035

    Code Python sử dụng thuật toán bcrypt ​
    import bcrypt

    def hash_password(password: str) -> str:
    # rounds=12 → ~250ms/hash. Tăng rounds khi phần cứng mạnh hơn
    salt = bcrypt.gensalt(rounds=12)
    return bcrypt.hashpw(password.encode(), salt).decode()

    def verify(password: str, hashed: str) -> bool:
    return bcrypt.checkpw(password.encode(), hashed.encode())

    # Khi đăng ký
    hashed = hash_password("matkhauNguoiDung@2024")
    # Lưu `hashed` vào DB — không bao giờ lưu plaintext

    # Khi đăng nhập
    ok = verify("matkhauNguoiDung@2024", hashed) # True​
    6. Những sai lầm thường gặp trong thực tế

    Click image for larger version

Name:	Screenshot 2026-06-27 at 08.38.36.png
Views:	2
Size:	53.9 KB
ID:	442036
Working...
X