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
Công nghệ blockchain
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
Để 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ý)
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ý.
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
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
Các nguy cơ
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.
Các bài báo tham khảo: