informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Sumber Belajar:
Enkripsi Sepenuhnya Homomorfik I: Teori dan Landasan (Guru Yu Yu dari Universitas Shanghai Jiao Tong)
Enkripsi Homomorfik Sepenuhnya II: Teori dan Konstruksi Enkripsi Homomorfik Sepenuhnya (Guru Xiang Xie)
Saat ini, skema enkripsi homomorfik penuh generasi kedua (seperti BGV dan BFV) dan generasi ketiga semuanya didasarkan pada LWE. Sekarang skema homomorfik penuh tingkat lanjut juga didasarkan pada LWE, jadi artikel ini merangkum pengetahuan dasar LWE.
Pertama pertimbangkan, kami ingin mengenkripsi nomor bahasa inggrisS, sekarang menggunakan serangkaian ai a_iASayaKanan bahasa inggrisSEnkripsi dan dapatkan ais a_isASayaS, sebenarnya, hal ini dapat diselesaikan dengan menyelesaikan GCD pembagi persekutuan terbesar bahasa inggrisS .Namun, jika suara acak ditambahkan aku e_iBahasa Inggris:Saya,mendapatkan ais + ei a_adalah+e_iASayaS+Bahasa Inggris:Saya, maka akan sulit untuk diselesaikan bahasa inggrisS nilai. Proses ini adalah pemahaman sederhana saya tentang LWE. Kesalahan yang disebut adalah kebisingan.
Proses perhitungan enkripsi homomorfik penuh dibagi menjadi tiga langkah: pembuatan kunci KeyGen, enkripsi Enc, perhitungan homomorfik Eval, dan dekripsi Des. ,
Pertama buat persamaan di atas, Bahasa Indonesia: s ⋅ A + e = s A + e scdot A + e = sA+eS⋅A+Bahasa Inggris:=SA+Bahasa Inggris:, lalu dapatkan kunci publik pk ( - Sebuah - Sebuah−ADan dari A + e sA+eSA+Bahasa Inggris:penyambungan), dan kunci pribadi sk ( bahasa inggrisS dan 1 penyambungan). Oleh karena itu diperoleh hasil perkalian antara pk dan sk adalah derau acak e (mendekati 0).
Kunci publik pk yang digunakan untuk enkripsi, r adalah vektor acak yang hanya berisi 0 atau 1, dan m adalah informasi yang akan dienkripsi (dimasukkan ke dalam bit terendah dari vektor).
Setelah menghitung inner product dari private key sk yang digunakan untuk dekripsi dan ct, carilah mod 2 untuk mendapatkan hasil dekripsi.
Bukti kebenarannya:
Kalikan sk dan pk untuk mendapatkan 2e (kondisi yang dipenuhi oleh KeyGen), lalu lakukan perkalian dalam dengan r untuk mendapatkan noise genap kecil. Hasil akhirnya adalah m+ noise genap kecil, sehingga noise dapat dihilangkan dengan mod 2. Dapatkan hasil dekripsi m. Inilah sebabnya mengapa derau yang dibuat adalah 2e, bukan e. Pemahaman saya adalah bahwa dengan membuat derau acak bernomor genap, akan lebih mudah menggunakan mod 2 untuk menghilangkan derau selama dekripsi.
Bukti keamanan:
Ketika pk adalah pseudo-acak dan r memiliki entropi yang cukup tinggi (yaitu, keacakannya kuat?), baik pk maupun pk dikali r adalah pseudo-acak. Setelah menjumlahkan natural dan vektor dengan m, hasil enkripsinya juga pseudo-random.
Berikut uraian rumusan guru Xiang Xie:
Rumus enkripsi: ciphertext c = kunci publik pk ✖️ random r + plaintext m
Rumus dekripsi: teks biasa m = <teks sandi sk, kunci pribadi sk> mod q mod 2
Atas dasar ini, mod 2 dapat digunakan untuk mendekripsi nilai teks biasa m. Selama kebisingannya cukup kecil, keakuratannya bisa terjamin.
Ada yang perlu dibedakan di sini: yang di atas PK = ( A , b = As ′ + 2 e ) PK = ( A , b = As' + 2e )PBahasa Inggris: Bahasa Inggris: K=(A,B=AS′+2Bahasa Inggris:)adalah solusi BGV, dan BFV adalah PK = ( A , b = As ′ + e ) PK = ( A , b = As' + e )PBahasa Inggris: Bahasa Inggris: K=(A,B=AS′+Bahasa Inggris:), bedanya BGV mengkodekan informasi dalam bit rendah, sedangkan BFV mengkodekan pesan dalam bit tinggi (akan dijelaskan saat mempelajari BFV).
Perhatikan bahwa penjumlahan atau perkalian homomorfik akan menghasilkan akumulasi noise yang signifikan, dan perkalian memiliki tren pertumbuhan kuadrat.
Selanjutnya mari kita bahas cara mendekripsi hasil perkalian homomorfik. Anda dapat melihat rumus berikut: Perkalian dua teks tersandi setara dengan melakukan perkalian tensor dari teks tersandi dan kunci privat, lalu melakukan perkalian dalam. Jadi jelas bahwa ciphertext dan kunci pribadinya berukuran dua kali lipat. Contoh adalah bukti kesetaraan.
Jadi pertanyaannya adalah, bagaimana cara mengembalikan ukuran ciphertext dan ukuran kunci privat setelah perkalian homomorfik? Ini adalah masalah yang dipecahkan oleh Peralihan Kunci.
Berikut penuturan guru Xiang Xie:
Tujuannya adalah mengembalikan ukuran ciphertext dan private key ke ukuran linier.
Sekarang cari perkalian ciphertext c1 dan c2:
Proses di atas didasarkan pada konsep dekomposisi bit:
Berikut penuturan guru Xiang Xie:
Tujuan dari Key Switching: mengkonversi kunci privat s ~ tilde sS~turun c ~ tilde cC~ Konversikan ke kunci pribadi bahasa inggrisSturun ccC,Dan c ~ tilde cC~Dan ccCSemuanya dienkripsi dengan teks biasa yang sama.
Konsep inti disini adalah Key Switching Key (KSK) yang artinya menggunakan kunci privat bahasa inggrisSuntuk mengenkripsi s ~ tilde sS~。
Melalui proses Key Switching, kunci privat dapat diturunkan s ⊗ s kadang kala sS⊗Smenjadi linier bahasa inggrisS, sedangkan ciphertext berubah dari c ~ tilde cC~menjadi linier ccC .Dan itu terlihat dari baris rumus terakhir setelah Key Switching ⟨ c , s ⟩ langle c, srangle⟨C,S⟩dan yang asli ⟨ c ~ , s ⊗ s ⟩ langle tilde c, kadang-kadang srangle⟨C~,S⊗S⟩Ada perbedaan kebisingan di antara keduanya 2 c ~ T e ~ 2tilde c^Ttilde e2C~TBahasa Inggris:~ , bagian ini bisa sangat besar! Jadi masih belum ada cara untuk mengimplementasikan Key Switching di sini.
Matriks Gadget G diperkenalkan di sini:
Oleh karena itu, proses Pergantian Kunci menjadi sebagai berikut:
Pada titik ini, kesalahan tambahannya sangat kecil.
Singkatnya, melalui Key Switching, kunci pribadi asli s ~ = s ⊗ s tilde s=s kadang sS~=S⊗Sturun c ~ = c ⊗ c tilde c=co kali cC~=C⊗C, diubah menjadi kunci pribadi bahasa inggrisSturun ccC, perhatikan kunci setelah Pergantian Kunci s, cs, dan cS,CItu bukan nilai aslinya (periksa ulang).
Untuk BGV, derau penjumlahan meningkat secara linier, dan derau perkalian meningkat secara kuadrat. Meskipun Peralihan Tombol dapat mendukung perkalian (membatasi sk menjadi sangat besar), derau tersebut sebenarnya merupakan derau yang sangat kecil yang ditambahkan ke derau perkalian asli secara keseluruhan juga sangat besar. Oleh karena itu, kebisingan ini perlu dikurangi lebih lanjut.
Pada titik ini, penghitungan perkalian dan penjumlahan homomorfik dengan kedalaman kecil telah diterapkan melalui LWE. Pergantian kunci menggunakan kunci baru untuk setiap lapisan, namun seiring dengan semakin dalamnya kedalaman penghitungan, perluasan kebisingan bersifat eksplosif, sehingga belum diratakan .FHE (dapat menghitung FHE pada kedalaman tertentu).
Sekarang kami berharap dapat mengimplementasikan FHE yang dapat menghitung kedalaman tertentu tanpa menggunakan bootstrapping, yang memerlukan konversi modulo.
Saya kurang begitu paham dengan proses di tengahnya. Singkatnya, ini adalah mengubah ciphertext c dari domain modulo q ke domain modulo p (p<
Berikut ini contoh spesifiknya:
Jika Pengurangan Modulus tidak dilakukan, kebisingan akan tumbuh dalam tren eksponensial ganda seiring dengan semakin dalamnya kedalaman, dan kesalahan dekripsi akan terjadi setelah level >= 3.
Jika Pengurangan Modulus dilakukan pada setiap tingkat, kebisingan juga akan dipertahankan dalam kisaran nilai absolut, dengan mengorbankan pengurangan modulus secara terus menerus.
Jadi jika Anda ingin mengimplementasikan FHE yang diratakan, Anda dapat mengatur modulusnya Bd B^dBD, maka Anda dapat menghitung kedalamannya DDDsirkuit (dimana BBB adalah noise batas atas ciphertext yang disegarkan).Dihitung DDDSetelah kedalaman, modulus harus dikurangi menjadi BBB , untuk memastikan tidak ada kesalahan dalam dekripsi saat ini. BGV adalah FHE yang diratakan.