Điểm:5

ZKP: Chứng minh >18 khi giấu tuổi

lá cờ cn
deb

Tôi còn khá mới với mật mã, nhưng tôi đã lập trình được một thời gian. Đây là một câu chuyện đặt ra vấn đề mà tôi đang cố gắng giải quyết:

Alice có hộ chiếu kỹ thuật số được ký bằng khóa riêng của chính phủ. Mỗi tài sản được ký tên riêng và vẫn có thể xác minh được rằng, chẳng hạn như tên của cô ấy là "Alice", mà không nói rằng họ của cô ấy là "Smith".

Từ đây, biết rằng cô chứng minh được ngày sinh của mình là 05/04/1975, liệu cô ấy có thể chứng minh mình trên 18 tuổi mà không tiết lộ ngày sinh cũng như không nhờ bên thứ ba giúp đỡ?

Tôi đoán là cô ấy không thể, nhưng tôi hy vọng bạn sẽ làm tôi ngạc nhiên!

Eugene Styer avatar
lá cờ dz
Liên quan: https://crypto.stackexchange.com/questions/19265/finding-out-the-greater-number-under-zero-knowledge-conditions
lá cờ ar
Cũng liên quan: https://crypto.stackexchange.com/questions/58349/zero-knowledge-proof-using-hash-chains-is-there-a-flaw-in-the-algorithm
Vadym Fedyukovych avatar
lá cờ in
Nếu bạn không phiền khi xác minh và theo dõi Cinderella https://antoine.delignat-lavaud.fr/doc/oakland16.pdf, bạn có thể ẩn toàn bộ nội dung của chứng chỉ trong khi chứng minh các tuyên bố về nó.
Điểm:7
lá cờ ar

AFAICT, không, cô ấy không thể làm điều đó bằng cách sử dụng chỉ cần thông tin trên hộ chiếu của cô ấy, như bạn mô tả,* và coi thuật toán chữ ký số như một hộp đen.

Tuy nhiên, nếu chính phủ đã thấy trước trường hợp sử dụng này và chỉ thêm một chút thông tin vào hộ chiếu của cô ấy, thì sẽ có một cách để làm điều đó bằng cách sử dụng ví dụ: phương pháp chuỗi băm được mô tả trong chủ đề hỏi đáp trước đó (dựa trên một bài báo năm 2013 của Angel & Walfish).

Cụ thể, điều Alice cần là:

  1. Hàm băm mật mã chống ảnh trước $H$ tiêu chuẩn hóa bởi chính phủ. Cái gì đó như SHA-256 sẽ ổn thôi.

  2. Mã thông báo bí mật do chính phủ phát hành $s$, không thể phân biệt về mặt tính toán với đầu ra của $H$. (Ví dụ, $s$ có thể được tạo bằng cách chọn một chuỗi ngẫu nhiên $r$ với ít nhất nhiều bit entropy bằng độ dài đầu ra của $H$ và để cho $s = H(r)$.)

  3. Một tuyên bố có chữ ký của chính phủ, có dạng:

    Alice** sinh vào hoặc trước ngày 2050-01-01 (hash = $H^a(s)$).

    ở đâu $a$ là tuổi của Alice tính theo ngày vào ngày 2050-01-01 và $H^a$ biểu thị $H$ lặp đi lặp lại $a$ lần, tức là $H^0(s) = s$$H^{n+1}(s) = H(H^n(s))$

Bây giờ, để chứng minh với Bob rằng cô ấy hiện tại (24/11/2021) 18 tuổi trở lên, Alice cần đưa ra tuyên bố đã ký ở trên, cùng với $h = H^b(s)$, ở đâu $b$ là tuổi của Alice tính theo ngày cách đây đúng 18 năm (tức là vào ngày 24-11-2003).

Bob sau đó có thể tính toán $H^c(h)$, ở đâu $c = 16840$ là số ngày giữa 2003-11-24 và 2050-01-01, và so sánh nó với hàm băm trong tuyên bố đã ký của Alice. Nếu yêu cầu của Alice hợp lệ, chúng phải khớp nhau, vì $a = b + c$, và như vậy $H^c(h) = H^c(H^b(s)) = H^a(s)$.

