2010-04-04 58 views
5

Có thể tính trung bình của ba số nguyên được mã hóa không? Không hạn chế phương pháp mã hóa. Điểm này chỉ là để ẩn ba số và tìm trung bình.tính trung bình của ba số được mã hóa

+2

tại sao không chỉ lưu trữ trung bình cùng với số được mã hóa? Nếu bạn có thể nhận được trung bình từ các số 'được mã hóa', bạn chưa mã hóa chúng tốt như chúng vẫn liên quan đến toán học. – Cam

+0

Trong câu trả lời của tôi, tôi đã giả định rằng bạn muốn mức trung bình được mã hóa là kết quả, chứ không phải mức trung bình không được mã hóa. Như đã nói ở trên, việc có thể tính toán mức trung bình không được mã hóa sẽ làm rò rỉ thông tin, đó sẽ là một tài sản rất tồi tệ đối với một hệ thống mật mã. –

Trả lời

12

Những gì bạn có vẻ đang tìm kiếm được gọi là Homomorphic Encryption: một chương trình mã hóa cho phép bạn thực hiện các hoạt động trên dữ liệu được mã hóa, với kết quả được mã hóa là kết quả.

Sơ đồ như vậy sẽ cho phép bạn cung cấp dữ liệu được mã hóa cho bên thứ 3, sau đó có thể tính toán trên đó cho bạn mà không biết chúng đang tính toán gì.

Trong trường hợp của bạn, bạn cần hai thao tác: bổ sung và chia. Cho đến gần đây, các lược đồ mã hóa đồng cấu thường chỉ hỗ trợ 1 hoạt động. Nhưng vào tháng 9 năm 2009, IMB announced the first fully homomorphic cryptosystem.Các nghiên cứu khác published another system ngay sau đó.

Những hệ thống mã hóa này có thể có khả năng làm những gì bạn muốn, nhưng đó là tất cả các nghiên cứu khoa học máy tính tiên tiến.

+1

Rất thú vị, cảm ơn. –

+0

Điều này sẽ hiệu quả, nếu anh ta không nhớ rằng kết quả vẫn được mã hóa. Nếu anh ta muốn kết quả được giải mã, anh ta cũng có thể giải mã đầu vào ... –

+0

Tôi sẽ sử dụng phương pháp gì nếu tôi chỉ muốn "thêm" các con số? Không phân chia. Vậy mã hóa homomophic 1-hoạt động là gì tốt nhất cho việc thêm số được mã hóa? – heinob

4

Giải mã các con số, sau đó tính toán mức trung bình của chúng.

+1

Tôi không nghĩ đó là điểm của câu hỏi. Tôi khá chắc chắn rằng OP muốn tính trung bình mà không tiết lộ các số cá nhân (ngay cả đối với tính toán trung bình của CPU). –

+1

Nó có thể không phải là * điểm * nhưng, nghiêm túc, làm thế nào khác nó có thể được thực hiện một cách hợp lý? –

+0

Đó chính xác là quan điểm của tôi. –

1

Với phương pháp mã hóa lý tưởng: Số

Với hầu hết các phương pháp mã hóa thực tế: Số

Với một số ngớ ngẩn đơn giản để lùi lại phương pháp obfuscation thiết kế đặc biệt để cho phép trung bình: Đúng vậy.

Gọi phương thức "mã hóa" sau thực sự sẽ sử dụng sai cụm từ.

Nếu bạn có thể tính trung bình số được mã hóa mà không giải mã chúng, điều này sẽ giải mã số gốc dễ dàng hơn rất nhiều, vì vậy tôi sẽ rất ngạc nhiên nếu điều này làm việc với bất kỳ thuật toán mã hóa nghiêm trọng nào.

0

Nói chung ba số được mã hóa không nên duy trì cùng một thứ tự nếu được mã hóa, vì vậy tôi khá chắc chắn bạn phải giải mã chúng và tính toán avarage.

2

Tôi không thấy bất kỳ cách đơn giản nào để làm những gì bạn yêu cầu, ngoài việc giải mã các con số trước tiên.

Lấy mức trung bình (hoặc "trung bình số học") yêu cầu thêm các số. Bây giờ, nếu bạn muốn nhân các số, thì bạn có thể làm điều đó gọn gàng với mã hóa RSA. Nếu p là bản rõ, c là bản mã, và e là khóa mã hóa, sau đó trong RSA, c = p^e. Nếu bạn có 3 số nguyên riêng biệt, p1, p2, p3, và các sản phẩm là pp sau đó

pp^e = (p1 * p2 * p3)^e = p1^e * p2^e * p3^3 = c1 * c2 * c3 = cp 

Đó là, bạn có thể sử dụng phép nhân ba số nguyên bản rõ với nhau và sau đó mã hóa, hoặc bạn chỉ có thể nhân ba ciphertext cùng nhau, và nhận được cùng một câu trả lời. Điều này sẽ giúp bạn có được một số cách để "trung bình hình học", nơi bạn nhân tất cả các số với nhau, và sau đó lấy khối lập phương gốc (hoặc gốc thứ n cho số n). Thật không may, việc tính toán một khối lập phương trong mô đun số học là không tầm thường.

0

Nếu và chỉ khi, phương pháp mã hóa là một hàm toán học một-một, thì có thể làm như vậy trong khi các số được mã hóa.

Ví dụ, nếu phương pháp rất không an toàn của tôi về mã hóa là để nhân mỗi số 2, sau đó tôi sẽ làm như sau:

 
function encrypt($number){ 
    return $number*2; 
    } 

$a=encrypt(3); // a= 9 
$b=encrypt(5); // b= 15 
$c=encrypt(6); // c= 18 

$average = ($a+$b+$c)/6; // We divide by 6 because first we divide by 3 to get the average, then by 2 to do the decryption. The method will vary based on the mathematical function. 

duy nhất khả năng khác là để giải mã số đầu tiên.

Các vấn đề liên quan