Chữ ký Ngưỡng (Threshold Signatures) là gì
Trang chủ
Bài viết
Chữ ký Ngưỡng (Threshold Signatures) là gì

Chữ ký Ngưỡng (Threshold Signatures) là gì

Nâng cao
Đã đăng Jul 21, 2019Đã cập nhật Apr 29, 2021
12m
Tác giả: Omer Shlomovits, ZenGo.
Lược đồ Chữ ký Ngưỡng (Threshold Signature Scheme - TSS) là một thuật toán mã hóa bậc thấp đã có từ lâu, được sử dụng để tạo khóa phân tán và chữ ký. Sử dụng TSS trên các máy của người dùng (máy khách) blockchain là một mô hình mới có thể mang đến nhiều lợi ích, đặc biệt là trong lĩnh vực bảo mật. Trên phạm vi rộng hơn, TSS có thể ảnh hưởng đến việc thiết kế các hệ thống quản lý (chẳng hạn các ví tiền mã hóa) và mở ra khả năng hỗ trợ gốc trong các trường hợp sử dụng DeFi. Tuy nhiên, bất chấp những khả năng này, TSS vẫn là một công nghệ mới, bởi vậy chúng ta cũng cần xem xét những rủi ro và hạn chế mà nó đem lại.

Trong bài viết này, chúng tôi sẽ mô tả TSS là gì, những lợi ích tiềm năng mà nó có thể đem đến cho không gian blockchain, cách thức triển khai lược đồ này trên một máy khách trong mạng blockchain. Chúng tôi cũng sẽ so sánh lược đồ này với lược đồ chia sẻ bí mật Shamir (Shamir secret sharing) và Đa chữ ký (Multisig) cũng như những cách thức sử dụng TSS để quản lý khóa phân tán, và cuối cùng chúng tôi sẽ thảo luận những rủi ro và hạn chế của hệ thống này.

Sức mạnh của công nghệ mã hóa

Để hiểu về TSS, trước hết chúng ta cần có hiểu biết cơ bản về công nghệ mã hóa. Từ thập niên 70, ngày càng nhiều hệ thống Internet (như TLS và PGP) sử dụng công nghệ mã hóa bất đối xứng, hay còn được gọi là Công nghệ mã hóa khóa công khai (Public key cryptography - PKC). PKC sử dụng hai khóa: khóa công khai và khóa cá nhân. Nếu khóa công khai là khóa có thể được công khai và bất kỳ ai cũng có thể sử dụng nó, thì khóa cá nhân là một thông tin bí mật và đại diện cho tính bảo mật của hệ thống mã hóa này.
Mã hóa và chữ ký số là hai ứng dụng phổ biến nhất của PKC. Cả hai hệ thống mã hóa và chữ ký số đều dựa trên ba thuật toán như sau. Thứ nhất là thuật toán tạo cặp khóa công khai và khóa cá nhân, thứ hai là thuật toán tạo văn bản mã hóa/chữ ký, và thứ ba là quy trình giải mã/xác thực. Ở các hệ thống chữ ký số, thuật toán chữ ký cần biết khóa cá nhân để có thể tạo một chữ ký duy nhất, chỉ người sở hữu nó mới biết khóa cá nhân này. Chữ ký này sau đó được đính kèm với tin nhắn sao cho bất kỳ ai có khóa công khai cũng có thể xác thực đó là chữ ký thực và chính xác.


Công nghệ blockchain

Có thể khẳng định blockchain là một công nghệ rất mạnh mẽ. Nó cung cấp một lớp đồng thuận, lớp này tổ chức và ghi lại các sự kiện. Cơ sở hạ tầng này cho phép những người dùng như chúng ta xây dựng được các nền kinh tế, và thậm chí là cả các chính phủ, phân quyền. Tuy nhiên, công nghệ mã hóa được sử dụng để vận hành một blockchain cơ bản có thể được dựa hoàn toàn trên các chữ ký số. Trong blockchain, các khóa cá nhân tượng trưng cho danh tính, còn chữ ký là một tuyên bố hoặc một xác nhận công khai mà danh tính đó đưa ra. Blockchain sẽ yêu cầu các tuyên bố đó và xác thực chúng dựa trên một bộ quy tắc, bộ quy tắc này đảm bảo các chữ ký chính xác và không thể giả mạo được.
Ngược lại với công nghệ mã hóa cổ điển được sử dụng trong blockchain, các công nghệ mã hóa hiện đại còn bao gồm nhiều kỹ thuật tinh vi, có thể kể tên một số như sau: kỹ thuật chứng minh mà không phải tiết lộ, mã hóa đồng cấu, và kỹ thuật tính toán nhiều bên. Như chúng ta đã chứng kiến trong những năm qua, các nghiên cứu về blockchain đã thúc đẩy công nghệ mã hóa ứng dụng lên một tầm cao mới, với những kỹ thuật mang tính đột phá như được mô tả ở trên cũng như những kỹ thuật khác. 

