Tác giả: Omer Shlomovits, ZenGo.
Lược đồ chữ ký ngưỡng (TSS) là một sơ đồ mật mã nguyên thủy để tạo và ký khóa phân tán. Việc sử dụng TSS trong các máy khách blockchain là một mô hình mới có thể mang lại nhiều lợi ích, đặc biệt là về mặt bảo mật. Theo nghĩa rộng hơn, TSS có thể ảnh hưởng đến việc thiết kế các hệ thống quản lý khóa (chẳng hạn như ví tiền điện tử) và dẫn đường cho hỗ trợ gốc trong các trường hợp sử dụng DeFi. Tuy nhiên, TSS vẫn là một công nghệ mới nên những rủi ro, hạn chế cũng cần được cân nhắc.
Trong bài viết này, chúng tôi sẽ đề cập đến TSS là gì, những lợi thế tiềm năng mà nó mang lại cho không gian blockchain là gì, nó có thể được triển khai như thế nào trong ứng dụng khách blockchain, nó so sánh với chia sẻ bí mật Shamir và Multisig như thế nào, các cách khác nhau để sử dụng TSS để quản lý khóa phân tán và cuối cùng chúng tôi thảo luận về những rủi ro và hạn chế.
Sức mạnh của mật mã
Để hiểu TSS, trước tiên chúng ta cần một số kiến thức cơ bản về mật mã. Kể từ những năm 1970, ngày càng nhiều hệ thống Internet (như TLS và PGP) sử dụng mật mã bất đối xứng, còn được gọi là mật mã khóa công khai (PKC). PKC sử dụng hai khóa: một khóa chung và một khóa riêng. Mặc dù khóa chung không phải là bí mật và có thể được công bố và sử dụng bởi bất kỳ ai, nhưng khóa riêng là một phần thông tin bí mật thể hiện tính bảo mật của hệ thống.
Mã hóa và chữ ký số là hai cách sử dụng phổ biến nhất của PKC. Cả sơ đồ mã hóa và chữ ký số đều dựa trên bộ ba thuật toán. Đầu tiên là tạo cặp khóa riêng và khóa chung, thứ hai là tạo văn bản mã hóa/chữ ký và thứ ba là quá trình giải mã/xác minh. Liên quan đến chữ ký số, thuật toán ký yêu cầu khóa riêng, chỉ chủ sở hữu của nó mới biết, để tạo ra một chữ ký duy nhất. Chữ ký được gắn vào một tin nhắn nhất định theo cách mà bất kỳ ai nắm giữ khóa chung đều có thể xác minh tính xác thực và chính xác của nó.
Chuỗi khối
Không còn nghi ngờ gì nữa, blockchain là một công nghệ rất mạnh mẽ. Nó cung cấp một lớp đồng thuận để tổ chức và ghi lại các sự kiện. Cơ sở hạ tầng như vậy mang lại cho chúng ta, những người dùng, sức mạnh tiềm tàng để xây dựng nền kinh tế phi tập trung và thậm chí cả chính phủ. Điều đáng ngạc nhiên là mật mã cần thiết để chạy một blockchain cơ bản chỉ có thể dựa trên chữ ký số. Trong bối cảnh của blockchain, các khóa riêng đại diện cho danh tính trong khi chữ ký là một tuyên bố công khai hoặc khiếu nại được thực hiện bởi một danh tính. Chuỗi khối sẽ sắp xếp các tuyên bố và xác thực chúng theo một bộ quy tắc, đảm bảo rằng chữ ký là không thể giả mạo và chính xác.
Ngược lại với mật mã cổ điển hơn được sử dụng trong chuỗi khối, hộp công cụ mật mã hiện đại bao gồm một số thủ thuật kỳ diệu tuyệt vời: bằng chứng không có kiến thức, mã hóa đồng cấu và tính toán nhiều bên, v.v. Như chúng ta đã thấy trong thập kỷ qua, nghiên cứu blockchain đã thúc đẩy ứng dụng mật mã rất nhiều, với những đột phá gần đây về tất cả những điều trên và hơn thế nữa.
Trong bài viết này, chúng tôi sẽ tập trung vào một bước đột phá duy nhất: chữ ký ngưỡng bảo mật hiệu quả (TSS).
MPC và sơ đồ chữ ký ngưỡng (TSS)
Tính toán đa bên (MPC) là một nhánh của mật mã bắt đầu từ công trình quan trọng của Andrew C. Yao, gần 40 năm trước. Trong MPC, một nhóm các bên không tin tưởng lẫn nhau sẽ cố gắng cùng tính toán một hàm dựa trên đầu vào của họ trong khi vẫn giữ những đầu vào đó ở chế độ riêng tư.
Ví dụ: giả sử n nhân viên của một công ty muốn biết ai được trả nhiều nhất nhưng không tiết lộ cho nhau biết mức lương thực tế của họ. Ở đây đầu vào riêng là tiền lương và đầu ra sẽ là tên của nhân viên có mức lương cao nhất. Thực hiện tính toán này bằng MPC, chúng tôi nhận được rằng thậm chí không một khoản lương nào bị rò rỉ trong quá trình tính toán.
Hai thuộc tính chính của MPC là tính chính xác và quyền riêng tư:
Tính chính xác: đầu ra do thuật toán tạo ra là chính xác (như mong đợi).
Quyền riêng tư: dữ liệu đầu vào bí mật mà một bên nắm giữ sẽ không bị rò rỉ cho các bên khác.
Chúng ta sẽ sử dụng MPC để tính toán chữ ký số theo cách phân tán. Hãy xem các thuộc tính trên có thể được áp dụng cho chữ ký như thế nào. Hãy nhớ lại rằng, đối với chữ ký, chúng ta có ba bước:
Tạo khóa: bước đầu tiên cũng phức tạp nhất. Chúng tôi cần tạo một khóa sẽ được công khai và được sử dụng để xác minh chữ ký trong tương lai. Tuy nhiên, chúng tôi cũng cần tạo một bí mật riêng cho mỗi bên mà chúng tôi sẽ gọi là chia sẻ bí mật. Về tính chính xác và quyền riêng tư, chúng tôi nói rằng hàm này sẽ xuất ra cùng một khóa chung cho tất cả các bên và chia sẻ bí mật khác nhau cho mỗi bên sao cho: (1) quyền riêng tư: không có dữ liệu chia sẻ bí mật nào bị rò rỉ giữa các bên và (2) tính đúng đắn: khóa công khai là hàm của các phần chia sẻ bí mật.
Ký: bước này liên quan đến chức năng tạo chữ ký. Đầu vào của mỗi bên sẽ là phần chia sẻ bí mật của mình, được tạo dưới dạng đầu ra của bước trước đó (tạo khóa phân tán). Ngoài ra còn có ý kiến đóng góp công khai được mọi người biết đến, đó là thông điệp cần được ký. Đầu ra sẽ là chữ ký số và đặc tính riêng tư đảm bảo rằng không xảy ra rò rỉ cổ phiếu bí mật trong quá trình tính toán.
Xác minh: thuật toán xác minh vẫn giữ nguyên như trong cài đặt cổ điển. Để tương thích với chữ ký khóa đơn, mọi người có kiến thức về khóa chung đều có thể xác minh và xác thực chữ ký. Đây chính xác là những gì các nút xác thực blockchain thực hiện.
Sơ đồ chữ ký ngưỡng (TSS) là tên mà chúng tôi đặt cho thành phần tạo khóa phân tán (DKG) và ký phân phối sơ đồ chữ ký ngưỡng này.
Kết hợp TSS với blockchain
Cách tự nhiên mà TSS có thể được đưa vào sử dụng trong blockchain là thay đổi ứng dụng khách blockchain để tạo khóa và chữ ký bằng TSS. Ở đây, chúng tôi sử dụng thuật ngữ máy khách blockchain để chỉ tập hợp các lệnh được thực thi bởi một nút đầy đủ. Trong 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 riêng bằng các phép tính phân tán.
Để giải thích chi tiết hơn, chúng tôi bắt đầu bằng cách mô tả ngắn gọn cách tạo địa chỉ mới trên thiết kế blockchain cổ điển. Nói 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 khóa riêng và sau đó tính toán khóa chung từ khóa riêng. Cuối cùng, địa chỉ blockchain được lấy từ khóa chung.
Bây giờ, bằng cách sử dụng TSS, chúng ta sẽ có một tập hợp n bên cùng tính toán khóa chung, mỗi bên nắm giữ một phần bí mật của khóa riêng (các chia sẻ riêng lẻ không được tiết lộ cho các bên khác). Từ khóa chung, chúng ta có thể lấy địa chỉ theo cách tương tự như trong hệ thống truyền thống, khiến blockchain không thể biết được địa chỉ được tạo như thế nào. Ưu điểm là khóa riêng không còn là một điểm lỗi nữa vì mỗi bên chỉ nắm giữ một phần của khóa đó.
Điều tương tự có thể được thực hiện khi ký kết giao dịch. Trong trường hợp này, thay vì một bên ký bằng khóa riêng của họ, chúng tôi chạy tạo chữ ký phân tán giữa nhiều bên. Vì vậy, mỗi bên có thể tạo ra một chữ ký hợp lệ miễn là có đủ người hành động trung thực. Một lần nữa, chúng tôi chuyển từ tính toán cục bộ (điểm lỗi duy nhất) sang tính toán tương tác.
Điều quan trọng cần đề cập là việc tạo khóa phân tán có thể được thực hiện theo cách cho phép các loại cấu trúc truy cập khác nhau: cài đặt chung “t out of n” sẽ có thể chịu được tới t lỗi tùy ý trong các hoạt động liên quan đến khóa riêng tư mà không cần gây tổn hại đến an ninh.
TSS so với Multisig
Một số blockchain cung cấp chức năng TSS như một phần tích hợp hoặc có thể lập trình của phần mềm. Chúng tôi gọi chức năng này là multisig hoặc multi-signature. Để hiểu rõ hơn về sự khác biệt, chúng ta có thể xem multisig như một TSS trong lớp ứng dụng của blockchain.
Nói cách khác, cả multisig và TSS về cơ bản đều cố gắng đạt được các mục tiêu tương tự, nhưng TSS đang sử dụng mật mã ngoài chuỗi, trong khi multisig xảy ra trên chuỗi. Tuy nhiên, blockchain cần một cách mã hóa multisig, điều này có thể gây tổn hại đến quyền riêng tư vì cấu trúc truy cập (số lượng người ký) bị lộ trên blockchain. Chi phí của giao dịch nhiều chữ ký sẽ cao hơn vì thông tin về những người ký khác nhau cũng cần được truyền đạt trên blockchain.
Trong TSS, thông tin chi tiết của người ký được xếp vào giao dịch thông thường, giảm chi phí và duy trì quyền riêng tư. Mặt khác, multisig có thể không tương tác, giúp tránh rắc rối khi chạy lớp giao tiếp phức tạp giữa những người ký khác nhau.
Điểm khác biệt chính là multisig dành riêng cho blockchain và cần được triển khai lại cho mọi blockchain và trong một số trường hợp, nó hoàn toàn không được hỗ trợ. Ngược lại, TSS dựa vào mật mã thuần túy nên luôn có thể hỗ trợ. Bạn có thể tìm thấy một bài viết tuyệt vời với hình ảnh minh họa về sự khác biệt ở đây.
Kế hoạch chia sẻ bí mật TSS và Shamir
Sơ đồ chia sẻ bí mật Shamir (SSSS) cung cấp một cách để lưu trữ khóa riêng tư theo cách phân tán sao cho khi khóa riêng tư ở trạng thái tĩnh, nó được lưu trữ ở nhiều vị trí. Có hai điểm khác biệt giữa SSSS và TSS:
Tạo khóa: trong SSSS, có một bên duy nhất được gọi là “đại lý” chịu trách nhiệm tạo ra các chia sẻ bí mật khóa riêng. Điều đó có nghĩa là tại thời điểm Tạo khóa, khóa riêng được tạo tại một vị trí duy nhất và sau đó được đại lý phân phối đến các vị trí khác nhau. Trong TSS, không có đại lý vì vai trò của nó được phân phối sao cho toàn bộ khóa riêng không bao giờ ở một vị trí duy nhất.
Ký: trong SSSS, các bên phải xây dựng lại toàn bộ khóa riêng để ký, điều này lại dẫn đến một điểm lỗi mỗi lần cần chữ ký. Trong TSS, việc ký kết được thực hiện theo cách phân tán mà không cần xây dựng lại các cổ phiếu bí mật.
Như chúng ta có thể thấy, trong TSS, khóa riêng (đại diện cho tính bảo mật của hệ thống) không bao giờ ở một vị trí duy nhất trong suốt vòng đời của nó.
Ví ngưỡng
Ví dựa trên công nghệ TSS hơi khác so với ví tiền điện tử truyền thống. Thông thường, một ví thông thường tạo ra một cụm từ hạt giống và sử dụng nó để lấy địa chỉ một cách xác định. Sau này, người dùng có thể sử dụng cấu trúc xác định phân cấp (HD) này để 1) tiếp cận các khóa riêng tương ứng với địa chỉ ví và ký giao dịch với chúng và 2) để khôi phục tất cả các khóa ví bằng cụm từ hạt giống.
Trong ví ngưỡng, mọi thứ phức tạp hơn. Mặc dù có thể tạo cấu trúc HD nhưng việc tạo ra nó phải được tính toán theo cách phân tán, giống như một giao thức MPC khác. Các bên cần cùng nhau quyết định xem chìa khóa tiếp theo sẽ được sử dụng là gì. Nói cách khác, mỗi bên sẽ có một cụm từ gốc của riêng mình. Các cụm từ hạt giống được tạo riêng biệt và không bao giờ kết hợp để một bên không thể lấy được khóa riêng từ hạt giống của mình.
Ví dựa trên TSS cũng có một tính năng bảo mật thú vị, cho phép xoay vòng khóa riêng mà không thay đổi khóa chung và địa chỉ blockchain tương ứng. Xoay khóa riêng, còn được gọi là chia sẻ bí mật chủ động, là một giao thức MPC khác lấy các chia sẻ bí mật làm đầu vào và xuất ra một tập hợp chia sẻ bí mật mới. Các chia sẻ bí mật cũ có thể bị xóa và những chia sẻ bí mật mới có thể được sử dụng theo cách tương tự.
Cấu trúc như vậy bổ sung thêm khía cạnh thời gian cho bảo mật, có nghĩa là kẻ tấn công phải có mặt ở nhiều địa điểm cùng lúc để tấn công ví ngưỡng. Việc kết hợp các chia sẻ bí mật trước khi xoay và sau khi xoay sẽ không mang lại cho kẻ tấn công thêm sức mạnh nếu họ muốn giả mạo chữ ký.
Nhược điểm của loại ví này là việc thiếu cụm từ hạt giống khiến nó không tương thích với các hệ thống ví khóa đơn. Vì vậy, điều quan trọng là phải xem xét bên nào sẽ nắm giữ cổ phần bí mật.
Có một vài kiến trúc có thể:
Gia công TSS: người dùng sẽ cho phép máy chủ “n” thay mặt họ thực hiện tính toán. Gia công một cách hiệu quả việc tạo, quản lý và ký khóa cho các nhà cung cấp dịch vụ không phải là chủ sở hữu tài sản nhưng cung cấp lớp bảo mật để đổi lấy một số ưu đãi.
Sử dụng nhiều thiết bị: Người dùng sẽ chạy TSS giữa các thiết bị mà họ sở hữu. Ví dụ: một bên sẽ là một số thiết bị IoT, một bên khác sẽ là người dùng di động, một bên khác sẽ là máy tính xách tay của họ, v.v.
Kết hợp: TSS sẽ hoạt động sao cho 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 thiết bị do người dùng sở hữu.
Phương pháp đầu tiên giảm tải tính toán TSS nặng nề từ phía máy khách người dùng. Mặt khác, các nhà cung cấp dịch vụ có thể thông đồng (chúng tôi cho rằng có đủ người trong số họ không bị tấn công cùng lúc, nhưng trên thực tế thì có thể) và đánh cắp tài sản của người dùng.
Phương pháp thứ hai cung cấp cho người dùng toàn quyền kiểm soát nhưng khiến việc thực hiện giao dịch trở nên cồng kềnh vì bạn cần nhiều thiết bị để trực tuyến và tham gia tính toán TSS.
Tùy chọn thứ ba được coi là tốt nhất vì nó cung cấp cho người dùng một cách dễ dàng và nhanh chóng để thực hiện giao dịch nhưng không ảnh hưởng đến việc thực hiện các 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 những năm qua, các nhà nghiên cứu đã tìm ra nhiều cách sử dụng chữ ký số và một số cách sử dụng đó không hề tầm thường một cách đáng ngạc nhiên. Như đã đề cập, TSS là một mật mã nguyên thủy có thể tăng cường tính bảo mật đáng kể. Trong bối cảnh của blockchain, chúng ta có thể nói rằng nhiều chức năng có thể được thay thế bằng mật mã dựa trên TSS. Các ứng dụng phi tập trung, giải pháp mở rộng quy mô lớp 2, hoán đổi nguyên tử, trộn, kế thừa, v.v. có thể được xây dựng dựa trên khung TSS. Điều này cuối cùng sẽ cho phép các hoạt động hợp đồng thông minh trên chuỗi tốn kém và rủi ro được thay thế bằng các lựa chọn thay thế rẻ hơn và đáng tin cậy hơn.
Để đưa ra một số ví dụ cụ thể: Multi-Hop Locks sử dụng chữ ký của hai bên một cách thông minh và có thể được sử dụng thay thế cho mạng Lightning Bitcoin với mạng kênh thanh toán riêng tư và an toàn hơn. ShareLock có lẽ là giải pháp trộn trên chuỗi rẻ nhất cho Ethereum, dựa trên việc xác minh chữ ký ngưỡng duy nhất.
Rủi ro
Trong vài năm qua, việc triển khai TSS đã tăng lên đáng kể. Tuy nhiên, là một công nghệ tương đối mới nên nó vẫn còn một số hạn chế và lo ngại. So với mật mã khóa công khai cổ điển, các giao thức TSS có thể rất phức tạp và vẫn chưa được “thử nghiệm thực tế”. Thông thường, TSS yêu cầu các giả định mật mã bổ sung, yếu hơn so với chữ ký số đơn giản. Do đó, các vectơ tấn công mật mã không tồn tại trong các thiết lập truyền thống hiện đang được phát hiện (xem phần trình bày này từ Hội nghị Breaking Bitcoin 2019). Các kỹ sư bảo mật và nhà mật mã ứng dụng có thể hỗ trợ triển khai TSS một cách an toàn trong hệ thống của bạn.
Về mặt tích cực, việc triển khai hiện tại và mới đang trở nên mạnh mẽ hơn nhờ sự gia tăng đóng góp về chất lượng, đánh giá ngang hàng, kiểm toán và cải tiến hiệu suất thuật toán.
Bớt tư tưởng
Trong bài viết này, chúng tôi đã giới thiệu những kiến thức cơ bản về sơ đồ chữ ký ngưỡng (TSS), đây là một sơ đồ mã hóa nguyên thủy hấp dẫn có khả năng thay đổi đáng kể cách chúng ta sử dụng chuỗi khối.
Vì 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 nên những ai quan tâm có thể tham khảo danh sách các bài viết gần đây sau đây. Ngoài ra, nếu bạn muốn thử nghiệm một số triển khai TSS, bạn có thể tìm mã cho ví Binance Chain hai bên tại đây hoặc dùng thử ví ZenGo, ví này sử dụng phương pháp kết hợp để cung cấp ví Binance Chain hai bên không giám sát.
Đọc thêm:
Ký ECDSA hai bên an toàn nhanh chóng
ECDSA đa bên an toàn nhanh chóng với các ứng dụng và tạo khóa phân tán thực tế để lưu ký tiền điện tử
ECDSA hai bên từ hệ thống bằng chứng băm và tức thời hiệu quả
ECDSA ngưỡng nhiều bên nhanh chóng với thiết lập nhanh chóng không cần tin cậy
Đảm bảo ECDSA ngưỡng hai bên từ các giả định ECDSA
Ngưỡng ECDSA từ các giả định của ECDSA: Trường hợp nhiều bên

