Giải ngố Cryptography – Phần 4: Rivest–Shamir–Adleman (RSA), Diffie-Hellman (DH) và ứng dụng trong cấu hình OpenVPN

Như đã giới thiệu trong Phần 3: Đảm bảo Confidentiality với Encryption và Diffie-Hellman Key Exchange Protocol, kỳ này tôi sẽ tập trung vào ngôi sao sáng trong làng Asymmetric EncryptionRivest–Shamir–Adleman (RSA). Ngoài ra, tôi cũng sẽ trao đổi kỹ hơn về mối liên hệ giữa Pretty Good Privacy (PGP)RSA cũng như việc sử dụng kết hợp RSADiffie-Hellman (DH) trong quá trình thiết lập OpenVPN.

#1 RSA và mối liên hệ với PGP

#1.1 Mối quan hệ mờ ám của PGP và RSA

PGPencryption program (chương trình mã hóa) cung cấp tính riêng tư, bảo mật và xác thực cho quá trình thông tin liên lạc do đại hiệp Phil Zimmerman sáng tác năm 1991 và được cung cấp miễn phí trước khi bán lại cho Symatec. Năm 1997, Internet Engineering Task Force – IETF tạo ra tiêu chuẩn PGP mã nguồn mở theo đề xuất của đại hiệp Phil Zimmerman với tên gọi là OpenPGP. Sau đó, GNU Privacy Guard (GnuPGP hay GPG) được ra đời dựa trên việc triển khai tiêu chuẩn OpenPGP với mục tiêu thay thế PGP của Symantec.

PGP ban đầu chỉ được dùng để bảo mật email và tập tin nhưng hiện đã được mở rộng sang ứng dụng cho các nội dung khác như Digital Signature (chữ ký số) và mã hóa, bảo mật nói chung. PGP được xem là đại diện tiên phong trong triển khai mật mã khóa công khai kết hợp cả AsymmetricSymmetric Encryption (Asymmetric Encryption thường gặp sẽ là RSA algorithm).

Góc trợ giúp: Tôi có nói kỹ hơn các nội dung về PGP trong phần Giải ngố Pretty Good Privacy (PGP). Bạn có thể xem nếu muốn biết thêm chi tiết.

Để tóm gọn mối liên hệ của các đối tượng nói trên, bạn có thể hình dung như sau:

– Nếu PGP là 1 cái điện thoại;

OpenPGP là thiết kế của cái điện thoại;

GnuPG là một cái điện thoại khác cùng thiết kế OpenPGP;

RSA là dịch vụ mạng Viettel được sử dụng trên cái điện thoại (nếu không thích, bạn có thể chuyển sang dùng dịch vụ mạng Mobiphone hay Vinaphone, giống như đổi RSA sang ECC)

Đến đây tôi hy vọng bạn đã phần nào hiểu được mối quan hệ “mờ ám” của PGPRSA trước khi đi vào chi tiết bản chất của RSA.

#1.2 Sức mạnh của RSA thực chất đến từ đâu

RSAAsymetric Encryption Algorithm dựa trên Diffie-Hellman Key Exchange Concept với Static Key. RSA dùng tính chất toán học của số nguyên tố để tạo một cặp public và private key. Cụ thể, RSA dựa trên cơ sở của việc khó phân tích thừa số đối với tích của 2 số nguyên tố lớn. Đối với RSA, key size hiệu quả được đề xuất là 2048 bit (đến năm 2030), sau năm 2030 là 3072 bit.

Góc trợ giúp: Số nguyên tố là số chỉ chia hết cho 1 và cho chính nó.

Xem xét giản lược để dễ hiểu, quá trình hoạt động RSA được mô tả như sau:

Minh họa nguyên lý RSA
Minh họa nguyên lý RSA

Step 1: Alice chọn 2 số nguyên tố private p, q , 1 số public e và tính số public N = p * q. Sau đó Alice gửi eN sang cho Bob;

Step 2: Bob xác định con số input i cần mã hóa, tính output o = ie mod N và gửi o sang cho Alice. Như vậy lúc này sẽ có e, No được public;

Step 3: Khi nhận được thông tin mã hóa o từ Bob, Alice tính d =  [(p-1)*(q-1)+1]/e sau đó tìm thông tin đầu vào i =  od mod N.

Như vậy bằng phương án sử dụng public key của Alice (e N), Bob có thể mã hóa thông tin đầu vào i thành thông tin mã hóa o và gửi sang cho Alice qua các kênh không bảo mật. Về phía mình, Alice có thể giải mã o để đọc được i bằng cách sử dụng private key (pq).

Để dễ hình dung bạn có thể xem cái ví dụ tính minh họa với các con số đơn giản như sau:

Tính toán minh họa RSA
Tính toán minh họa RSA

Lưu ý:

– p, q thực chất là large prime number;

– e được lựa chọn theo một số nguyên tắc xác định chứ không phải tùy ý;

– i là thông tin đầu vào cần mã hóa, thực tế có thể là Symmetric Encryption Key dùng cho phiên làm việc tiếp theo của Alice và Bob;

RSA vẫn phải cần có Certificate Authority để xác thực tuyên bố của các bên về quyền sở hữu các public key (Tôi sẽ nói kỹ hơn ở Mục 2 bên dưới);

#2 RSA, DH và ứng dụng thực tế trong cấu hình OpenVPN

#2.1 RSA vs DH

Như đã đề cập sơ bộ trong Phần 3: Đảm bảo Confidentiality với Encryption và Diffie-Hellman Key Exchange Protocol, trong mục này, tôi sẽ nói rõ hơn việc việc so sánh RSADH cũng như việc triển khai sử dụng thực tế để cấu hình OpenVPN. Nội dung so sánh cụ thể được tóm lược như sau.

