Cryptography + Currency = Cryptocurrency — Part I

Hieu Tran
9 min readJun 16, 2018

--

Mật mã học đóng vai trò quan trọng trong các mô hình giao dịch tiền số hoá. Mật mã học được dùng để tạo ra tính ẩn danh của người sử dụng; bảo mật thộng tin giao dịch; và giúp cho các giao dịch trở nên an toàn hơn nhờ tính ko thể chối bỏ trách nhiệm. Trong bài viết này, chúng ta sẽ cùng tìm hiểu một số kiến thức cơ bản về mật mã học và cách sử dụng nó trong hệ thống tiền mã hoá. Với kiến thức cơ bản này, các bạn có thể hiểu phần nào cách thức hoạt động của các dự án ICO.

Phần 1: Giới thiệu hệ mã hoá khoá công khai và hàm băm mật mã

— — Hệ thống mã hoá là gì?

Là một hệ thống gồm các thuật toán dùng để mã hoá và giải mã một thông điệp. Thường một hệ thống mã hoá có ba thuật toán chính sau:

  • Tạo khoá (key generation algorithm): phát sinh ra các khoá bí mật dùng để mã và giải mã thông điệp
  • Mã hoá (encryption algorithm): Dùng khoá đã tạo để biến thông điệp ban đầu thành chuỗi nhìn trông có vẻ ngẫu nhiên, vô nghĩa.
  • Giải mã (decryption algorithm): Dùng khoá đã tạo để biến một chuỗi đã bị mã hoá thành thông điệp ban đầu.

— — Có bao nhiêu loại hệ thống mã hoá?

Có hai loại cơ bản. Mã hoá khoá bí mật và mã hoá khoá công khai. Hai hệ thống này khác nhau ở cách tạo khoá và sử dụng khoá.

  • Mã hoá khoá bí mật (Symmetric Encryption) sử dụng một chìa khoá duy nhất cho việc mã hoá và giải mã
  • Mã hoá khoá công khai (Asymmetric Encryption) sử dụng một cặp khoá: khoá bí mật và khoá công khai (private key/ public key). Trong đó, public key dùng để mã hoá, private key dùng để giải mã.
Hệ mã hoá khoá bí mật. Việc mã hoá và giải mả sử dụng cùng một khoá
Hệ mã hoá khoá công khai. Sử dụng public key của người nhận đễ mã hoá. Chỉ duy nhất private key của người nhận mới có thể giải mã.

Trong hệ thống Bitcoin cũng như Ethereum, hệ mã hoá khoá công khai được sử dụng để tạo ra các giao dịch chuyển coin đi (theo một cách khác). Trong các dự án lưu trữ phi tập trung, hệ mã hoá khoá bí mật được sử dụng để mã hoá tập tin có kích thước lớn (hệ mã hoá khoá công khai không làm được điều này).

— — Hệ thống mã hoá khoá công khai hoạt động như thế nào?

Thuật toán tạo khoá sẽ sinh ra một cặp khoá: private key và public key.

Thông thường, private key sẽ được chọn một cách ngẫu nhiên. Public key được tạo ra từ private key. Việc tính toán tạo ra public key phải là hàm một chiều (one-way function) để đảm bảo không thể khôi phục lại private key. Lý do là vì public key được chia sẽ rộng rãi, bất cứ ai cũng có thể nhìn thấy.

Giả sử A muốn gửi một thông điệp bí mật cho B. Việc đầu tiên A sẽ liên hệ B để xin public key. Sau đó A dùng public key của B để mã hoá thông điệp và gửi cho B. Vì chỉ B có private key, nên không ai khác ngoài B có thể giải mã thông điệp từ A.

Việc xác nhận chủ sở hữu public key rất quan trọng. Vì rất dễ bị lừa sử dụng public key của attackers. Nên trong các giao dịch tài chính, sử dụng public key phải đi kèm với một chứng thư xác nhận rằng B chính là chủ sở hữu của public key đó (hay còn gọi là digital certificate, các bạn hay thấy cái này trong giao thức https hàng ngày).

— — Điểm đặc biệt của mã công khai là gì?

Khi thay đổi cách sử dụng khoá, hệ mã hoá trở thành hệ chữ kí điện tử.