(Tất nhiên, Bob cũng nên xác minh rằng tuyên bố của Alice thực sự được ký chính xác bằng khóa ký của chính phủ và rằng nó thực sự thuộc về cô ấy chứ không phải của chị gái cô ấy chẳng hạn.)


Lưu ý rằng, để thuận tiện cho việc tính toán và giảm thiểu các cuộc tấn công theo thời gian, Alice có thể tính toán trước và lưu trữ $H^{b'}(s)$ cho các giá trị khác nhau của $b'$ tương ứng với tuổi của cô ấy tính theo ngày vào đầu mỗi năm cho đến nay. Bằng cách đó, cô ấy sẽ chỉ cần thực hiện tối đa 365 đánh giá băm ngay tại chỗ để tính toán $H^b(s)$ bất cứ gì $b$.

Để giảm nhu cầu tính toán của Bob, chính phủ có thể mong muốn ban hành nhiều báo cáo có chữ ký của Alice ở dạng trên, nhưng với các ngày khác nhau và các giá trị tương ứng của $a$, để Alice có thể gửi cho Bob một tuyên bố đã ký cho, chẳng hạn, 2004-01-01 thay vì 2050-01-01. Mặt khác, một vài nghìn đánh giá SHA-256 ngày nay thực sự không nhiều và Bob không cần phải lo lắng về các cuộc tấn công kênh phụ.

Tuy nhiên, việc đưa ra nhiều câu lệnh đã ký cũng giúp duy trì thuộc tính không kiến ​​thức khi có di chuột qua. Ví dụ: hãy tưởng tượng rằng chính phủ ban đầu chọn 2030-01-01 làm ngày cố định cho các tuyên bố đã ký, nhưng sau đó vài năm trước đã quyết định dời ngày đó sang năm 2050 khi họ bắt đầu cấp hộ chiếu có giá trị đến năm 2030 trở đi. Điều này có nghĩa là, ở mức tối thiểu, Bob có thể biết được từ ngày trong tuyên bố của Alice liệu hộ chiếu của cô ấy được cấp trước hay sau khi chuyển đổi, điều này có thể tương quan với các thông tin khác bao gồm cả tuổi của cô ấy. Bằng cách đưa ra các tuyên bố có chữ ký của Alice cho cả hai 2030-01-01 và 2050-01-01 (và có thể là các ngày áp dụng khác), có thể tránh được sự rò rỉ này, vì Alice chỉ có thể chọn tuyên bố có ngày phù hợp sớm hơn cho yêu cầu của Bob (nhưng rõ ràng là không sớm hơn ngày cô ấy muốn chứng minh rằng cô ấy được sinh ra vào hoặc trước đó).


ps. Như đã lưu ý trong câu trả lời của tôi cho câu hỏi được liên kết ở trên, giao thức tương tự cũng có thể được sử dụng để cho phép Alice chứng minh tuổi chính xác của mình. Để làm được điều này, Alice không chỉ cần biết $s = H(r)$ mà còn là mã thông báo ngẫu nhiên ban đầu $r$, nên được chính phủ lựa chọn sao cho không phải một đầu ra hợp lệ của $H$.

Sau đó, nếu Alice muốn chứng minh với Bob rằng cô ấy sinh vào ngày 1975-05-04 và không sớm hơn, cô ấy có thể tiết lộ ngày đó cùng với $r$ và ít nhất một tuyên bố có chữ ký của mẫu trên. Sau đó, Bob có thể tính tuổi được yêu cầu của Alice theo ngày $a$ vào ngày được chỉ định trong tuyên bố, tính toán $H^a(s) = H^{a+1}(r)$ và so sánh nó với hàm băm trong tuyên bố đã ký.

Tất nhiên, với biến thể này của giao thức, Bob cũng cần xác minh định dạng của $s$ hoặc $r$ mã thông báo được gửi bởi Alice (nghĩa là đó là đầu ra hợp lệ của $H$ đối với yêu cầu bồi thường "ra đời vào hoặc trước" và không phải một đầu ra hợp lệ của $H$ đối với yêu cầu "sinh vào ngày này").

Tất cả những gì đã nói, trong kịch bản của bạn, một chữ ký riêng của chính phủ cho "Alice sinh ngày 1975-05-04" cũng sẽ phục vụ mục đích này.


Chú thích:

*) Mô tả của bạn rằng "tài sản [e]ach được ký riêng" thực sự có một chút vấn đề nếu tính theo mệnh giá, vì việc chính phủ ký cho một tài sản riêng lẻ, chẳng hạn như "tên: Alice" có nghĩa là bất kỳ ai đã nhìn thấy chữ ký của Alice tên có thể tạo một bản sao của chữ ký và sử dụng nó để tuyên bố rằng tên của họ là Mà còn Alice. Ngoài ra, ví dụ: nếu Alice Andrews và Bob Barker có hộ chiếu với họ và tên được ký riêng như vậy, họ có thể kết hợp chúng để tạo hộ chiếu giả cho "Alice Barker" hoặc "Bob Andrews".