Trong bài viết này, chúng tôi sẽ tập trung mô tả về một trong số các kỹ thuật đột phá đó: chữ ký ngưỡng bảo mật hiệu quả (TSS).


Kỹ thuật tính toán nhiều bên (MPC) và lược đồ chữ ký ngưỡng (TSS)

Kỹ thuật tính toán nhiều bên (MPC) là một nhánh của công nghệ mã hóa, kỹ thuật này có nguồn gốc từ công trình của Andrew C. Yao gần 40 năm trước. Trong MPC, một tập hợp các bên không tin tưởng lẫn nhau cùng tính toán chung một hàm với các dữ liệu đầu vào của họ mà không tiết lộ các dữ liệu đầu vào đó cho các bên còn lại. 

Hãy lấy một ví dụ, giả sử có n nhân viên của một công ty muốn biết ai là người được trả lương cao nhất trong số họ, tuy nhiên không muốn cho người khác biết mức lương của mình. Trong ví dụ này, các dữ liệu đầu vào cá nhân là mức lương, và kết quả đầu ra sẽ là tên của nhân viên được trả lương cao nhất. Bằng việc sử dụng kỹ thuật MPC, chúng ta có thể đảm bảo thông tin về mức lương của mỗi cá nhân không bị tiết lộ trong quá trình tính toán. 

Hai thuộc tính của MPC là tính chính xác và tính riêng tư:

  • Tính chính xác: kết quả được thuật toán tính chính xác (theo kỳ vọng).

  • Tính riêng tư: dữ liệu đầu vào bí mật của một bên sẽ không bị tiết lộ cho các bên khác.

Chúng ta sẽ sử dụng MPC để tính chữ ký số theo cách phân tán. Hãy xem các thuộc tính trên được áp dụng như thế nào cho chữ ký. Như đã nói ở trên, hệ thống chữ ký gồm ba bước: 

  • Tạo khóa: bước đầu tiên cũng là bước phức tạp nhất. Chúng ta cần tạo một khóa công khai, khóa này sẽ được sử dụng để xác thực các chữ ký. Tuy nhiên, chúng ta cũng cần tạo ra một thông tin bí mật cho mỗi bên, ở đây chúng ta sẽ gọi là phần thông tin bí mật. Để đảm bảo tính chính xác và tính riêng tư, hàm sẽ xuất một khóa công khai chung cho tất cả các bên và một phần thông tin bí mật cho mỗi bên để thỏa mãn hai thuộc tính: (1) tính riêng tư: không một bên nào được biết phần thông tin bí mật của bên khác, và (2) tính chính xác: khóa công khai là một hàm của các phần thông tin bí mật.

  • Ký tên: bước này bao gồm một hàm tạo chữ ký. Mỗi cá nhân sẽ nhập dữ liệu đầu vào là phần thông tin bí mật của mình, phần thông tin này là đầu ra của bước thứ nhất (tạo khóa phân tán). Ngoài ra, có một dữ liệu đầu vào mà tất cả các bên đều có thể thấy, đó chính là thông điệp cần ký tên. Kết quả đầu ra của bước này là một chữ ký số, thuộc tính tính riêng tư bảo đảm rằng không có dữ liệu bí mật nào bị tiết lộ trong quá trình tính toán.

  • Xác thực: thuật toán xác thực vẫn giống như trong công nghệ mã hóa cổ điển. Để tương thích với các chữ ký một khóa, tất cả những người biết khóa công khai đều có thể kiểm tra và xác thực các chữ ký. Đây chính xác là công việc của các node xác thực blockchain.

Chúng tôi đặt tên cho sự kết hợp kỹ thuật tạo khóa phân tán (DKG) và ký tên phân tán này là lược đồ chữ ký ngưỡng (TSS).


Tích hợp TSS với blockchain

Phương thức tự nhiên để tích hợp TSS trên blockchain là để cho các máy khách trên blockchain tạo các khóa và chữ ký bằng cách sử dụng TSS. Ở đây, chúng tôi sử dụng thuật ngữ máy khách trên blockchain để mô tả một tập hợp các lệnh do một node đầy đủ thực hiện. Trên thực tế, công nghệ TSS cho phép chúng ta thay thế tất cả các lệnh liên quan đến khóa cá nhân bằng các phép tính toán phân tán.