Hệ thống chữ kí điện tử. Gồm 2 quy trình kí và xác nhận chữ kí.

Ý nghĩa chữ kí điện tử cũng giống như chữ kí giấy. Bạn kí lên một văn bản đồng nghĩa với việc bạn sỡ hưu văn bản đó. Vì chữ kí của bạn là duy nhất nên không ai có thể giả mạo. Nếu ai đó biết chữ kí của bạn, người đó có thể xác nhận rằng: đây là văn bản do bạn kí. Bạn cũng không thể chối bỏ trách nhiệm sau khi đã kí lên một văn bản.

Thay vì sử dụng public key, private key được sử dụng trong thuật toán mã hoá để tạo ra chữ kí điện tử nhằm xác nhận rằng thông điệp này là của tôi, tôi tạo ra nó. Vì không ai có private key của bạn, nên chữ kí này là duy nhất, chỉ mình bạn tạo được nó mà thôi.

Thay vì sử dụng private key, public key được sử dụng trong thuật toán giải mã để xác minh rằng: Thông điệp này do người nào đó tạo ra. Vì sử dụng pubkic key nên ai cũng có thể xác nhận.

— — Chữ kí điện tử đóng vai trò như thế nào trong cryptocurrency?

Chữ kí điện tử được sử dụng để tạo các giao dịch chuyển tiền.

Ví dụ A muốn chuyển 1 btc cho B, A sẽ khởi tạo một giao dịch với thông điệp “A chuyển cho B số tiền là 1 btc” và các thông số giao dịch liên quan.

A sẽ sử dụng private key của mình để kí lên toàn bộ thông tin giao dịch. Gửi chữ kí này, cùng với public key của A lên hệ thống xác nhận của Blockchain.

Các nút trên hệ thống sẽ dùng public key để xác nhận thông tin người tạo giao dịch. Nếu thông tin trùng khớp, giao dịch này được coi là hợp lệ.

Việc quản lý private key là cực kì quan trọng trong hệ thống chữ kí điện tử cũng như mã hoá khoá công khai.

— — Cặp khoá bí mật và công khai lưu trữ ở đâu trong cryptocurrency?

Theo lý thuyết, người dùng sẽ tự quản lý cặp khoá của mình.

Tuy nhiên vì private key quá khó nhớ và tiềm ẩn nguy cơ bị đánh cắp khi máy tính bị nhiễm malware, trojan, virus, keylogger, …. Các ứng dụng ví sẽ giúp người dùng lưu trữ và quản lý khoá một cách tiện lợi hơn. Thậm chí nhiều ứng dụng ví còn quản lý luôn cả private key của người dùng.

— — Mối quan hệ của private key — public key — address là như thế nào?

Private key được sinh ra ngẫu nhiên, không thể đoán được. Từ private key, có thể tạo ra được public key. Từ public key, sẽ tạo ra một address duy nhất.

Trong hệ thống Bitcoin và Ethereum, hệ mã hoá khoá công khai dựa trên đường cong Elliptic được dùng để tạo chữ kí. Public key được tính từ private key bằng một phép tính nhân. Đặc điểm của phép nhân trên đường elliptic là không thể tìm ngược lại được giá trị ban đầu.

Từ public key, áp dụng hai lần hàm băm mật mã sẽ trích xuất được địa chỉ ví. Vì hàm băm là hàm một chiều, nên không thể suy ra được public key từ địa chỉ ví.

Một nguyên tắc trong mật mã học đó là: tất cả thông tin, thuật toán sử dụng trong bất kì hệ mã hoá phải công khai, ko giấu kín. Chỉ có secret key hay private key là bí mật mà thôi.

— — Hàm băm mật mã là gì?

Hàm băm mật mã (hash function) mục đích biến một thông điệp có kích thước bất kì thành một chuỗi trông có vẻ ngẫu nhiên (rác, vô nghĩa) với kích thước cố định. Ví dụ hàm băm SHA256 có đầu ra là một chuỗi 256 bits.

Hàm băm mật mã. Tạo ra một thông điệp có kích thước cố định từ một tập tin bất kì

— — Tính chất đặc trưng của hash function là gì?

