Điểm:1

Làm cách nào để đặt tham số (ví dụ: gen, ords và mvec) để khởi động trong HElib?

lá cờ bb

Tôi đang sử dụng thư viện mã hóa đồng cấu, HElib, để thực hiện các thử nghiệm. Tôi đã thử sử dụng bootstrapping với các tham số không có trong bảng được cung cấp cùng với HElib. Nhưng tôi không biết làm thế nào để chọn các tham số (ví dụ: gen, ords và mvec) để khởi động.

Dưới đây là một ví dụ trong HElib (ví dụ/BGV_binary_arithmetic.cpp)

  // Mô đun nguyên tố bản rõ.
  dài p = 2;
  // Đa thức cyclotomic - định nghĩa phi(m).
  m dài = 4095;
  // Nâng Hensel (mặc định = 1).
  dài r = 1;
  // Số bit của chuỗi mô-đun.
  bit dài = 500;
  // Số lượng cột của ma trận Key-Switching (thường là 2 hoặc 3).
  dài c = 2;
  // Hệ số hóa của m cần thiết cho bootstrapping.
  std::vector<long> mvec = {7, 5, 9, 13};
  // Tạo tập nhóm Zm*.
  std::vector<long> gens = {2341, 3277, 911};
  // Lệnh của các trình tạo trước đó.
  std::vector<long> lệnh = {6, 4, 6};

Câu hỏi của tôi: Trong thử nghiệm của tôi, tôi cần bản mã với số lượng vị trí chính xác (chẳng hạn như vị trí = 256, 1024, 4096). Vì vậy, tôi phải tìm đúng m, p, bit để tạo ra một bản mã như vậy với các khe này. Nhưng đối với những m, p, bit, tôi không biết làm thế nào để thiết lập mvec, gens, ords.

Đây là một ví dụ cụ thể:

    m dài = 12800;
    dài p = 127;
    dài r = 1;
    bit dài = 119;
    dài c = 2;
    vectơ<dài> mvec = {25, 512};
    vector<long> gens = {2, 128};
    vectơ<long> lệnh = {43, 4351};

Ném một ngoại lệ: kết thúc với ngoại lệ chưa được phát hiện của loại helib::LogicError: Trình tạo do người dùng cung cấp không hợp lệ

// Một số thông tin về bối cảnh này:
m = 12800, p = 127, phi(m) = 5120
  thứ tự(p) = 20
  định mứcBnd = 1,23107
  polyNormBnd = 1,23107
  yếu tố = [2 5]
  trình tạo 43 có thứ tự (== Z_m^*) là 128
  trình tạo 4351 có thứ tự (== Z_m^*) là 2
r = 1
nslots = 256
hwt = 0
ctxtPrimes = [6,7]
đặc biệtPrimes = [8]
số bit = 173

mức độ bảo mật = 98.4643

Cập nhật: Tôi chạy một ví dụ với các tham số được tìm thấy bởi HElib (linh tinh/psi/params.cpp), nhưng ném một ngoại lệ LogicError: tiếng ồn tỷ lệ rawModSwitch vượt quá giới hạn: 309684.692524.

Các thông số đã cho là: phim=7056, d=28, m=12789, m=(3^2)*7^2*{29}, m/phim(m)=1.81, C=74 D=2 E=2, mvec=" [49 261]" gens="[11224 7106]" ords="[42 6]"

Mã này được viết để thực hiện nhiều phép nhân trong khi kiểm tra nhiễu và thực hiện khởi động.

    m dài = 12789;
    dài p = 127;
    dài r = 1;
    bit dài = 119;
    dài c = 2;
    // Hệ số hóa của m cần thiết cho bootstrapping.
    vectơ<dài> mvec = {49, 261};
    // Tạo tập nhóm Zm*.
    vector<long> gens = {11224, 7106};
    // Lệnh của các trình tạo trước đó.
    vectơ<dài> lệnh = {42, 6};
    
    Bối cảnh ngữ cảnh = ContextBuilder<BGV>()
                                   .m(m)
                                   .p(p)
                                   .r(r)
                                   .gens(gens)
                                   .ords(ords)
                                   .bits(bit)
                                   .c(c)
                                   .bootstrappable (đúng)
                                   .mvec(mvec)
                                   .xây dựng();
    // Quản lý khóa
    SecKey secret_key(bối cảnh);
    secret_key.GenSecKey();
    addSome1DMatrices(secret_key);
    addFrbMatrices(secret_key);
    secret_key.genRecryptData();
    const PubKey& public_key = secret_key;
    const EncryptedArray& ea = context.getEA();

    // tạo một bản mã
    std::vector<long> ptxt(nslots);
    for (int i = 0; i < nslots; ++i) {
        ptxt[i] = 2;
    }
    Ctxt ctxt(public_key);
    ea.encrypt(ctxt, public_key, ptxt);

    // phép nhân và bootstrapping
    for (int i = 0; i < 10; i++) {
        nếu (ctxt.bitCapacity() <= 50)
        {
            cout << "Bắt đầu khởi động!" << kết thúc;
            public_key.thinReCrypt(ctxt);
        }
        ctxt.square();
    }

Sự ngoại lệ:

Bắt đầu khởi động!
libc++abi: kết thúc với ngoại lệ chưa được phát hiện của loại helib::LogicError: tiếng ồn tỷ lệ rawModSwitch vượt quá giới hạn: 309684.692524
kết thúc với ngoại lệ loại helib::LogicError: rawModSwitch scale tiếng ồn vượt quá giới hạn: 309684.692524
Hilder Vitor Lima Pereira avatar
lá cờ us
Tôi nghĩ rằng Helib có thể chọn trình tạo và đơn đặt hàng cho bạn nếu bạn không chuyển chúng vào ngữ cảnh.
kelalaka avatar
lá cờ in
[Tiêu chuẩn hóa mã hóa đồng hình](https://crypto.stackexchange.com/a/74939/18298)
Dylan avatar
lá cờ bb
@HilderVitorLimaPereira Xin chào, Hilder. Tôi đã cố gắng tạo ngữ cảnh mà không chuyển trình tạo và lệnh tới nó, nhưng không thành công do `LogicError: Cyclotomic polynomial mismatch`. Sau đó, tôi chạy ví dụ do HElib đưa ra mà không chuyển chúng đến ngữ cảnh, nó không hoạt động vì lý do tương tự. Vì vậy, có vẻ như HElib không hỗ trợ điều này.
Dylan avatar
lá cờ bb
@kelalaka Rất cám ơn sự chia sẻ của bạn!
Hilder Vitor Lima Pereira avatar
lá cờ us
Tôi đã sử dụng đoạn mã sau và nó đã hoạt động. Helib tự tìm thấy máy phát điện. Tuy nhiên, nó không sử dụng bootstrapping, vì vậy có lẽ đó là nhược điểm. Bạn có thể kiểm tra... `helib::Context context = helib::ContextBuilder<:bgv>().m(16384).p(257).r(1).bits(250).c(3).skHwt(0).build( );`
Dylan avatar
lá cờ bb
@HilderVitorLimaPereira, bạn nói đúng, tôi đã sử dụng đoạn mã trên và kiểm tra `gens` và `ords` được tạo bằng các hàm được cung cấp `context.getZMStar().ZmStarGen()` và `context.getZMStar().OrderOf() `. Tuy nhiên, tôi không thể chạy mã do `tiếng ồn tỷ lệ rawModSwitch vượt quá giới hạn` khi tôi sử dụng các thông số `m = 8471, p=127, bits=200, r=1, c=2, gens = {3744, 2366} , ords = {42, -2}, mvec = {43, 197}` (mức bảo mật khoảng `80`). Nhưng các thông số được cung cấp trong `benchmarks/bgv_fatboot.cpp` thì không sao, mặc dù mức độ bảo mật là `0`.

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