NỘI DUNG
Như đã hứa trong Giải ngố Blockchain – Phần 2: Hiểu nhanh cơ chế hoạt động của Blockchain với Bitcoin trong 5 phút, kỳ này tôi sẽ bàn kỹ hơn tí về việc tạo Public Key và Private Key cho Bitcoin dựa trên Elliptic Curve – EC (dịch ra là “đường cong elip” nghe kém sang quá, thôi tôi dùng EC luôn cho gọn). Ngoài ra, một số vấn đề liên quan đến mã hóa nói chung và Asymmetric Encryption cũng như thuật toán RSA cũng sẽ được đề cập.
#1. Tóm lược về vấn đề mã hóa
Trước khi nhào vô cái đống EC hại não, tôi xin điểm lại 1 số ý chung về mã hóa trước để bạn dễ hình dung tổng thể vấn đề đang được đề cập. Hiện tại có thể tạm chia phương thức mã hóa thành 2 nhóm chính là Symmetric Encryption (Mã hóa đối xứng) và Asymmetric Encryption (Mã hóa không đối xứng) như sau:
Thông số |
Symmetric Encryption |
Asymmetric Encryption |
Sử dụng | Mã hóa và giải mã với cùng 1 Key (khóa) | Mã hóa và giải mã với 2 Key khác nhau (Public Key và Private Key)
Bảo mật thông tin: Mã hóa bằng Public Key, giải mã bằng Private Key Chữ ký số: Mã hóa bằng Private Key, giải mã bằng Public Key |
Tốc độ | Nhanh hơn Asymmetric Encryption | Chậm hơn Symmetric Encryption |
Ưu điểm | Xử lý nhanh, ít tốn tài nguyên nên thuận tiện cho việc mã hóa lượng lớn thông tin | Giải quyết vấn đề bảo mật trong “key exchange” (trao đổi khóa) của Symmetric Encryption dựa trên Diffie-Hellman (DH) key exchange algorithm |
Nhược điểm | “Key exchange” là tử huyệt của Symmetric Encryption vì không có cách nào để bảo đảm vấn đề bảo mật khi trao đổi khóa (lựa chọn giải pháp face-to-face giao khóa tận tay có tồn tại trên lý thuyết chứ làm thực tế thì bốc sh*t!) | Tốn nhiều tài nguyên và thời gian để xử lý hơn Symmetric Encryption. Do vậy thường chỉ dùng ở đoạn trao đổi khóa, sau đó thì hệ thống sẽ chuyển Symmetric Encryption với cái khóa mới được trao đổi cho nhanh, bổ rẻ |
Đại diện | Advanced Encryption Standard (AES) | Rivest–Shamir–Adleman (RSA)
Elliptic Curve Cryptography (ECC) |
Đến đây hy vọng bạn đã có được cái nhìn tổng thể về phương thức mã hóa trước khi tôi đi vào chi tiết với RSA và ECC.
#2. Nguyên lý của RSA
Khi bàn về nguyên lý của Asymmetric Encryption nói chung, một yếu tố luôn được nhắc đến đó là “Trapdoor Function”. Cái tên “Trapdoor” gợi ý rằng cái này sẽ có tính một chiều, việc đảo ngược lại là không khả thi kiểu như các thanh niên “chia tay đòi quà” ấy.
Với cái thằng RSA, cái “Trapdoor” nó dựa trên độ khó của Prime Factorization là phân tích thừa số số nguyên tố. Ví dụ đơn giản là cho số 66365647, bạn hãy xác định đây là kết quả phép nhân của 2 số nguyên tố nào (cặp số này sẽ đóng vai trò giống như Private Key).
Lưu ý: Số 66,365,647 để minh họa cho gọn chứ con số thực tế viết mỏi tay luôn chứ không “dễ ăn” thế này đâu nhé.
Nếu muốn chi tiết hơn về RSA, bạn có thể xem lại nội dung Giải ngố Pretty Good Privacy (PGP) – Phần 2: Ngắn gọn thì PGP hoạt động như thế nào
#3. Nguyên lý của ECC
Trước hết EC có thể thể hiện qua phương trình và đồ thị sau
Tạm gác lại các vấn đề phức tạp có liên quan, tôi nghĩ nguyên lý của ECC có thể tóm gọn qua các bước sau.
- Chọn một điểm ngẫu nhiên A trên EC
- Vẽ tiếp tuyến với EC qua A
- Tiếp tuyến này cắt EC tại B (cái này có thể xem là “dot function” lần 0: A “dot” A cho kết quả là B)
- Thực hiện “dot function” lần 1: vẽ đường nối AB cắt EC tại C’, lấy C là điểm đối xứng của C’ qua trục Ox (do tính chất của EC nên C sẽ vẫn nằm trên EC)
- Thực hiện “dot function” lần 2: vẽ đường nối AC cắt EC tại D’, lấy D là điểm đối xứng của D’ qua trục Ox (tương tự, D sẽ vẫn nằm trên EC)
- …
- Thực hiện “dot function” lần n: thu được điểm Zn nào đó
Nguồn: arstechnica.com
Lúc này A, Zn là Public Key
Số lần “n”: là Private Key
Bạn thấy đấy, dù tôi đã chỉ rõ bạn “dot” như thế nào và cho bạn biết luôn cả điểm đầu A và điểm cuối Zn, việc xác nhận con số “n” ở đây thực sự không dễ dàng.
#4. Một số vấn đề với ECC
#4.1: Trường hợp “dot” quá tay, cái điểm cắt EC “đi về nơi xa” luôn thì sao?
Lúc này cái thông tin Key Size (ví dụ 256 bit) sẽ tạo ra cái giới hạn khi bạn “dot”. Cái này nó nôm na như hồi xưa chơi game Snake trên điện thoại Nokia trắng đen huyền thoại đấy. Khi con rắn đụng 1 cạnh giới hạn nó sẽ thò mặt ra ở hình chiếu trên cạnh giới hạn đối diện.
#4.2: Tốc độ xử lý của ECC vs RSA
Theo nhận định của giới giang hồ, với cùng một Key Size, so sánh việc ngồi mò thừa số nguyên tố trong RSA và mò “n” trong ECC cũng xấp xỉ như so sánh việc di chuyển từ Tp. HCM ra Hà Nội bằng cách đi bộ và ngồi máy bay. Chính vì cái đặc tính ít tốn tài nguyên tính toán này nên tôi nghĩ ECC được chọn làm nền tảng mã hóa cho tiền mã hóa nói chung và Bitcoin nói riêng.
Tham khảo: 256 bit ECC key có độ bảo mật tương đương RSA 3072 bit key
#4.3: Cái gì cũng tốt thế ai chơi lại
Đọc đến đây thì chắc bạn cũng nghĩ như tôi là dẹp mịa nói mấy cái vớ vẩn kia rồi triển ECC thôi cho khỏe. Tuy nhiên, một chi tiết có thể khiến bạn băn khoăn là NSA đã bắt đầu loại bỏ việc sử dụng ECC trong hoạt động của mình từ cuối năm 2015. Quyết định này hiển nhiên dẫn đến một câu hỏi không mấy dễ chịu “Hay là nó đã biết cái gì mà mình chưa biết???”. Chắc tôi sẽ nghiên cứu kỹ thêm vấn đề này và cập nhật sau vậy.
Ngay tại mục 1, bác chỉnh lại Symmetric Encryption là mã hóa đối xứng, bỏ chữ “không”. Chắc bác viết nhầm.
Cám ơn bạn đã góp ý. Tôi đã cập nhật lại nội dung bị nhầm.