Tính một chiều (one-way). Nghĩa là từ thông điệp ban đầu, dễ dàng tạo ra giá trị hash. Tuy nhiên từ giá trị hash, không có cách nào khôi phục lại thông điệp ban đầu.

Tính không đụng độ (Collision resistance). Rất khó để tìm được hai thông điệp khác nhau mà cho ra cùng một kết quả hash.

Nếu một trong hai tính chất này bị vi phạm, thì hash function đó không còn giá trị sử dụng.

— — Hash function được sử dụng trong cryptocurrency như thế nào?

Hash function được dùng trong hệ thống chữ kí điện tử để tạo giao dịch, tạo địa chỉ ví từ public key, thuật toán đồng thuận PoW, móc nối các block trong blockchain, cây xác nhận giao dịch lưu trong từng block…

Ví dụ, giả sử bạn có một chuỗi thông điệp rất dài. Nhưng hệ thống mã hoá khoá công khai không thể thực hiện với thông điệp dài. Hash function tạo ra một đặc trưng duy nhất cho thông điệp ban đầu. Sau đó, thuật toán tạo chữ kí trên thông điệp đã được hash. Chi tiết xem hình mô tả hệ thống chữ kí điện tử trên.

— — Cách sử dụng khoá private key như thế nào là tối ưu nhất để đảm bảo tài sản cryptocurrency?

Private key là chìa khoá sở hưu ví. Nếu giao private key cho một bên thứ 3 ví dụ ví coinbase thì liệu có an toàn hay không?

Nếu bạn lưu trữ private key ở nơi nào đó trong máy tính hoặc lưu vào giấy và gõ vào khi login, thì liệu có an toàn khi máy bị nhiễm malware, trojan, virus, keylogger, …?

Đối với việc quản lý ETH, theo cá nhân mình, hiện tại sử dụng Metamask, một add-on của trình duyệt web là tạm thời an toàn và là phương án tốt nhất hiện có. Vấn đề là nâng cao khả năng cảnh giác và bảo mật tài khoản của người dùng.

Xem thêm bài giới thiệu ví MEW ở đây https://bit.ly/2li2F9b.

— — Hệ thống mã hoá hiện tại là an toàn?

Hiện nay, các thuật toán mã hoá hay dùng trong ngân hàng, giao dịch thương mại điện tử là “tạm thời” an toàn.

Tuy nhiên, với sự phát triển nhanh của công nghệ, đặc biệt là sự ra đời của máy tính lượng tử (quantum computer) với khả năng xử lý lên tới hàng tỉ tỉ phép tính trên giây, thì tất cả các hệ thống đang dùng các phương thức mã hoá hiện tại coi như là sụp đổ.

Lấy ví dụ sau. Giả sử hệ thống máy tính của hacker cần bẻ một khoá có độ dài 256 bits. Nghĩa là nó phải vét cạn 2²⁵⁶ trường hợp có thể của khoá. Giả sử 50 siêu máy tính thực hiện được 10¹⁸ phép thử khoá trên 1 giây. Vậy hệ thống của hacker phải mất 3x10⁵¹ năm mới có thể vét cạn được tất cả các trường hợp của khoá.

Khi một máy tính với khả năng tính toán cực mạnh, thì thay vì 3x10⁵¹ năm, hoàn toàn có thể rút xuống còn 1 ngày.

— — Vậy phải thay đổi hệ thống mã hoá hay sao?

Hiệu nay, một số dự án ICO công bố rằng hệ thống của họ an toàn với máy tính lượng tử. Nghĩa là dù máy tính lượng tử có ra đời, cũng không có khả năng tấn công hệ thống của họ. Điều này là hoàn toàn chính xác.

Hiện nay, phương pháp mã hoá mới dựa trên Dàn (lattice-based cryptosystem) đã được chứng minh là an toàn với máy tính lượng tử. Các hệ thống mới dựa trên hệ mã hoá này thì hiển nhiên là an toàn. IOTA là một ví dụ điển hình.

Trong bài tiếp theo, chúng ta sẽ cùng sử dụng kiến thức mật mã học tạm có này để review dự án NuCypher!!!

-KryptoLight.

--

--