Để giải thích rõ hơn, trước hết chúng tôi sẽ mô tả ngắn gọn cách thức tạo các địa chỉ trên thiết kế blockchain cổ điển.  Một cách đơn giản, chúng ta có thể tạo một địa chỉ mới bằng cách tạo một khóa cá nhân, sau đó tính toán khóa công khai từ khóa cá nhân. Sau đó, chúng ta dẫn xuất địa chỉ công khai từ khóa công khai.

Bây giờ, bằng cách sử dụng TSS, chúng ta sẽ có một tập hợp các bên cùng tham gia vào quá trình tính toán khóa công khai, mỗi bên nắm giữ một phần bí mật của khóa cá nhân (các phần thông tin bí mật được giữ kín với các bên còn lại). Từ khóa công khai, chúng ta có thể lấy được địa chỉ công khai theo cách thức giống như ở hệ thống truyền thống, khiến cho blockchain không thể biết địa chỉ được tạo ra như thế nào. Cơ chế này có ưu điểm là khóa cá nhân sẽ không còn là điểm hư hỏng duy nhất nữa, bởi vì mỗi bên chỉ nắm giữ một phần của nó. 

Quy trình tương tự được sử dụng khi ký các giao dịch. Khi ký các giao dịch, thay vì chỉ một bên ký với khóa cá nhân của mình, chúng ta chạy một quy trình tạo chữ ký phân tán có sự tham gia của nhiều bên. Như vậy mỗi bên có thể tạo một chữ ký hợp lệ, miễn là họ hành động trung thực. Như vậy, chúng ta đã chuyển đổi từ tính toán cục bộ (một điểm hư hỏng duy nhất) sang tính toán tương tác.

Chúng tôi muốn nhấn mạnh rằng có thể thực hiện tạo khóa phân tán theo cách thức cho phép các cấu trúc tiếp cận khác nhau: cài đặt chung “t trong tổng số n” sẽ có thể chống lại lên tới t sự hư hỏng tùy ý trong các hoạt động vận hành liên quan đến khóa cá nhân mà không ảnh hưởng đến tính bảo mật.


TSS và Multisig (đa chữ ký)

Một số blockchain cung cấp tính năng TSS như một phần tích hợp hoặc phần có thể lập trình của phần mềm. Chúng tôi gọi tính năng này multisig hay đa chữ ký. Để hiểu rõ hơn sự khác biệt giữa hai kỹ thuật này, chúng ta có thể xem xét multisig như một TSS trong lớp ứng dụng của blockchain.

Nói cách khác, về bản chất, multisig và TSS nhằm đạt các mục tiêu giống nhau, nhưng TSS đang sử dụng công nghệ mã hóa ngoài chuỗi, trong khi multisig xảy ra trên chuỗi. Tuy nhiên, blockchain cần một cách thức để mã hóa đa chữ ký, điều đó có thể ảnh hưởng đến tính riêng tư bởi vì cấu trúc tiếp cận (số lượng người ký) sẽ bị tiết lộ trên blockchain. Chi phí của một giao dịch đa chữ ký sẽ cao hơn vì thông tin của những người ký khác nhau cũng cần được thông báo trên blockchain.

Trong TSS, thông tin về những người ký được xếp vào một giao dịch bình thường để giảm chi phí và bảo đảm tính riêng tư. Mặt khác, đa chữ ký có thể không tương tác, điều này giúp giảm bớt công việc phải chạy một lớp giao tiếp phức tạp giữa những người ký.

Điểm khác biệt chính là đa chữ ký mang tính riêng biệt cho mỗi blockchain, với mỗi blockchain nó cần được triển khai lại, và một số blockchain không hề hỗ trợ đa chữ ký. Ngược lại, TSS hoàn toàn dựa vào công nghệ mã hóa, bởi vậy nó luôn được hỗ trợ. Bạn có thể đọc một bài viết rất hay về sự khác biệt giữa hai kỹ thuật này tại đây.


TSS và lược đồ chia sẻ bí mật Shamir

