Điểm:0

Kiểm soát ràng buộc lỗi khi sử dụng HElib CKKS

lá cờ bb

Tôi đang sử dụng HElib CKKS để thực hiện các thử nghiệm và tự hỏi liệu có thể kiểm soát lỗi bị ràng buộc trong từng thao tác cơ bản như phép nhân, mã hóa và xoay hay không.

Tôi có câu hỏi này là vì tôi nhận thấy rằng có vẻ như sự gia tăng lỗi liên kết trong HElib nhanh hơn so với việc triển khai HEAAN.

Dưới đây là ví dụ về kiểm tra lỗi bị ràng buộc sau mỗi thao tác vuông từ HElib:

  // c *= c;
  c.dung lượng=328.497 c.errorBound=1.28242e-06
  c.dung lượng=289.748 c.errorBound=2.69423e-06
  c.dung lượng=252.063 c.errorBound=5.71405e-06
  c.dung lượng=213.502 c.errorBound=1.1591e-05
  c.dung lượng=176.579 c.errorBound=2.37053e-05
  c.dung lượng=139.634 c.errorBound=4.79147e-05
  khoảng cách=1.84256e-05

Chúng ta có thể thấy rằng Error Bound tăng khoảng 2 lần (nghĩa là chúng ta mất đi một chút độ chính xác).

Đối với một ứng dụng của phép nhân ma trận (bao gồm phép quay, mã hóa và phép nhân, ở đây, không giải thích chi tiết), việc triển khai trong HEAAN hoạt động tốt, nhưng giới hạn lỗi vượt quá 200 và độ sâu không đủ khi tôi viết lại ứng dụng bằng HElib.

Nhìn chung, cùng một ứng dụng (tức là có cùng số lượng phép nhân và vị trí) trong HElib yêu cầu nhiều bit hơn trong HEAAN và cuối cùng dẫn đến mức bảo mật nhỏ hơn 80 bit

Câu hỏi

Trong CKKS của HElib, nếu chúng ta cần kiểm soát chính xác (và làm thế nào) ràng buộc lỗi khi thực hiện phép nhân (hoặc phép quay)?

Thông số

Đây là một ví dụ thông số tôi đã sử dụng:

tham số(/*m=*/16 * 1024, /*bits=*/235, /*precision=*/20, /*c=*/2);

Lỗi bị ràng buộc sau thao tác một ô vuông (nhân):

ct_Ck[0].dung lượng=256.968 ct_Ck[0].isCorrect=1 ct_Ck[0].errorBound=8.6898e-08
ct_Ck[0].dung lượng=207,74 ct_Ck[0].isCorrect=1 ct_Ck[0].errorBound=8.6348e-06

Dữ liệu văn bản gốc giống như:

-0.23801321 0.30014116 -0.0636206 0.21583742

CẬP NHẬT

Tôi đã tìm thấy một chức năng trong HElib để giảm giới hạn lỗi nhưng tôi không biết lý do về cách thức hoạt động của nó

// kết quả trước khi gọi bumpNoiseBound()
ct_F. capacity=38.4047 ct_F.isCorrect=1 ct_F.errorBound=201.848

ct_F.bumpNoiseBound(0,5);
ct_F. capacity=38.4047 ct_F.isCorrect=1 ct_F.errorBound=100.884

ct_F.bumpNoiseBound(0,00001);
ct_F. capacity=38.4047 ct_F.isCorrect=1 ct_F.errorBound=0.00202069

Kết quả giải mã:

[1.04830407 -3.209778495 -2.074653964 -1.684939538 -1.000400425 -4.124713608 -0.3628963567 -3.134082967 -3.801171699 -1.00385792 -1.472975371 -1.121783172 -5.484577652 -1.89848471 -1.517289034 -0.228743587 -1.226775781 3.901777677 1.575880583 -2.008799017 -1.980024549 3.465674733 -1.105679235 -3.594262482 0.1332798533 -7.012550198 0.5623979679 -4.254105028 -0.9447986134 -0.3755929384 -0.906013134 0.5607877395 -2.309902189 -4.112943726 -4.208302789 -2.742109602 -3.230622867 0.6365211006 -1.909193898 -1.761926501 0.07531637181 0.5945984313 -2.727958762 -2.45710736 -2.225926303 0.2915942006 -0.5207882104 -1.719778064 -3.581110672 0.9300763124 1.395581211 0.7434900004 -3.202471826 1.109593845 -5.68517439 0.2502367768 0.6176019573 -1.632018488 -0.3558288489 -1.87408586 3.322116753 -3.055094277 -1.437400739 -3.61812068]