RSA vs DH
RSA vs DH

Dựa trên thông tin tóm lược trên, bạn có thể thấy DH sẽ có khả năng “ăn hành” rất cao với Man-in-the-Middle attack vì không hỗ trợ Digital Signature trong khi RSA lại rất yếu trong việc tạo Ephemeral Keys vốn là điều kiện để có được Perfect Forward Secrecy (và RSA cũng yếu hơn DH với cùng key size). Do đó trong trường hợp áp dụng thực tế như việc triển khai cấu hình OpenVPN, bạn thấy xuất hiện các bước sử dụng kết hợp cả RSADH như nội dung trình bày ngay sau đây.

#2.2 Sử dụng RSA và DH trong triển khai cấu hình OpenVPN

Bước 1: Tạo Private Key cho Certificate Authority (CA) với RSA

Xem kỹ lại phần Hướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 3: Cài đặt OpenVPN, EasyRSA và thiết lập Certificate Authority trên GCP VM Instance, bạn sẽ thấy đoạn tạo Private Key cho Certificate Authority (CA) với RSA như sau.

CA private key
CA private key

Cái private key ca.key ở đây (ông CA cũng có cái ca.crt tương ứng với public key) sẽ được CA dùng để ký xác nhận lên certificate của VPN ServerVPN Client để bảo đảm không có “bên thứ 3” nào giả danh như tình huống Man in the Middle (MiTM) attack. Dựa trên các certificate đã được CA ký, quá trình “bidirectional authentication” giữa ServerClient sẽ được tiến hành (cụ thể là trao đổi Ephemeral Asymmetric Keys theo DH phục vụ công cuộc mã hóa trong các phiên làm việc tiếp theo).

Cũng trong bài Hướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 3: Cài đặt OpenVPN, EasyRSA và thiết lập Certificate Authority trên GCP VM Instance, tôi demo cho ông CA nằm chung VM Instance với VPN Server vì tôi lười (và sợ tốn chi phí cho một VM Instance riêng chỉ để phục vụ CA). Thực tế, VPN Server có thể kiểm tra certificate của VPN Client (và ngược lại, VPN Client kiểm tra certificate của VPN Server) đã được CA ký bằng cách sử dụng ca.crt – cái public key của CA, nên cái ca.key – CA private key có thể chuyển sang máy khác để bảo mật (tốt nhất là đem ra đảo chôn luôn cho chắc!).

Bước 2: Tạo Private Key và ký certificate cho VPN Server

Kế tiếp, trong nội dung Hướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 4: Tạo Private Key và ký Certificate cho VPN Server, VPN Client và cấu hình OpenVPN Server, bạn sẽ thấy tôi tạo private key với RSA (server.key) và ký certificate cho VPN Server (dùng ca.key) như sau.

Server private key
Server private key
Ký Server Certificate
Ký Server Certificate

Sau đó bạn sẽ tạo Asymmetric Encrytion Key để mã hóa các Symetric Encryption Key dùng cho các phiên làm việc giữa VPN Server và VPN Client với DH.

Tạo DH params
Tạo DH params

Bước 3: Tạo Private Key và ký certificate cho VPN Client

Tương tự, bạn cũng sẽ tạo private key với RSA (client.key) và ký certificate (dùng ca.key) cho VPN Client.

Client private key
Client private key
Ký Client Certificate
Ký Client Certificate

Để tóm lược lại cái đống hổ lốn tôi huyên thuyên ở trên, bạn có thể xem bảng tóm tắt sau.

File Sử dụng bởi Mục đích Bí mật
ca.crt Server và Client (hay Alice và Bob) để kiểm tra các certificate do CA ký Root CA certificate Không
ca.key Lý tưởng thì chỉ lưu biệt lập trên máy ký các certificate co Client và Server (hay Alice và Bob) Root CA key
dh{n}.pem Server (hay Alice) Diffie Hellman parameters Không
server.crt Server (hay Alice) Server Certificate Không
server.key Server (hay Alice) Server Key
client.crt Client (hay Bob) Client Certificate Không
client.key Client (hay Bob) Client Key

Lưu ý:

– Ở đây VPN ServerVPN Client cũng đóng vai trò tương tự như Alice và Bob. Tuy nhiên để cấu hình nhanh cái VPN Server, bạn thấy cả 2 cái private key cho cả Server (server.key) và Client (client.key) đều được tạo trên VPN Server. Thực tế bạn cần nhớ là nguyên tắc chung là private key của ai thì nấy tạo và giữ mới chuẩn “cmn” mực.

– Với Alice và Bob thì CA hiển nhiên cũng phải là một đối tượng độc lập với cả Alice và Bob. CA này cần được xác nhận có thể tin cậy trước khi có thể ký certificate của Alice và Bob (bạn có thể xem kỹ hơn về vấn đề CA trong nội dung Giải ngố WWW – Phần 4: 3 điều tối quan trọng về việc tạo và sử dụng Certificate trong quá trình truy cập HTTPS Website).

Đấy, bạn thấy đấy, việc cấu hình OpenVPN với nhìn có vẻ lung tung và tùy tiện nhưng thực tế thì “cái gì cũng có lí do của nó cả” chứ không phải thích chơi sao cũng được đâu. Đến đây tôi xin tạm nghỉ nội dung kỳ này. Kỳ tới tôi sẽ bàn kỹ hơn về một đại diện khác của Asymmetric EncryptionElliptic curve cryptography nhé.

5 thoughts on “Giải ngố Cryptography – Phần 4: Rivest–Shamir–Adleman (RSA), Diffie-Hellman (DH) và ứng dụng trong cấu hình OpenVPN”

Leave a Reply

Your email address will not be published. Required fields are marked *