Lược đồ chia sẻ bí mật Shamir (SSSS) là một phương thức lưu trữ khóa cá nhân theo cách thức phân tán, theo đó khi khóa cá nhân  không được sử dụng, nó sẽ được lưu trữ ở nhiều vị trí khác nhau. Có hai điểm khác biệt giữa SSSS và TSS:

  • Tạo khóa: trong SSSS, có một bên được gọi là “nhà giao dịch”, bên này chịu trách nhiệm tạo các phần thông tin bí mật về khóa cá nhân. Điều này có nghĩa là tại thời điểm Tạo khóa, khóa cá nhân được lưu trữ tại một vị trí rồi sau đó nhà giao dịch sẽ phân tán nó đến nhiều vị trí khác nhau. Trong TSS, không có nhà giao dịch vì vai trò này được phân tán sao cho toàn bộ khóa cá nhân không bao giờ nằm ở cùng một vị trí.

  • Ký tên: trong SSSS, các bên phải tái tạo lại toàn bộ khóa cá nhân để có thể ký tên, điều này dẫn đến một điểm hư hỏng duy nhất mỗi lần cần đến một chữ ký. Trong TSS, việc ký tên được thực hiện theo cách phân tán mà không bao giờ phải tái tạo lại các phần thông tin bí mật.

Như chúng ta có thể thấy, trong TSS, khóa cá nhân (đại diện cho tính bảo mật của hệ thống) không bao giờ nằm ở cùng một vị trí trong toàn bộ thời gian nó tồn tại.


Ví ngưỡng

Có một số khác biệt giữa ví dựa trên công nghệ TSS và ví tiền mã hóa. Ví truyền thống thường tạo một cụm từ chứa thông tin khôi phục (seed phrase) và sử dụng nó để dẫn xuất các địa chỉ theo phương thức tất định. Sau đó người dùng có thể dùng cấu trúc tất định theo cấp bậc (hierarchical deterministic - HD) để 1) xác định các khóa cá nhân tương ứng với các địa chỉ công khai của ví và ký các giao dịch với các khóa đó và 2) khôi phục tất cả các khóa của ví bằng cách sử dụng cụm từ chứa thông tin khôi phục.

Ví ngưỡng có một quy trình phức tạp hơn. Mặc dù nó có thể tạo một cấu trúc HD, nhưng quy trình tạo này phải được tính toán theo cách phân tán, như một giao thức MPC khác. Các bên phải cùng quyết định khóa được sử dụng tiếp theo. Nói cách khác, mỗi bên sẽ có một cụm từ chứa thông tin khôi phục của riêng mình. Các cụm từ chứa thông tin khôi phục được tạo riêng biệt và chúng không bao giờ được kết hợp với nhau để một bên không thể dẫn xuất các khóa cá nhân từ thông tin khôi phục của nó.

Các ví dựa trên TSS cũng có một tính năng bảo mật thú vị, tính năng này cho phép xoay khóa cá nhân mà không phải thay đổi khóa công khai và địa chỉ blockchain tương ứng. Xoay khóa cá nhân, hay còn gọi là chia sẻ bí mật chủ động, vẫn không phải là một giao thức MPC khác sử dụng các phần thông tin bí mật làm dữ liệu đầu vào và xuất kết quả đầu ra là một tập hợp thông tin bí mật mới. Có thể xóa các phần thông tin bí mật cũ và sử dụng các phần thông tin bí mật mới theo cách tương tự.

Cấu trúc này thêm khía cạnh thời gian vào tính năng bảo mật, điều này có nghĩa là kẻ tấn công phải ở nhiều vị trí tại cùng một thời điểm để có thể tấn công một ví ngưỡng. Kết hợp các phần thông tin bí mật trước và sau khi xoay sẽ không giúp kẻ tấn công trở nên mạnh hơn nếu chúng muốn giả mạo một chữ ký. 

Một nhược điểm của loại ví này là nó thiếu đi một cụm từ chứa thông tin khôi phục, điều đó khiến nó trở nên không tương thích với các hệ thống ví có một khóa. Bởi vậy cần phải xem xét những bên nào sẽ nắm giữ các phần thông tin bí mật.

Có một số kiến trúc khả thi như sau:

  • Sử dụng dịch vụ bên ngoài để thực hiện TSS: người dùng sẽ để cho “n” máy chủ thay mình thực hiện các phép tính toán. Thuê các nhà cung cấp dịch vụ bên ngoài để thực hiện việc tạo khóa, quản lý khóa và ký tên. Những nhà cung cấp này không phải là chủ sở hữu của tài sản mà họ được thanh toán để cung cấp một lớp bảo mật.

  • Sử dụng nhiều thiết bị: Người dùng sẽ chạy TSS mà các bên tham gia là các thiết bị thuộc sở hữu của họ. Ví dụ - một bên sẽ là một thiết bị IoT, một bên khác là thiết bị di động của người dùng, một bên là máy tính của họ, v.v.

  • Lai tạo: TSS sẽ được vận hành, trong đó một số bên được kiểm soát bởi các nhà cung cấp dịch vụ bên ngoài và một số bên chạy trên những thiết bị thuộc sở hữu của người dùng.