Một giải pháp tốt hơn một chút là có một trong các thuộc tính trên hộ chiếu là một ID duy nhất và bao gồm ID đó trong tất cả các thuộc tính đã ký. Do đó, ví dụ: một người nào đó đã xem một tuyên bố có chữ ký có dạng "ID: #123456789; first name: Alice" giờ đây có thể xác minh rằng Alice, mang hộ chiếu có ID #123456789, thực sự có tên là "Alice", nhưng họ không thể sử dụng chữ ký để yêu cầu bất cứ ai của người khác tên đầu tiên là Alice.

Tất nhiên, kế hoạch này vẫn có những thiếu sót của riêng nó: ví dụ, Alice có thể muốn chứng minh với Bob rằng tên của cô ấy là Alice không có Bob có thể chứng minh sự thật đó cho bất kỳ ai khác. Thực hiện như vậy xác thực từ chối lược đồ dường như nằm ngoài phạm vi của câu trả lời này, mặc dù bạn có thể muốn xem ví dụ: cái này sớm hơn.

**) Ở đây tôi đang sử dụng "Alice" làm tên thay thế cho ID duy nhất do chính phủ cấp của Alice, như được mô tả trong phần chú thích trước đó ở trên.

fgrieu avatar
lá cờ ng
Vấn đề cơ bản: nếu một số gizmo có thể kiểm tra Alice bây giờ là ¥18 tuổi bằng cách tương tác với hộ chiếu của cô ấy và hộ chiếu không có ký ức về những nỗ lực như vậy trước đó, thì không có gì ngăn cản gizmo đó tìm ra ngày sinh của Alice bằng cách phân đôi. Ngay cả khi gizmo không làm điều đó, miễn là khái niệm "bây giờ" của nó không được đảm bảo an toàn (ví dụ: có một cách để đặt đồng hồ theo ý muốn), nó có thể bị lạm dụng để tìm ngày sinh của Alice. Chúng tôi có thể muốn hộ chiếu tự kiểm tra dấu thời gian để biết độ mới bằng cách sử dụng thử thách/phản hồi và xác nhận Alice hiện không phải là trẻ vị thành niên (18 không được điều chỉnh, ít nhất là chính xác).
lá cờ ar
@fgrieu: Đúng. Tôi đã ngầm giả định rằng (ít nhất một số) thông tin trên hộ chiếu của Alice là ví dụ: được mã hóa bằng một khóa được lưu trữ bên ngoài hộ chiếu, để cô ấy có thể chọn những phần sẽ tiết lộ. Mặt khác, các phần khác của câu hỏi (như ký tên riêng vào các trường hộ chiếu) đối với tôi không có ý nghĩa gì.
Maarten Bodewes avatar
lá cờ in
Trong IEC 18013-5 (Giấy phép lái xe di động / mDL), các phần tử dữ liệu được kết hợp ngẫu nhiên và sau đó được băm. Các giá trị băm ngẫu nhiên sau đó được kết hợp và ký trong một MSO (rõ ràng là không có ngẫu nhiên). Bằng cách đó, bạn có thể xác minh MSO và phần tử dữ liệu. Bạn phải cấp quyền trong ứng dụng để trả lời bất kỳ yêu cầu dữ liệu nào. Bạn có thể quan tâm rằng các trường hợp sử dụng > 18 và > 21 đã được triển khai theo tiêu chuẩn đó (tiêu chuẩn này cho phép hai yêu cầu, điều đó có nghĩa là bạn có thể xác định rằng ai đó ở độ tuổi từ 18 đến 21).
deb avatar
lá cờ cn
deb
Đây là một câu trả lời tuyệt vời, cảm ơn bạn rất nhiều vì đã dành thời gian.
deb avatar
lá cờ cn
deb
Chẳng phải giải pháp này giả định rằng Alice đang nói thật về tuổi của cô ấy ngay từ đầu khi tạo ra `Hb(s)` sao? Tôi cảm thấy như tôi đã không hiểu điều này một cách chính xác.
lá cờ ar
@deb: Quan sát chính là Alice không thể tạo $H^b(s)$ cho $b$ âm (ít nhất là không phải không có thông tin bổ sung), vì điều đó sẽ yêu cầu họ tìm tiền giả $H^{-1}( s)$ cho hàm băm. Giả sử rằng $H$ là một [hàm băm mật mã](https://en.wikipedia.org/wiki/Cryptographic_hash_function) an toàn, thì điều đó là không thể, vì khả năng chống tạo ảnh trước là một trong những giả định bảo mật cơ bản của họ.Nếu Alice tìm ra cách tính toán các tiền ảnh cho SHA-256 chẳng hạn, thì họ đã phá vỡ hàm băm và có thể trở nên nổi tiếng ngay lập tức, bất kể họ ở độ tuổi nào.
lá cờ ar
@deb: Đối với câu hỏi trước đó của bạn về xác thực có thể từ chối trong ngữ cảnh này, đó thực sự là một câu hỏi rất hay và tôi không có câu trả lời cho nó. Tôi đã nghĩ nó * nên * có thể xảy ra bằng cách nào đó khi tôi viết câu trả lời, nhưng bây giờ khi tôi nghĩ về nó nhiều hơn, tôi không biết làm thế nào. Nhưng có lẽ có một mẹo ZKP thông minh nào đó mà tôi đang thiếu. Tôi có thể hỏi một câu hỏi riêng về nó, nếu bạn không.
deb avatar
lá cờ cn
deb
@IlmariKaronen: Ồ, tôi nghĩ bây giờ tôi đã hiểu câu trả lời của bạn hơn một chút (tôi đã đọc nó nhiều lần hơn tôi thừa nhận, nhưng tôi không chắc liệu mình đã hiểu đúng mọi thứ chưa!). Tôi không quen với mức độ mật mã đó, vì vậy tôi sẽ nghĩ về nó nhiều hơn khi tôi có một tờ giấy để viết... Nếu chúng ta đang nói về câu hỏi như tôi nhớ, tôi đã xóa bình luận bởi vì tôi có thể đã tìm thấy câu trả lời. Có lẽ tôi sẽ tạo một câu hỏi và trả lời trên trang web, tôi sẽ chia sẻ liên kết ở đây.
deb avatar
lá cờ cn
deb
Đây là câu hỏi tôi đã thực hiện.So với câu trả lời bạn đưa ra ở đây, giải pháp khá đơn giản; chúng ta đang nói về cùng một vấn đề? https://crypto.stackexchange.com/q/97803/88017
deb avatar
lá cờ cn
deb
Được rồi: Một tháng sau, tôi ở đây, cuối cùng cũng hiểu câu trả lời của bạn. Tôi chỉ có thể đánh giá cao sự thông minh của câu trả lời đó, cảm ơn bạn rất nhiều.
Điểm:2
lá cờ es

Sử dụng đường cong elip: Hộ chiếu có thể chứa dấu thời gian unix dưới dạng Cam kết Pedersen ở dạng $C = bG + tH$, ở đâu $b$ là một yếu tố mù vô hướng, $t$ là ngày sinh của người mang hộ chiếu dưới dạng dấu thời gian unix (giây kể từ kỷ nguyên) và $G$$H$ là các điểm cơ sở nổi tiếng được chọn sao cho nhật ký rời rạc của chúng đối với nhau là không xác định và không thể biết được.

$C$ được ký bởi chính phủ. Hộ chiếu làm cho dấu thời gian và yếu tố gây mù được người mang hộ chiếu biết đến.

Để chứng minh người mang hộ chiếu lớn hơn 18 tuổi, trước tiên chúng tôi tính toán $s$ vì dấu thời gian mới nhất có thể, người mang hộ chiếu có thể được sinh ra cho đến hiện tại là 18 tuổi trở lên.

Người mang hộ chiếu cần chứng minh rằng $s>=t$. Chúng ta có thể làm điều đó bằng cách chứng minh rằng $C' = sH - C == (s-t)H - bG$ là cam kết về số dương. Do tính chất số học mô-đun của đại số EC, điều này có nghĩa là chúng ta cần đảm bảo rằng cam kết là một con số tương đối nhỏ chứ không phải một con số khổng lồ có thể xảy ra từ $s-t$ là "tiêu cực".

Để đạt được điều này, chúng ta cần một thứ gọi là bằng chứng phạm vi.

Bằng chứng phạm vi sẽ chứng minh rằng $C'$ có thể được xây dựng bằng một chuỗi 43 bit (sẽ cho phép sơ đồ này hoạt động trong 200 năm tới). Mỗi 'bit' sẽ bằng 0 hoặc lũy thừa 2.

Đầu tiên, chúng tôi sẽ tuyên bố 43 cam kết của Pedersen $C_i$ cho các giá trị của $i$ bao gồm từ 0 đến 42, trong đó mỗi cam kết sẽ có hệ số che khuất riêng $b_i$ và mỗi cam kết sẽ có giá trị bằng 0 hoặc $2^i$.

Bây giờ, chúng ta cần chứng minh rằng $C'$ là một cam kết với cùng một số như $\sum_{i=0}^{42} C_i$. Điều này có thể được thực hiện bằng cách tính khóa công khai $C'' = C' - \sum_{i=0}^{42} C_i$. Kể từ khi số lượng cam kết với $C'$ sẽ bằng tổng các số cam kết của 43 cam kết, kết quả sẽ có dạng $C'' == b'G$ ở đâu $b' == -b - \sum_{i=0}^{42} b_i$. Do đó cung cấp một chữ ký trên $C''$ sử dụng khóa riêng $b'$ sẽ chứng minh rằng không thể tồn tại một số khác không $H$ thành phần của $C''$, bởi vì một chữ ký sử dụng điểm cơ sở $G$ là không thể trừ khi nhật ký rời rạc của $H$ w.r.t. $G$ đã biết (và $H$ đã được chọn cụ thể sao cho nó không thể biết được).

Cuối cùng, chúng ta cần chứng minh rằng mỗi thành phần $C_i$ là những cam kết về 0 hoặc những cam kết về $2^i$. Chúng tôi làm điều này bằng cách cung cấp chữ ký vòng cho mỗi cam kết cho hai khóa công khai $(C_i - 0H, C_i - 2^iH)$. Chữ ký vòng sẽ chỉ khả thi nếu một trong hai khả năng đó tạo ra điểm EC không có $H$ thành phần, do đó chứng minh rằng $C_i$ là cam kết bằng 0 hoặc $2^i$.

Tóm lại, chúng tôi đã chứng minh rằng $s>=t$ bởi vì chúng tôi đã chứng minh rằng $sH -C$ là cam kết về số dương. Chúng tôi đã chứng minh đó là một số dương bằng cách chứng minh rằng nó có thể được xây dựng thành một chuỗi 43 bit, trong đó mỗi bit bằng 0 hoặc có lũy thừa xác định là 2.

deb avatar
lá cờ cn
deb
Tôi e rằng tôi không biết đủ về đường cong elip/"Cam kết của Pedersen" để hiểu đầy đủ câu trả lời của bạn, nhưng tôi chắc chắn đánh giá cao nỗ lực này. một yếu tố ràng buộc vô hướng là gì?
knaccc avatar
lá cờ es
@deb Đó chỉ là một con số ngẫu nhiên che khuất giá trị của Cam kết Pedersen. Nếu cam kết chỉ là $tH$, bạn có thể brute force rất nhiều giá trị của dấu thời gian để khám phá ngày sinh của chủ sở hữu. Yếu tố mù làm cho cam kết trông hoàn toàn ngẫu nhiên và ngăn không cho nó bị ép buộc. Những gì tôi đã mô tả là cách số tiền được ẩn trong các loại tiền điện tử như Monero, trong đó bằng chứng phạm vi được sử dụng để đảm bảo ai đó không cố gắng tạo số tiền trên chuỗi khối với giá trị âm.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.