Điểm:2

Xác minh một dự đoán về tương lai

lá cờ us
svm

Tôi đang cố gắng tìm một thuật toán để chứng minh rằng ai đó biết một số thông điệp bí mật ngắn (ví dụ như một số dự đoán về tương lai) trước khi tiết lộ nó.

Ví dụ:

Alice biết nhiệt độ bên ngoài sẽ là bao nhiêu vào ngày mai, cô ấy muốn chứng minh với Bob rằng cô ấy đã có nó mà không tiết lộ con số cho đến ngày mai. Mặt khác, Bob cần Alice để không thể giả mạo dự đoán của cô ấy sau khi thực tế xảy ra.

Tôi đã đưa ra một kế hoạch dự thảo như sau:

  1. Alice tạo ra Dài chuỗi ngẫu nhiên $r_s, r_p$.

  2. Alice gửi $hash(r_s . r_p . T)$, và $r_p$ gửi Bob.

    Đây $T$ là nhiệt độ dự đoán (một số có hai chữ số).

  3. Ngày hôm sau Alice gửi $r_s$, và $T$ cho Bob, để bây giờ anh ấy có thể xác minh rằng Alice đã biết $T$ ở bước 2, chứng tỏ Alice đã dự đoán tương lai.

Có ổn không?, hoặc bạn có thể chỉ cho tôi một giải pháp tốt hơn không? Nếu nó ổn, những thuộc tính đặc biệt nào nên $hash$ chức năng có nếu có, ngoại trừ được bảo mật bằng mật mã?

Điểm:3
lá cờ es

Đề án của bạn hoạt động, nhưng không cần phải có $r_p$.

Nếu bạn loại bỏ $r_p$, thì điều quan trọng là phải đồng ý trước độ dài bit của hệ số gây mù của bạn $r_s$ sẽ là, do đó cam kết không thể uốn nắn được bằng cách quyết định loại bỏ hoặc thêm các bit vào phần đầu của $T$ trong khi thêm hoặc bớt bit vào cái mà sau này bạn cho là giá trị của hệ số mù của bạn $r_s$.

Alice sau đó gửi $hash(r_s \mathbin\| T)$ (ở đâu $\mathbin\|$ có nghĩa là nối), và sau đó tiết lộ $r_s$$T$. Chỉ cần sử dụng bất kỳ hàm băm bảo mật bằng mật mã nào có mức bảo mật ít nhất là 128 bit, chẳng hạn như SHA256. Sử dụng ít nhất 128 bit cho $r_s$ và đảm bảo rằng nó ngẫu nhiên thống nhất, để ngăn Bob khỏi các giá trị cưỡng bức của $r_s$ để khám phá dự đoán của bạn trước.

Ngoài ra, bạn có thể lo ngại về việc Bob có thể tạo ra các dẫn xuất từ ​​cam kết của Alice, điều này có thể xảy ra nếu hàm băm dễ bị tấn công kéo dài.

Kịch bản là: Alice cam kết dự đoán và thông báo cam kết, sau đó Bob ngay lập tức thông báo cam kết dựa trên cuộc tấn công kéo dài trong đó có điều gì đó được thêm vào dự đoán của Alice. Bob không thể mở cam kết của mình cho đến khi Alice mở cam kết của cô ấy bằng cách tiết lộ yếu tố mù quáng. Sự xuất hiện của một yếu tố mù trùng lặp sẽ đáng ngờ, nhưng chỉ khi ai đó chú ý.

Bạn có thể tránh cả mối đe dọa này và tránh phải đồng ý trước độ dài bit của hệ số làm mù bằng cách sử dụng một trong các phương pháp sau:

  1. Tính toán cam kết dưới dạng hash(hash(blinding factor) $\mathbin\|$ băm (dự đoán)).

  2. Như @kelalaka đã chỉ ra, hãy sử dụng HMAC, với yếu tố làm mù là chìa khóa. Do đó, cam kết = HMAC-SHA256(yếu tố mù quáng, dự đoán).

svm avatar
lá cờ us
svm
Vâng, tôi đã kiểm tra lại và bây giờ tôi thấy rằng r_p thực sự không cần thiết. Tôi sẽ đi với kế hoạch đó. Cảm ơn bạn!
Điểm:1
lá cờ in
  • Bật nên lưu ý rằng một phép nối đơn giản chỉ với $r_s$ sẽ không làm việc;

    Người đi làm có thể đánh lừa người xác minh. Điều này là do nối đơn giản. Ví dụ $H(\texttt{100110||11})$ là cam kết với dự đoán nhiệt độ là $3^\circ$ ( $\texttt{11}$ ở dạng nhị phân). Nếu nhiệt độ hóa ra $11^\circ$ thì người đi làm có thể tuyên bố rằng bí mật $r_s = \texttt{1001}$ và dự đoán là $\texttt{1011}$. Điều này hoạt động vì yêu cầu mới của họ cũng có thể được coi là hợp lệ; $H(\texttt{1001||1011})$

    Để giảm thiểu điều này; hoặc sử dụng

    • một dấu phân cách được xác định trước công khai như $\texttt{"<dấu phân cách>}"$

      $$H(\texttt{100110<dấu phân cách>11})$$

      hoặc

    • giải phóng kích thước của $r_s$ như một phần của cam kết.

    Có, sử dụng ít nhất 128-bit để ngay cả người khai thác Bitcoin cũng cần xung quanh $2^{34}$-năm để tìm giá trị cam kết có thể có miễn là hàm băm được sử dụng cung cấp ít nhất 128-bit khả năng chống ảnh trước. Sử dụng SHA-256 vì chúng tôi vẫn tin rằng SHA-256 có bảo mật hình ảnh trước khoảng 256-bit.

    Ngoài ra, tốt hơn là sử dụng $\operatorname{HMAC-SHA256}$ với $r_s$ làm chìa khóa hoặc sử dụng tốt hơn $\operatorname{KMAC}$ sau đó $\operatorname{SHA-3}$ đó là xây dựng dễ dàng hơn $\operatorname{HMAC}$, mặc dù HMAC vẫn là một con thú.

Lược đồ trong câu hỏi có thể hoạt động mà không có dấu phân cách hoặc tiết lộ kích thước

Điều này là do việc xuất bản của $r_p$ đó là viết tắt của dấu phân cách. Tuy nhiên, tốt hơn là sử dụng $\operatorname{HMAC,KMAC}$.

Nếu một người vẫn muốn sử dụng hàm băm mật mã và lo ngại về các cuộc tấn công mở rộng độ dài đối với các hàm băm, hãy sử dụng SHA-3, BLAKE2 hoặc SHA-512/256. Trên thực tế, không có gì phải lo sợ vì cuộc tấn công mở rộng độ dài sẽ thay đổi kết quả băm.

Thay vì sử dụng một hàm băm khác cho các nền tảng khác nhau, hãy sử dụng tách miền;

$$H(\texttt{fixedDomainSeprationTextForPlatfromA}||r_s||r_p||T)$$

Maarten Bodewes avatar
lá cờ in
Nhận xét không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được [chuyển sang trò chuyện](https://chat.stackexchange.com/rooms/133039/discussion-on-answer-by-kelalaka-verifying-a-prediction-of-the-future).

Đă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.