Tổng Vốn Hóa Thị Trường:$00
API
VI
Tối

Tìm kiếmSSI/Mag7/Meme/ETF/Coin/Chỉ số/Biểu đồ/Nghiên cứu
00:00 / 00:00
Xem
    Thị trường
    Chỉ số
    Thông Tin
    TokenBar®
    Phân tích
    Vĩ mô
    Danh sách theo dõi
Chia sẻ

Prio3: Tính toán riêng tư, mạnh mẽ và có khả năng mở rộng của số liệu thống kê tổng hợp và SNIP

Prof Bill Buchanan OBE
979Từ ngữ
02/07/2025

Prio3: Tính toán riêng tư, mạnh mẽ và có khả năng mở rộng các thống kê tổng hợp và SNIP

Các hàm tổng hợp phân tán có thể kiểm chứng (VDAFs)

Việc thu thập dữ liệu tổng hợp là một trong những ngành công nghiệp sinh lợi nhuận cao nhất trong lĩnh vực điện toán, nhưng làm thế nào chúng ta có thể thu thập dữ liệu một cách hiệu quả mà không vi phạm quyền riêng tư của người dùng? Chà, giao thức tổng hợp phân tán nhiều bên (DAP) là một câu trả lời và phương pháp PRIO3 là một trong những phương pháp tốt nhất hiện có.

Mặc dù bảo mật đã được áp dụng cho dữ liệu khi ở trạng thái nghỉ và trên không, nhưng chúng ta thường vẫn thực hiện các tính toán của mình trên dữ liệu văn bản thuần túy. Điều này mở ra nhiều vấn đề, đặc biệt là bộ xử lý có thể xác định PII (Thông tin nhận dạng cá nhân) và những thứ như khóa mã hóa bí mật. Một cách tiếp cận là sử dụng MPC (Tính toán nhiều bên), và nơi chúng ta có thể chia tính toán của mình thành các khối nhỏ hơn và cung cấp cho mỗi bên một phần tính toán. Một trong những ứng dụng tốt nhất của việc này là thu thập số liệu thống kê theo cách có ý thức về quyền riêng tư.

Ví dụ: một nhà sản xuất điện thoại di động có thể muốn xác định sự cân bằng giới tính cho chủ sở hữu điện thoại của họ, nhưng không thực sự tiết lộ bất kỳ người cụ thể nào. Đối với điều này, mỗi thiết bị khách tạo một SNIP (bằng chứng không tương tác được chia sẻ bí mật) cho giới tính của họ. Trong PRIO3, đây là một bằng chứng không kiến thức nhanh chóng và hiệu quả. Sau đó, các máy chủ có thể nhận các SNIP này và kiểm tra tính hợp lệ của chúng. Sau khi kiểm tra, họ có thể cập nhật bộ tích lũy cục bộ của mình để tổng hợp số liệu thống kê hiện tại. Sau đó, khi chúng ta muốn tiết lộ sự cân bằng giới tính từ các thiết bị khách, họ có thể công bố tổng số tổng hợp của mình:

Nhìn chung, không máy chủ nào có thể xác định liệu khách hàng là nam hay nữ, vì bằng chứng không kiến thức về giới tính của họ được tạo ra; tuy nhiên, chúng ta vẫn có thể tính tổng. Với PRIO3, không máy chủ nào có thể xem dữ liệu văn bản thuần túy và dựa trên một bài báo kinh điển [here][1]:

Việc triển khai PRIO3 có thể được xem là một phần chung của Giao thức tổng hợp phân tán nhiều bên (DAP) để đo lường quyền riêng tư và hiện đang tiến triển để tiêu chuẩn hóa với IETF [here]:

Chúng tôi sẽ sử dụng PRIO3 để tạo một số chia sẻ cho các giá trị Boolean (đếm) và sau đó tổng hợp dữ liệu trở lại. Phân tích cốt lõi là một phép đếm cơ bản về việc một cái gì đó là True hay False và tập dữ liệu là {true, false, true, true} và sẽ đếm số lượng giá trị true [here]:

package main

import (
"fmt"
"crypto/rand"
"os"
"io"
"strconv"
"github.com/cloudflare/circl/vdaf/prio3/count"


)

func fromReader[T any](r io.Reader) (z T) {

switch zz := any(&z).(type) {
case *count.Nonce:
_, _ = r.Read(zz[:])
case *count.VerifyKey:
_, _ = r.Read(zz[:])

}

return
}

var Context = []byte("Test")

func main() {
NumShares := uint8(2)


input := []bool{true,false,true, true}


argCount := len(os.Args[1:])

if argCount > 0 {
a,_ := strconv.Atoi(os.Args[1])
NumShares=uint8(a)
}


c, _ := count.New(NumShares, Context)

params := c.Params()
shares := params.Shares()

aggShares := make([]count.AggShare, shares)
for i := range aggShares {
aggShares[i] = c.AggregateInit()
}



for _, mi := range input {
nonce := fromReader[count.Nonce](rand.Reader)
verifyKey := fromReader[count.VerifyKey](rand.Reader)

randb := make([]byte, params.RandSize())
_, _ = io.ReadFull(rand.Reader, randb)


var pubShare count.PublicShare
var inputShares []count.InputShare
pubShare, inputShares, _ = c.Shard(mi, &nonce , randb)


var prepStates []*count.PrepState
var outboundPrepShares []count.PrepShare
for i := range shares {
state, share, _ := c.PrepInit(&verifyKey, &nonce, i, pubShare, inputShares[i])


prepStates = append(prepStates, state)
outboundPrepShares = append(outboundPrepShares, *share)
}

var prepMsg *count.PrepMessage
prepMsg, _ = c.PrepSharesToPrep(outboundPrepShares)

var outShare *count.OutShare
for i := range shares {
outShare,_ = c.PrepNext(prepStates[i], prepMsg)
c.AggregateUpdate(&aggShares[i], outShare)

}


}

numMeas := uint(len(input))
aggResult, _ := c.Unshard(aggShares, numMeas)


fmt.Printf("Inputs: %v\n\n", input)

fmt.Printf("Number of inputs: %d\n\n", numMeas)
fmt.Printf("Number of shares: %d\n\n", NumShares)
fmt.Printf("Aggregated Count %d\n\n", *aggResult)


for i := range shares {
fmt.Printf("Share %v\n", aggShares[i])

}
}

Và một mẫu chạy [here]:

Inputs: [true false true true]

Number of inputs: 4

Number of shares: 4

Aggregated Count 3

Share {[[7227276485192055052]]}
Share {[[673113590378828220]]}
Share {[[14679250781088487564]]}
Share {[[14313847295054699691]]}

Một ví dụ về phép tính tổng ở đây:

PRIO3 for Verifiable Distributed Aggregation Functions for Summation with Go
The collection of aggregated data is one of the most profitable industries in computing, but how can we efficiently…asecuritysite.com

Và cho một biểu đồ:

PRIO3 for Verifiable Distributed Aggregation Functions for Histograms with Go
The collection of aggregated data is one of the most profitable industries in computing, but how can we efficiently…asecuritysite.com

Tài liệu tham khảo

[1] Corrigan-Gibbs, H., & Boneh, D. (2017). Prio: Private, robust, and scalable computation of aggregate statistics. In 14th USENIX symposium on networked systems design and implementation (NSDI 17) (pp. 259–282).

10s Hiểu rõ thị trường crypto
Điều khoảnChính Sách Bảo Mật của chúng tôiSách trắngXác minh chính thứcCookieBlog
sha512-gmb+mMXJiXiv+eWvJ2SAkPYdcx2jn05V/UFSemmQN07Xzi5pn0QhnS09TkRj2IZm/UnUmYV4tRTVwvHiHwY2BQ==
sha512-kYWj302xPe4RCV/dCeCy7bQu1jhBWhkeFeDJid4V8+5qSzhayXq80dsq8c+0s7YFQKiUUIWvHNzduvFJAPANWA==