Kết quả bản rõ:

[1.048074533 -3.209868922 -2.075044009 -1.683690789 -0.9997621728 -4.124967495 -0.3629476429 -3.1339527 -3.801350955 -1.003947321 -1.473256614 -1.121510668 -5.484447105 -1.89821005 -1.517648893 -0.2295971341 -1.227429856 3.90224666 1.576020144 -2.008567349 -1.98010648 3.464794098 -1.105909147 -3.595045121 0.1335162434 -7.012703056 0.5623665673 -4.2541547 -0.9454690736 -0.3750930498 -0.9075913974 0.5602374826 -2.30977449 -4.11252574 -4.208385862 -2.742450262 -3.230891732 0.6371578519 -1.909217106 -1.76218525 0.07590385029 0.5945647743 -2.727895366 -2.457126412 -2.225143547 0.2917448084 -0.5201044894 -1.719980727 -3.580159571 0.9294232572 1.396138592 0.7433848735 -3.202827843 1.108926304 -5.68442001 0.2495510754 0.6176213132 -1.630955343 -0.35625627 -1.874107776 3.321633929 -3.054599105 -1.438421851 -3.618478743]

Kết quả sau khi sử dụng bumpNoiseBound () gần bằng với kết quả bản rõ. Vì vậy, chức năng này giúp chúng tôi lấy lại độ chính xác chính xác?

Dylan avatar
lá cờ bb
Nhân tiện, chúng tôi không biết `rescale` hoạt động như thế nào trong HElib. Như đã nói bởi shaih, [HElib tự đảm nhận việc thay đổi tỷ lệ CKKS nên bạn không cần phải lo lắng về điều đó. Tuy nhiên, nó chưa hỗ trợ khởi động CKKS.](https://github.com/homenc/HElib/issues/341#issuecomment-581880535). Nhưng ở HEAAN, chúng tôi tự làm, như:`reScaleByAndEqual(ctxt, cBits); reScaleByAndEqual(ctxt, ctxt.logp);` . Vậy đây có phải là lý do mà các tham số tương tự trong HElib hỗ trợ tính toán ít hơn không?
Hilder Vitor Lima Pereira avatar
lá cờ us
Việc chuyển đổi khóa được thực hiện như thế nào trong quá trình triển khai HEAAN đó? Nếu nó sử dụng thuật toán chuyển đổi khóa khác với HElib, thì chi phí và mức tăng tiếng ồn của phép nhân đồng hình sẽ khác.
Dylan avatar
lá cờ bb
@HilderVitorLimaPereira Có thể nó sử dụng một phương pháp khác. Như đã giải thích trong bài báo gốc [HEAAN](https://eprint.iacr.org/2016/421.pdf), `P3`: Để giải quyết mô đun bản mã, chúng tôi đề xuất một kỹ thuật mới - được gọi là thay đổi tỷ lệ - điều khiển thông báo của bản mã.Về mặt kỹ thuật, nó có vẻ tương tự như phương pháp chuyển đổi mô-đun được đề xuất bởi Brakerski và Vaikuntanatan, nhưng nó đóng một vai trò hoàn toàn khác trong xây dựng của chúng tôi.
Dylan avatar
lá cờ bb
Ngoài ra, HEAAN hỗ trợ khởi động bằng cách sử dụng CRT + NTT, được giải thích trong [github](https://github.com/snucrypto/HEAAN/issues/7#issuecomment-419614271)
Hilder Vitor Lima Pereira avatar
lá cờ us
Nhưng tôi đang hỏi về chuyển đổi phím chứ không phải chuyển đổi chế độ... Có một số sự cân bằng giữa tiếng ồn và thời gian chạy khi chúng tôi chuyển đổi phím. Ví dụ: nếu bạn phân tách bản mã bằng cách sử dụng cơ sở nhỏ hơn, thì bạn sẽ nhận được nhiều thành phần hơn và chuyển đổi phím trở nên chậm hơn, nhưng tiếng ồn phát ra ít hơn. Nếu Helib và HEAAN sử dụng phân tách khác nhau, thì mức tăng tiếng ồn sẽ khác.

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