theblock101

    Zero-Knowledge Proof (ZKP) là gì? Tìm hiểu bằng chứng không kiến thức

    ByNghĩa Nguyễn24/06/2023
    Bạn nghe nhiều khái niệm Zero-Knowledge Proof (bằng chứng không kiến thức) nhưng chưa hiểu nó là gì. Trong bài viết dưới đây, Bigcoin sẽ giúp bạn hiểu hơn về công nghệ Zero-knowledge proof (ZKP) là gì, ưu điểm nhược điểm của công nghệ ZKP.

    1. Zero-Knowledge Proof (ZKP) là gì?

    1.1. Zero-Knowledge Proof (ZKP) là gì?

    Zero-Knowledge Proof (bằng chứng không kiến thức) là một phương pháp chứng minh tính hợp lệ của một tuyên bố mà không cần tiết lộ thông tin của tuyên bố đó. Đó là một hệ thống bằng chứng với người chứng minh, người xác minh và thách thức mang đến cho người dùng khả năng chia sẻ công khai bằng chứng về kiến thức hoặc quyền sở hữu mà không tiết lộ chi tiết về nó.

    1.2. Ví dụ minh họa

    Giả sử Alice muốn chứng minh với Bob rằng cô biết mật khẩu của một tài khoản mà không cần tiết lộ mật khẩu đó. Alice có thể sử dụng Zero-Knowledge Proof để thực hiện điều này. Một ví dụ đơn giản có thể minh họa là trò chơi cửa hàng với một đường hầm. Alice đứng ở một đầu của đường hầm hình vòng, và cô biết mật khẩu mở cửa ở giữa. Bob đứng ngoài và không thấy Alice trong hầm. Alice có thể đi vào hầm từ một trong hai đầu, mở cửa với mật khẩu và xuất hiện ở đầu kia. Nếu Alice làm điều này nhiều lần thành công, Bob có thể tin rằng Alice biết mật khẩu mà không cần Alice tiết lộ mật khẩu cho Bob.

    1.3. Cấu trúc của Zero-Knowledge Proof

    Zero-Knowledge Proof thường bao gồm 3 phần chính:

    1. Thiết lập: Người chứng minh và người xác minh thỏa thuận về một số tham số ban đầu cần thiết cho quá trình chứng minh.
    2. Chứng minh: Người chứng minh tạo ra một bằng chứng cho thấy họ biết giá trị bí mật mà không tiết lộ giá trị đó. Quá trình này có thể bao gồm nhiều bước, tùy thuộc vào loại Zero-Knowledge Proof được sử dụng (interactive hoặc non-interactive).
    3. Xác minh: Người xác minh sử dụng bằng chứng được cung cấp để kiểm tra tính chính xác của tuyên bố mà không cần biết giá trị bí mật.

    2. Nguồn gốc của Zero-Knowledge Proof

    2.1. Lý do Zero-Knowledge Proof ra đời

    Trước hết chúng ta sẽ tìm hiểu về Proof System. Trong thực tế chúng ta đã bắt gặp rất nhiều Proof System (hệ thống bằng chứng): Verifier (người kiểm tra) với nhiệm vụ là kiểm tra xem Prover (người chứng minh) có hiểu biết về một Proof (bằng chứng) hoặc thông tin, kiến thức nào đó không. Sau khi đã xác thực được việc này thì sẽ cho phép Prover được truy cập vào những tài nguyên của hệ thống với những quyền hạn khác nhau. Ví dụ như sau:

    • Khi đăng nhập vào website/app, người dùng cần cung cấp username/password để chứng minh là họ biết thông tin đăng nhập account đó (tuy nhiên không nhất thiết đảm bảo là người đó là chủ sở hữu)
    • Khi bạn ra cây ATM rút tiền cũng tương tự, bạn cần điền vào số tài khoản và mã PIN mới có thể thực hiện được thao tác trên tài khoản đó

    Trong những nghiên cứu trước đây người ta luôn giả sử rằng Prover là người xấu, luôn tìm cách đánh lừa người kiểm tra nhằm vượt qua hệ thống (ví dụ bằng cách hacking, SQLi, …). Thế nhưng ngược lại, Verifier là người xấu thì sao? Trong trường hợp đăng nhập hệ thống, về cơ bản người dùng sẽ đưa thông tin này lên server, server sẽ hash password và kiểm tra với hash đã lưu trong server, nếu trùng nhau thì OK. Thế nhưng có những nguy cơ tiềm ẩn trong quá trình xác thực như sau:

    • Trong quá trình gửi password lên, password bị lộ do môi trường truyền thông tin không an toàn
    • Không có gì đảm bảo là server sẽ thực hiện hash password rồi mới lưu (hoặc lưu luôn dưới dạng plain-text )
    • Không có gì đảm bảo là những dữ liệu đó sẽ được an toàn, không bị lộ một cách vô ý hoặc cố ý

    Với những tồn tại trên, việc cần có một giao thức kiểm tra mà phía Verifier không biết gì về những kiến thức mà phía Prover đang nắm giữ là cần thiết. Từ những bằng chứng mà người chứng minh đưa ra, người kiểm tra không có cách nào lần ra được kiến thức nguồn (do đó mới có tên gọi Zero Knowledge Proof (ZKP) - bằng chứng không kiến thức.

    2.2. Lịch sử ra đời Zero-Knowledge Proof

    Zero-Knowledge trong mật mã lần đầu xuất hiện trong bài báo năm 1985 "The knowledge complexity of interactive proof systems [GMR85]" của các nhà mật mã học Shafi Goldwasser, Silvio Micali và Charles Rackoff. Họ đưa ra một định nghĩa về Zero-Knowledge Proof mà ngày nay được sử dụng rộng rãi:

    "Một giao thức Zero-Knowledge Proof là một phương pháp mà bên thứ nhất prover (người chứng minh) có thể chứng minh cho bên thứ hai verifier (người xác minh) rằng một điều gì đó là đúng, mà không tiết lộ bất kỳ thông tin nào ngoài việc nhận biết rằng thông tin đó là đúng."

    Để có thể hoạt động được ZKP cần thoả mãn những tính chất sau:

    • Completeness (tính trọn vẹn): Nếu mệnh đề là đúng thì một người kiểm tra trung thực sẽ bị thuyết phục bởi một người chứng minh trung thực rằng mệnh đề đó là đúng
    • Soundness (tính đúng đắn): Nếu người chứng minh là không trung thực thì họ không thể thuyết phục được người kiểm tra rằng mệnh đề đúng bằng cách dối trá
    • Zero-Knowledge (tính không có thông tin): Nếu mệnh đề là đúng thì người kiểm tra chỉ biết là nó đúng và không thể biết được chính xác mệnh đề đó là gì.

    2.3. Các cột mốc đáng chú ý của Zero-Knowledge Proof

    Các cột mốc đáng chú ý của Zero-Knowledge Proof
    Các cột mốc đáng chú ý của Zero-Knowledge Proof

    1985: Zero-Knowledge trong mật mã lần đầu xuất hiện trong bài báo "The knowledge complexity of interactive proof systems [GMR85]" của các nhà mật mã học Shafi Goldwasser, Silvio Micali và Charles Rackoff.

    2011: zk-SNARK (Succinct Non-Interactive Arguments of Knowledge) được công khai lần đầu trên bài báo Bit+11 2013: Công nhận Zero-Knowledge Proofcó thể được sử dụng trong các ứng dụng thực tế trên bài báo Pinocchio PHGR13 2016: Groth16 thuật toán giảm độ phức tạp tính toán và trở thành tiêu chuẩn cho zk-SNARKs. 2017: Bulletproofs (BBBPWM17) được giới thiệu, không yêu cầu thiết lập đáng tin cậy ban đầu. 2018: zk-STARKs (BBHR18) được ra đời và phát triển bởi Eli-Ben Sasson, giáo sư tại Viện Công nghệ Technion-Israel. Hiện tại ông là chủ tịch của StarkWare. 2019: PlonK giới thiệu thuật toán Universal Zero-Knowledge Proof, giúp giảm thiểu sự cần thiết của thiết lập đáng tin cậy cho mỗi mạch điện.

    3. Ví dụ về Zero-Knowledge Proof trong thực tế

    Chúng ta cùng xem xét một vài ví dụ đơn giản để hiểu rõ hơn về ZKP trong thực tế:

    3.1. Hang của Alibaba

    Hang của Alibaba
    Hang của Alibaba

    Đây là một cái hang hình tròn với 1 cánh cửa ngăn đôi ở giữa hang. Prover (P) sẽ chứng minh cho Verifier (V) là mình biết mật khẩu mở cửa mà không cần nói cho (P) biết cụ thể mật khẩu là gì. Ta sẽ thực hiện việc này theo các bước sau:

    • (P) đi vào hang và chọn đi theo hướng A hoặc B tuỳ ý và đi đến chỗ cánh cửa.
    • (V) đi vào cửa hang và yêu cầu: "(P) hãy xuất hiện ở cửa B". Khi đó sẽ có 2 trường hợp
      • Nếu ban đầu (P) đi vào đường B thì (P) chỉ cần quay đầu trở lại
      • Nếu ban đầu (P) đi vào đường A thì cách duy nhất để (P) có thể xuất hiện ở đầu B là (P) phải biết mật khẩu cửa để đi từ đầu A sang đầu B
    • Giả sử là (P) xuất hiện ở đầu B thật, vậy ta sẽ có 50% xác xuất là (P) không biết mật khẩu cửa

    Vậy làm thế nào để có thể chắc chắn được (P) biết mật khẩu ? Đơn giản, hãy thực hiện việc kiểm tra này thật nhiều lần. Nếu lần 2 (P) vẫn đúng thì xác suất đúng sẽ là: 0.5 * 0.5 = 0.25, lần 3 sẽ là 0.5 * 0.5 * 0.5 = 0.125 và cứ tiếp tục như vậy. Sau 100 lần chẳng hạn thì xác suất ăn may của (P) sẽ là cực kì nhỏ và lúc này, ta hầu như có thể chắc chắn là (P) biết mật khẩu cửa thực sự.

    Hãy cùng kiểm tra lại 3 tính chất của ZKP:

    • Completeness (tính trọn vẹn): Nếu (P) biết mật khẩu cửa thì (V) sẽ bị thuyết phục (bằng cách kiểm tra nhiều lần).
    • Soundness (tính đúng đắn): Nếu (P) ăn may 1,2 lần thì bằng cách thử lại nhiều lần, ta đã loại bỏ được khả năng này.
    • Zero-Knowledge (tính không có thông tin): (V) không hề biết thực sự mật khẩu là gì.

    3.2. Người mù màu và hai quả bóng

    Người mù màu và hai quả bóng
    Người mù màu và hai quả bóng

    Những người bị bệnh mù màu khi được đưa ra 2 quả bóng có màu khác nhau thì với họ, họ cũng không thể phân biệt được. Vậy làm thế nào để một người bình thường (Prover) có thể chứng minh cho một người mù màu (Verifier) rằng họ biết là 2 quả bóng khác màu mà không lộ ra là quả bóng nào là quả nào và có màu gì ?

    Ta thực hiện như sau:

    • Người bị mù màu sẽ giấu 2 quả bóng sau lưng, sau đó đưa ra 1 quả cho người bình thường xem
    • Sau đó người bị mù màu sẽ giấu quả bóng vừa đưa ra về sau lưng, rồi đưa quả bóng còn lại (hoặc chính quả bóng vừa đưa ra) cho người bình thường xem và yêu cầu người bình thường trả lời là anh ta đã đánh tráo quả bóng hay không.
    • Lặp đi lặp lại việc này nhiều lần.

    Nếu người mù màu tráo bóng thì ta có thể nhận ra ngay bằng việc nhìn vào màu của chúng, nếu không thì có 50% xác suất là chúng ta đoán mò (bóng giống nhau nhưng chúng ta lại kêu là khác nhau). Tương tự như ví dụ trên, bằng cách lặp đi lặp lại nhiều lần, người bị mù màu có thể giảm xác suất này xuống và cuối cùng bị thuyết phục là người bình thường biết là 2 quả bóng khác nhau.

    Và tất nhiên, các tính chất của ZKP vẫn được đảm bảo.

    • Completeness (tính trọn vẹn): Người bình thường thuyết phục được người bị mù màu là hai quả bóng khác nhau.
    • Soundness (tính đúng đắn): Người bình thường không thể đoán mò.
    • Zero-Knowledge (tính không có thông tin): Người mù màu không biết quả bóng nào là quả nào và có màu gì.

    4. Interactive và Non-interactive Zero-knowledge Proof là gì?

    4.1. Interactive Zero-Knowledge Proof (IZKP)

    Interactive Zero-Knowledge Proof là một giao thức mà trong đó người chứng minh và người xác minh phải tương tác qua lại nhiều lần để hoàn thành quá trình chứng minh. Quá trình này yêu cầu nhiều vòng tương tác, mỗi vòng tương tác giúp người xác minh chắc chắn hơn về tính chính xác của bằng chứng mà người chứng minh cung cấp.

    4.2. Non-Interactive Zero-Knowledge Proof (NIZKP)

    Ngược lại, Non-Interactive Zero-Knowledge Proof không yêu cầu sự tương tác nhiều lần giữa người chứng minh và người xác minh. Người chứng minh chỉ cần tạo ra một bằng chứng duy nhất và gửi nó cho người xác minh. Người xác minh sau đó có thể tự mình kiểm tra bằng chứng mà không cần thêm bất kỳ sự tương tác nào với người chứng minh. Điều này đặc biệt hữu ích trong các hệ thống phi tập trung, nơi mà việc tương tác nhiều lần có thể không khả thi hoặc không hiệu quả.

    5. Ưu điểm và hạn chế của Zero-Knowledge Proof

    5.1. Ưu điểm

    • Tăng khả năng mở rộng cho Blockchain: Các giải pháp ZK Rollup, như StarkNET, Loopring và Zksync, sử dụng công nghệ ZKP để tăng thông lượng và khả năng mở rộng cho các lớp Blockchain Layer 1.
    • Bảo vệ quyền riêng tư và bảo mật: Công nghệ ZKP cho phép xác minh tính đúng đắn của dữ liệu mà không cần tiết lộ thông tin quan trọng. Ngoài ứng dụng trong các lớp 2, ZKP còn được sử dụng trong các ứng dụng về bảo mật và quyền riêng tư như Monero và Zcash.
    • Hiệu quả trong kiểm tra: Người xác minh có thể nhanh chóng và dễ dàng kiểm tra tính chính xác của bằng chứng mà không cần nhiều tài nguyên.
    • Ứng dụng rộng rãi: ZKP có thể được áp dụng trong nhiều lĩnh vực, từ tài chính, ngân hàng đến các hệ thống bỏ phiếu điện tử và blockchain.

    5.2. Hạn chế

    • Yêu cầu sức mạnh tính toán lớn: Các giao thức ZKP thường dựa trên phương trình toán học phức tạp, đòi hỏi sức mạnh tính toán cao để vận hành và tính toán. Điều này làm cho việc tham gia vào quá trình xác thực giao dịch trở nên khó khăn cho các máy tính thông thường.
    • Không thân thiện với nhà phát triển: Mặc dù ZKP được sử dụng cho công nghệ Layer 2 để cải thiện khả năng mở rộng cho Blockchain, nhưng hiện tại, các ứng dụng ZK Rollup chỉ hỗ trợ trong các khoản thanh toán đơn giản và giao dịch. Ngoài ra, ZK Rollup hiện tại không hỗ trợ khả năng tổng hợp và không cho phép tương tác giữa các ứng dụng ZK Rollup khác nhau trong cùng một Layer 2.
    • Giới hạn ứng dụng: Mặc dù ZKP có nhiều ứng dụng tiềm năng, nhưng không phải mọi vấn đề đều có thể áp dụng ZKP một cách hiệu quả.

    6. Ứng dụng của công nghệ Zero-Knowledge Proof trong thị trường crypto

    • Bảo mật giao dịch

    Zero-Knowledge Proof được sử dụng để bảo mật các giao dịch trên blockchain bằng cách cho phép xác minh tính hợp lệ của giao dịch mà không cần tiết lộ chi tiết giao dịch. Ví dụ, trong mạng Zcash, ZKP được sử dụng để bảo mật giao dịch và đảm bảo tính riêng tư.

    • Bảo mật danh tính

    Zero-Knowledge Proof có thể được sử dụng để xác minh danh tính mà không cần tiết lộ thông tin cá nhân. Điều này có thể áp dụng trong các hệ thống nhận diện và xác thực người dùng, giúp bảo vệ quyền riêng tư và ngăn chặn gian lận.

    • Quản lý quyền truy cập

    ZKP có thể được sử dụng để quản lý quyền truy cập vào các hệ thống và tài nguyên mà không cần tiết lộ thông tin nhạy cảm. Điều này có thể áp dụng trong các hệ thống kiểm soát truy cập dựa trên blockchain, giúp tăng cường bảo mật và đảm bảo tính riêng tư.

    • Kiểm toán và báo cáo

    ZKP có thể được sử dụng trong các hệ thống kiểm toán và báo cáo để chứng minh tính hợp lệ của các báo cáo mà không cần tiết lộ dữ liệu nhạy cảm. Điều này có thể áp dụng trong các hệ thống tài chính và kế toán, giúp đảm bảo tính minh bạch và bảo mật thông tin.

    • Hợp đồng thông minh

    Zero-Knowledge Proof có thể được tích hợp vào các hợp đồng thông minh để tăng cường bảo mật và tính riêng tư. Điều này có thể giúp các hợp đồng thông minh thực hiện các giao dịch phức tạp mà không cần tiết lộ thông tin chi tiết của các bên liên quan.

    7. Tổng kết

    Zero knowledge proof (Bằng chứng không kiến thức- ZKP) là một phương pháp chứng minh tính hợp lệ của một tuyên bố mà không cần tiết lộ thông tin của tuyên bố đó. Sau gần 40 năm phát triển, Zero-knowledge proof ngày càng có nhiều ứng dụng thực tiễn hơn. Hi vọng qua bài viết trên bạn đọc đã hiểu rõ Zero knowledge proof là gì, ưu nhược điểm của phương pháp chứng minh này.

    Đọc thêm:

    Disclaimer: Bài viết mang mục đích cung cấp thông tin, không phải lời khuyên tài chính. Tham gia nhóm chat Bigcoinchat để cập nhật thông tin mới nhất về thị trường.

    Thảo luận thêm tại

    Facebook:https://www.facebook.com/groups/bigcoincommunity

    Telegram: https://t.me/Bigcoinnews

    Twitter: https://twitter.com/BigcoinVN 

    Nghĩa Nguyễn

    Nghĩa Nguyễn

    Researcher and writer at Bigcoin Vietnam

    5 / 5 (1Bình chọn)

    Bài viết liên quan