Phương thức đầu tiên giảm bớt gánh nặng tính toán TSS cho phía máy khách của người dùng. Tuy nhiên, những nhà cung cấp dịch vụ có thể thông đồng với nhau (chúng tôi giả định rằng không thể tất cả cùng bị tấn công một lúc, nhưng trên thực tế điều này cũng có thể xảy ra) và đánh cắp tài sản của người dùng.

Phương thức thứ hai cho người dùng quyền kiểm soát hoàn toàn, nhưng khiến việc thực hiện các giao dịch trở nên phiền toái vì bạn cần có nhiều thiết bị khác nhau để trực tuyến và tham gia vào tính toán TSS.

Lựa chọn thứ ba được xem là phương án tốt nhất vì nó là một phương thức dễ dàng và nhanh chóng để người dùng thực hiện các giao dịch mà không phải e ngại rằng các nhà cung cấp dịch vụ bên ngoài có thể thực hiện giao dịch mà không được sự cho phép của người dùng.


TSS và hợp đồng thông minh 

Trong nhiều năm qua, các nhà nghiên cứu đã tìm ra nhiều ứng dụng của chữ ký số, và một số ứng dụng vô cùng quan trọng. Như đã đề cập ở trên, TSS là một thuật toán mã hóa bậc thấp đã có từ lâu, có khả năng tăng cường bảo mật đáng kể. Chúng ta có thể nói rằng nhiều tính năng của blockchain có thể được thay thế bởi các kỹ thuật mã hóa dựa trên TSS. Có thể xây dựng các ứng dụng phân quyền, các giải pháp mở rộng lớp 2, hoán đổi nguyên tử, pha trộn, kế thừa và các tính năng khác trên khung TSS. Cuối cùng, điều này sẽ cho phép thay thế các hoạt động vận hành hợp đồng thông minh trên chuỗi đắt đỏ và rủi ro bằng các lựa chọn thay thế rẻ tiền và đáng tin cậy hơn.
Một số ví dụ có thể kể đến bao gồm: Khóa Nhiều bước nhảy sử dụng chữ ký hai bên một cách thông minh, và với mạng lưới kênh thanh toán bảo mật và riêng tư hơn, nó có thể được sử dụng để thay thế mạng lưới Bitcoin lightning network. ShareLock có lẽ là giải pháp pha trộn trên chuỗi có chi phí hợp lý nhất cho Ethereum, dựa trên việc xác thực một chữ ký ngưỡng duy nhất.


Các nguy cơ

Trong những năm gần đây, số lượng các triển khai TSS đã tăng lên đáng kể. Tuy nhiên, là một công nghệ khá mới mẻ, nó vẫn có những hạn chế và một số vấn đề cần cân nhắc. So với công nghệ mã hóa khóa công khai cổ điển, các giao thức TSS có thể rất phức tạp nhưng vẫn chưa được “kiểm thử trên thực tế”. So với các chữ ký số đơn giản, TSS thường yêu cầu các giả định mã hóa bổ sung yếu hơn. Do đó, các véc-tơ tấn công mã hóa không tồn tại trong các thiết lập truyền thống giờ đây đang được khám phá (xem bài trình bày này từ Hội thảo Breaking Bitcoin Conference 2019). Các kỹ sư về bảo mật và các nhà mật mã học ứng dụng có thể hỗ trợ để triển khai TSS một cách an toàn cho hệ thống của bạn.


Kết luận

Trong bài viết này, chúng tôi đã giới thiệu các vấn đề cơ bản về lược đồ chữ ký ngưỡng (TSS), một thuật toán mã hóa bậc thấp đã có từ lâu, có tiềm năng thay đổi đáng kể cách thức chúng ta sử dụng blockchain.

Do bài viết này không thảo luận về Ngưỡng ECDSA có thể được sử dụng trong Binance Chain và Bitcoin, những độc giả quan tâm đến các chủ đề này có thể tham khảo danh sách bao gồm các bài báo dưới đây. Ngoài ra, nếu bạn muốn thử các triển khai TSS, bạn có thể tìm được một mã cho ví Binance Chain có sự tham gia của hai bên tại đây hoặc thử ví ZenGo, ví này sử dụng phương thức lai tạo để cung cấp một ví Binance Chain không lưu ký có sự tham gia của hai bên.


Các bài báo tham khảo: