Berbagi teknologi

[Dasar-dasar Kriptografi] Skema enkripsi sepenuhnya homomorfik berdasarkan LWE (Belajar dengan Kesalahan)

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.

Masukkan deskripsi gambar di sini

Proses perhitungan enkripsi homomorfik penuh dibagi menjadi tiga langkah: pembuatan kunci KeyGen, enkripsi Enc, perhitungan homomorfik Eval, dan dekripsi Des. ,

KeyGen:

Masukkan deskripsi gambar di sini
Pertama buat persamaan di atas, Bahasa Indonesia: s ⋅ A + e = s A + e scdot A + e = sA+eSA+Bahasa Inggris:=SA+Bahasa Inggris:, lalu dapatkan kunci publik pk ( - Sebuah - SebuahADan 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).

Enc:

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).
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

Desember:

Setelah menghitung inner product dari private key sk yang digunakan untuk dekripsi dan ct, carilah mod 2 untuk mendapatkan hasil dekripsi.

Masukkan deskripsi gambar di sini
Bukti kebenarannya:
Masukkan deskripsi gambar di sini
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:

Masukkan deskripsi gambar di sini
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.

Masukkan deskripsi gambar di sini

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

Masukkan deskripsi gambar di sini
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).

Eval (homomorfisme aditif dan homomorfisme perkalian):

Masukkan deskripsi gambar di sini
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.

Masukkan deskripsi gambar di sini

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:

Masukkan deskripsi gambar di sini

Pergantian Kunci

Tujuannya adalah mengembalikan ukuran ciphertext dan private key ke ukuran linier.
Masukkan deskripsi gambar di sini
Sekarang cari perkalian ciphertext c1 dan c2:

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

Proses di atas didasarkan pada konsep dekomposisi bit:

Masukkan deskripsi gambar di sini

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~

Masukkan deskripsi gambar di sini
Melalui proses Key Switching, kunci privat dapat diturunkan s ⊗ s kadang kala sSSmenjadi 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, srangleC,Sdan yang asli ⟨ c ~ , s ⊗ s ⟩ langle tilde c, kadang-kadang srangleC~,SSAda 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:
Masukkan deskripsi gambar di sini
Oleh karena itu, proses Pergantian Kunci menjadi sebagai berikut:

Masukkan deskripsi gambar di sini
Pada titik ini, kesalahan tambahannya sangat kecil.
Singkatnya, melalui Key Switching, kunci pribadi asli s ~ = s ⊗ s tilde s=s kadang sS~=SSturun c ~ = c ⊗ c tilde c=co kali cC~=CC, diubah menjadi kunci pribadi bahasa inggrisSturun ccC, perhatikan kunci setelah Pergantian Kunci s, cs, dan cS,CItu bukan nilai aslinya (periksa ulang).

Masukkan deskripsi gambar di sini
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.

Pengurangan Modulus

Masukkan deskripsi gambar di sini
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.
Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

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.
Masukkan deskripsi gambar di sini
Jika Pengurangan Modulus dilakukan pada setiap tingkat, kebisingan juga akan dipertahankan dalam kisaran nilai absolut, dengan mengorbankan pengurangan modulus secara terus menerus.

Masukkan deskripsi gambar di sini

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.

Masukkan deskripsi gambar di sini