Pertimbangkan skenario ketika perlu untuk memastikan keamanan brankas bank. Itu dianggap benar-benar ditembus tanpa kunci, yang diberikan kepada Anda pada hari pertama kerja. Tujuan Anda adalah menyimpan kunci dengan aman.
Misalkan Anda memutuskan untuk menyimpan kunci itu sepanjang waktu, memberikan akses ke toko sesuai kebutuhan. Tetapi Anda akan segera menyadari bahwa solusi seperti itu dalam praktiknya tidak berskala secara normal, karena setiap kali Anda memerlukan kehadiran fisik Anda untuk membuka repositori. Bagaimana dengan liburan yang dijanjikan? Selain itu, pertanyaannya bahkan lebih menakutkan: bagaimana jika Anda kehilangan satu kunci?
Dengan memikirkan liburan, Anda memutuskan untuk membuat salinan kunci dan mempercayakannya kepada karyawan lain. Namun, Anda mengerti bahwa ini juga tidak ideal. Dengan menggandakan jumlah kunci, Anda juga menggandakan kemungkinan pencurian kunci.
Putus asa, Anda menghancurkan duplikat dan memutuskan untuk membagi kunci asli menjadi dua. Sekarang, Anda berpikir, dua orang tepercaya dengan pecahan kunci harus hadir secara fisik untuk mengambil kunci dan membuka toko. Ini berarti bahwa pencuri perlu mencuri dua pecahan, yang dua kali lebih sulit daripada mencuri satu kunci. Namun, Anda akan segera menyadari bahwa skema ini tidak jauh lebih baik daripada hanya satu kunci, karena jika seseorang kehilangan setengah kunci, kunci penuh tidak dapat dipulihkan.
Masalahnya dapat diselesaikan dengan serangkaian kunci dan kunci tambahan, tetapi dengan pendekatan ini Anda akan dengan cepat membutuhkan
banyak kunci dan kunci. Anda memutuskan bahwa dalam skema ideal Anda perlu membagi kunci sehingga keamanan tidak sepenuhnya bergantung pada satu orang. Anda juga menyimpulkan bahwa harus ada ambang tertentu untuk jumlah fragmen, sehingga jika satu fragmen hilang (atau jika seseorang pergi berlibur), seluruh kunci tetap berfungsi.
Cara berbagi rahasia
Jenis skema manajemen kunci ini dipikirkan oleh Adi Shamir pada 1979 ketika dia menerbitkan karyanya
How to Share a Secret . Artikel ini menjelaskan secara singkat apa yang disebut
(k,n) skema ambang batas untuk secara efektif membagi nilai rahasia (misalnya, kunci kriptografi) menjadi
n bagian. Lalu, kapan dan hanya kapan paling tidak
k dari
n bagian dirakit, Anda dapat dengan mudah mengembalikan rahasia
S .
Dari sudut pandang keamanan, properti penting dari skema ini adalah bahwa penyerang tidak boleh tahu apa-apa jika dia tidak memiliki setidaknya
k bagian. Bahkan ketersediaan
kâ1 bagian tidak boleh memberikan informasi apa pun. Kami menyebutnya
keamanan semantik properti ini.
Interpolasi polinomial
Skema ambang batas shamir
(k,n) dibangun di sekitar konsep
interpolasi polinomial . Jika Anda tidak terbiasa dengan konsep ini, sebenarnya cukup sederhana. Secara umum, jika Anda pernah menggambar poin pada grafik, dan kemudian menghubungkannya dengan garis atau kurva, maka Anda sudah menggunakannya!
Jumlah polinomial tingkat 2 yang tidak terbatas dapat ditarik melalui dua poin.Untuk memilih satu-satunya, Anda memerlukan poin ketiga. Ilustrasi: WikipediaPertimbangkan polinomial dengan derajat satu,
f(x)=x+2 . Jika Anda ingin memplot fungsi ini pada grafik, berapa banyak poin yang Anda butuhkan? Kita tahu bahwa ini adalah fungsi linier yang membentuk garis dan oleh karena itu setidaknya diperlukan dua titik. Selanjutnya, pertimbangkan fungsi polinomial dengan derajat dua,
f(x)=x2+2x+1 . Ini adalah fungsi kuadrat, jadi setidaknya tiga titik diperlukan untuk membuat grafik. Bagaimana dengan polinomial dengan gelar tiga? Setidaknya empat poin. Dan seterusnya dan seterusnya.
Hal yang sangat keren tentang properti ini adalah, mengingat tingkat fungsi polinomial, dan setidaknya
gelar+1 poin, kita dapat memperoleh poin tambahan untuk fungsi polinomial ini. Ekstrapolasi titik-titik tambahan ini disebut
interpolasi polinomial .
Membuat rahasia
Anda mungkin sudah menyadari bahwa skema pintar Shamir ikut berperan di sini. Misalkan rahasia kita
S Apakah itu
42 . Kita bisa berbalik
S ke titik pada grafik
(0,42) dan datang dengan fungsi polinom dengan derajat
kâ1 yang memenuhi titik ini. Ingat itu
k akan menjadi ambang batas kami untuk fragmen yang diperlukan, jadi jika kami menetapkan ambang batas menjadi tiga fragmen, kita harus memilih fungsi polinomial dengan derajat dua.
Polinomial kami akan berbentuk
f(x)=a0+a1x+a2x2+a3x3+...+akâ1xkâ1 dimana
a0=S dan
a1,...,akâ1 - bilangan bulat positif yang dipilih secara acak. Kami hanya membangun polinomial dengan gelar
kâ1 di mana koefisien gratis
a0 Apakah rahasia kita
S , dan masing-masing dari yang berikut ini
kâ1 Anggota memiliki koefisien positif yang dipilih secara acak. Jika Anda kembali ke contoh asli dan menganggap itu
S=42,k=3,a1,...,akâ1=[3,5] maka kita mendapatkan fungsinya
f(x)=42+3x+5x2 .
Pada tahap ini, kita dapat menghasilkan fragmen dengan menghubungkan
n bilangan bulat unik di
f(x)=42+3x+5x2 dimana
x neq0 (karena ini adalah rahasia kami). Dalam contoh ini, kami ingin mendistribusikan empat fragmen dengan ambang tiga, jadi kami menghasilkan poin secara acak
(18,1716),(27,3768),(31,4940),(35,6272) dan kirim satu poin ke masing-masing dari empat orang tepercaya, penjaga kunci. Kami juga memberi tahu orang-orang itu
k=3 , karena dianggap informasi publik dan diperlukan untuk pemulihan
S .
Pemulihan Rahasia
Kami telah membahas konsep interpolasi polinomial dan fakta bahwa itu mendasari skema ambang Shamir
(k,n) . Ketika tiga dari empat proxy ingin pulih
S mereka hanya perlu melakukan interpolasi
f(0) dengan poin uniknya sendiri. Untuk melakukan ini, mereka dapat menentukan poin mereka
(x1,y1),...,(xk,yk)=(18,1716),(27,3768),(31,4940) dan menghitung polinomial interpolasi Lagrange menggunakan rumus berikut. Jika pemrograman lebih dapat dipahami oleh Anda daripada matematika, maka pi pada dasarnya adalah pernyataan
for
yang mengalikan semua hasil, dan sigma adalah pernyataan
for
yang menambahkan semuanya.
P(x)= sumkj=1pj(x)
Pj(x)=yj prodk scriptstylem=1 diatas scriptstylem neqj fracxâxmxjâxm
Di
k=3 kita dapat menyelesaikan ini sebagai berikut dan mengembalikan fungsi polinomial asli kami:
\ begin {aligned} P (x) & = {y_1} \ left ({x-x_2 \ over x_1-x_2} \ cdot {x-x_3 \ lebih dari x_1-x_3} \ kanan) + {y_2} \ kiri ( {x-x_1 \ lebih dari x_2-x_1} \ cdot {x - \ _ 3 \ lebih dari x_2-x_3} \ kanan) + {y_3} \ kiri ({x-x_1 \ lebih dari x_3-x_1} \ cdot {x-x_2 \ lebih dari x_3-x_2} \ kanan) \\ P (x) & = {1716} \ kiri ({x-27 \ lebih dari 18-27} \ cdot {x-31 \ lebih dari 18-31} \ kanan) + {3768 } \ kiri ({x-18 \ lebih dari 27-18} \ cdot {x-31 \ lebih dari 27-31} \ kanan) + {4940} \ kiri ({x-18 \ lebih dari 31-18} \ cdot {x -27 \ lebih dari 31-27} \ kanan) \\ P (x) & = 42 + 3x + 5x ^ 2 \ end {aligned}
\ begin {aligned} P (x) & = {y_1} \ left ({x-x_2 \ over x_1-x_2} \ cdot {x-x_3 \ lebih dari x_1-x_3} \ kanan) + {y_2} \ kiri ( {x-x_1 \ lebih dari x_2-x_1} \ cdot {x - \ _ 3 \ lebih dari x_2-x_3} \ kanan) + {y_3} \ kiri ({x-x_1 \ lebih dari x_3-x_1} \ cdot {x-x_2 \ lebih dari x_3-x_2} \ kanan) \\ P (x) & = {1716} \ kiri ({x-27 \ lebih dari 18-27} \ cdot {x-31 \ lebih dari 18-31} \ kanan) + {3768 } \ kiri ({x-18 \ lebih dari 27-18} \ cdot {x-31 \ lebih dari 27-31} \ kanan) + {4940} \ kiri ({x-18 \ lebih dari 31-18} \ cdot {x -27 \ lebih dari 31-27} \ kanan) \\ P (x) & = 42 + 3x + 5x ^ 2 \ end {aligned}
Karena kita tahu itu
S=P(0) pemulihan
S dilakukan secara sederhana:
\ begin {aligned} P (0) & = 42 + 3 (0) + 5 (0) ^ 2 \\ P (0) & = 42 \ end {aligned}
\ begin {aligned} P (0) & = 42 + 3 (0) + 5 (0) ^ 2 \\ P (0) & = 42 \ end {aligned}
Menggunakan aritmatika integer yang tidak aman
Meskipun kami telah berhasil menerapkan ide dasar Shamir
(k,n) , kami masih memiliki masalah yang sejauh ini kami abaikan. Fungsi polinomial kami menggunakan aritmatika integer tidak aman. Perhatikan bahwa untuk setiap titik tambahan yang diterima penyerang pada grafik fungsi kami, ada lebih sedikit opsi untuk titik lainnya. Anda dapat melihatnya dengan mata kepala sendiri saat membuat grafik dengan peningkatan jumlah titik untuk fungsi polinom menggunakan aritmatika integer. Ini kontraproduktif untuk tujuan keamanan yang kami nyatakan, karena penyerang tidak harus mempelajari apa pun sampai mereka memiliki setidaknya
k fragmen.
Untuk menunjukkan seberapa lemah skema dengan bilangan bulat aritmatika, pertimbangkan skenario di mana penyerang mendapat dua poin
(18,1716),(27,3768) dan mengetahui informasi publik itu
k=3 . Dari informasi ini dia dapat menyimpulkan
f(x) sama dengan dua dan hubungkan nilai-nilai yang diketahui dalam rumus
x dan
f(x) .
\ begin {aligned} f (x) & = a_0 + a_1x + a_2x ^ 2 + a_3x ^ 3 + ... + a_ {k-1} x ^ {k-1} \\ f (x) & = S + a_1x + a_2x ^ 2 \\ f (18) \ equiv 1716 & = S + a_118 + a_218 ^ 2 \\ f (27) \ equiv 3768 & = S + a_127 + a_227 ^ 2 \ end {aligned}
\ begin {aligned} f (x) & = a_0 + a_1x + a_2x ^ 2 + a_3x ^ 3 + ... + a_ {k-1} x ^ {k-1} \\ f (x) & = S + a_1x + a_2x ^ 2 \\ f (18) \ equiv 1716 & = S + a_118 + a_218 ^ 2 \\ f (27) \ equiv 3768 & = S + a_127 + a_227 ^ 2 \ end {aligned}
Kemudian penyerang dapat menemukan
a1 menghitung
f(27)âf(18) :
\ begin {aligned} 3768 - 1716 & = (S - S) + (27a_1 - 18a_1) + (729a_2 - 324a_2) \\ 2052 & = 9a_1 + 405a_2 \\ 9a_1 & = 2052 - 405a_2 \\ a_1 & = \ frac {2052 - 405a_2} {9} \\ a_1 & = 228 - 45a_2 \ end {aligned}
\ begin {aligned} 3768 - 1716 & = (S - S) + (27a_1 - 18a_1) + (729a_2 - 324a_2) \\ 2052 & = 9a_1 + 405a_2 \\ 9a_1 & = 2052 - 405a_2 \\ a_1 & = \ frac {2052 - 405a_2} {9} \\ a_1 & = 228 - 45a_2 \ end {aligned}
Karena kami telah mengidentifikasi
a1,...,akâ1 sebagai bilangan bulat positif yang dipilih secara acak, ada sejumlah kemungkinan
a2 . Dengan menggunakan informasi ini, penyerang dapat menyimpulkan
a2 dalam[1,2,3,4,5] , karena semua yang lebih dari 5 akan dilakukan
a1 negatif. Ini ternyata benar, seperti yang kami tentukan
a2=5Kemudian penyerang dapat menghitung nilai yang mungkin
S mengganti
a1 masuk
f(18) :
\ begin {aligned} 1716 & = S + a_118 + a_218 ^ 2 \\ 1716 & = S + 18 \ kiri (228 - 45a_2 \ kanan) + a_218 ^ 2 \\ 1716 - S & = 18 \ kiri (228 - 45a_2 \ kanan) + a_218 ^ 2 \\ -S & = 18 \ kiri (228 - 45a_2 \ kanan) + a_218 ^ 2 - 1716 \\ -S & = 4104 - 810a_2 + a_218 ^ 2 - 1716 \\ S & = -4104 + 810a_2 - a_218 ^ 2 + 1716 \\ S & = 810a_2 - 324a_2 -2388 \\ S & = 486a_2 - 2388 \ end {aligned}
\ begin {aligned} 1716 & = S + a_118 + a_218 ^ 2 \\ 1716 & = S + 18 \ kiri (228 - 45a_2 \ kanan) + a_218 ^ 2 \\ 1716 - S & = 18 \ kiri (228 - 45a_2 \ kanan) + a_218 ^ 2 \\ -S & = 18 \ kiri (228 - 45a_2 \ kanan) + a_218 ^ 2 - 1716 \\ -S & = 4104 - 810a_2 + a_218 ^ 2 - 1716 \\ S & = -4104 + 810a_2 - a_218 ^ 2 + 1716 \\ S & = 810a_2 - 324a_2 -2388 \\ S & = 486a_2 - 2388 \ end {aligned}
Dengan pilihan opsi terbatas untuk
a2 menjadi jelas betapa mudahnya untuk memilih dan memeriksa nilai
S . Hanya ada lima opsi.
Memecahkan masalah dengan aritmatika integer tidak aman
Untuk menghilangkan kerentanan ini, Shamir menyarankan untuk menggunakan aritmatika modular, menggantikannya
f(x) pada
f(x) modp dimana
p in mathbbP:p>S,p>n dan
mathbbP - himpunan semua bilangan prima.
Cepat ingat cara kerja aritmatika modular. Jam dengan panah sudah merupakan konsep yang akrab. Dia menggunakan jam tangan
mod12 . Begitu jarum jam lewat dua belas, itu kembali ke satu. Sifat yang menarik dari sistem ini adalah bahwa hanya dengan melihat jam, kita tidak dapat menyimpulkan berapa banyak putaran yang telah dihasilkan oleh jarum jam. Namun, jika kita tahu bahwa jarum jam telah melewati 12 kali empat kali, kita dapat sepenuhnya menentukan jumlah jam yang berlalu menggunakan rumus sederhana
a=mq+r dimana
m Apakah pembagi kami (di sini
m=12 ),
q Adalah koefisien (berapa kali pembagi tanpa sisa pergi ke nomor asli, di sini
q=4 ), dan
r Adalah sisanya, yang biasanya mengembalikan modulo panggilan operator (di sini
r=1,5 ) Mengetahui semua nilai ini memungkinkan kita untuk memecahkan persamaan
a=49,5 tetapi jika kita melewatkan koefisien, kita tidak pernah dapat mengembalikan nilai aslinya.
Anda dapat menunjukkan bagaimana ini meningkatkan keamanan sirkuit kami dengan menerapkan sirkuit pada contoh dan penggunaan kami sebelumnya
p=73 . Fungsi polinomial baru kami
fâ˛(x)=42+3x+5x2 mod73 , dan poin baru
(18,37),(27,45),(31,49),(35,67) . Sekarang, penjaga kunci dapat sekali lagi menggunakan interpolasi polinomial untuk mengembalikan fungsi kita, hanya saja kali ini penambahan dan operasi multiplikasi harus disertai dengan pengurangan modulo
p (mis
48+93 mod73=68 )
Dengan menggunakan contoh baru ini, anggap penyerang mengenali dua poin baru ini,
(18,37),(27,45) , dan informasi publik
k=3,p=73 . Kali ini, penyerang, berdasarkan semua informasi yang dimilikinya, menampilkan fungsi berikut, di mana
mathbbN Apakah himpunan semua bilangan bulat positif, dan
qx mewakili koefisien modul
fâ˛(x) .
\ begin {aligned} f '(x) & = S + a_1x + a_2x ^ 2 \ mod 73 \\ f' (x) & = S + a_1x + a_2x ^ 2 - 73q_x: q_x \ in \ mathbb {N} \\ f '(18) \ equiv 37 & = S + a_118 + a_218 ^ 2 - 73q_ {18} \\ f' (27) \ equiv 45 & = S + a_127 + a_227 ^ 2 - 73q_ {27} \ end {aligned}
\ begin {aligned} f '(x) & = S + a_1x + a_2x ^ 2 \ mod 73 \\ f' (x) & = S + a_1x + a_2x ^ 2 - 73q_x: q_x \ in \ mathbb {N} \\ f '(18) \ equiv 37 & = S + a_118 + a_218 ^ 2 - 73q_ {18} \\ f' (27) \ equiv 45 & = S + a_127 + a_227 ^ 2 - 73q_ {27} \ end {aligned}
Sekarang penyerang kita menemukan lagi
a1 dengan komputasi
fâ˛(27)âfâ˛(18) :
\ begin {aligned} 45 - 37 & = (S - S) + (27a_1 - 18a_1) + (729a_2 - 324a_2) + (-73q_ {27} - (-73q_ {18})) \\ 8 & = 9a_1 + 405a_2 + 73 (q_ {18} - q_ {27}) \\ -9a_1 & = -8 + 405a_2 + 73 (q_ {18} - q_ {27}) \\ 9a_1 & = 8 - 405a_2 - 73 (q_ {18} - q_ {27}) \\ a_1 & = \ frac {8 - 405a_2 - 73 (q_ {18} - q_ {27})} {9} \\ a_1 & = \ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27}) \ end {aligned}
\ begin {aligned} 45 - 37 & = (S - S) + (27a_1 - 18a_1) + (729a_2 - 324a_2) + (-73q_ {27} - (-73q_ {18})) \\ 8 & = 9a_1 + 405a_2 + 73 (q_ {18} - q_ {27}) \\ -9a_1 & = -8 + 405a_2 + 73 (q_ {18} - q_ {27}) \\ 9a_1 & = 8 - 405a_2 - 73 (q_ {18} - q_ {27}) \\ a_1 & = \ frac {8 - 405a_2 - 73 (q_ {18} - q_ {27})} {9} \\ a_1 & = \ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27}) \ end {aligned}
Kemudian dia kembali mencoba menarik
S mengganti
a1 masuk
fâ˛(18) :
\ begin {aligned} 37 & = S + 18 \ left (\ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27}) \ kanan) + a_218 ^ 2 - 73q_ {18} \\ -S & = 18 \ kiri (\ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27}) \ kanan) + a_218 ^ 2 - 73q_ {18} - 37 \\ S & = -18 \ kiri (\ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27} ) \ kanan) - 324a_2 + 73q_ {18} + 37 \\ S & = 486a_2 + 21 + 219q_ {18} - 146q_ {27} \ end {aligned}
\ begin {aligned} 37 & = S + 18 \ left (\ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27}) \ kanan) + a_218 ^ 2 - 73q_ {18} \\ -S & = 18 \ kiri (\ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27}) \ kanan) + a_218 ^ 2 - 73q_ {18} - 37 \\ S & = -18 \ kiri (\ frac {8} {9} - 45a_2 - \ frac {73} {9} (q_ {18} - q_ {27} ) \ kanan) - 324a_2 + 73q_ {18} + 37 \\ S & = 486a_2 + 21 + 219q_ {18} - 146q_ {27} \ end {aligned}
Kali ini ia memiliki masalah serius. Tidak ada nilai dalam rumus
a2 ,
q18 dan
q27 . Karena ada jumlah tak terbatas dari kombinasi variabel-variabel ini, itu tidak dapat menerima informasi tambahan.
Pertimbangan Keamanan
Skema berbagi rahasia Shamir menawarkan
keamanan dalam hal teori informasi . Ini berarti matematika itu tahan bahkan terhadap penyerang dengan kekuatan komputasi tidak terbatas. Namun, rangkaian itu masih mengandung beberapa masalah yang diketahui.
Misalnya, skema Shamir tidak membuat
fragmen uji , yaitu, orang dapat dengan bebas menyajikan fragmen palsu dan mengganggu pemulihan rahasia yang benar. Seorang penjaga fragmen yang bermusuhan dengan informasi yang cukup bahkan dapat menghasilkan fragmen lain dengan mengubah
S atas kebijakannya sendiri. Masalah ini diselesaikan dengan menggunakan
skema berbagi rahasia yang terverifikasi , seperti skema Feldman.
Masalah lain adalah bahwa panjang fragmen sama dengan panjang rahasia yang sesuai, sehingga panjang rahasia mudah ditentukan. Masalah ini diselesaikan dengan secara sepele
memasukkan rahasia dengan angka acak hingga panjang yang tetap.
Akhirnya, penting untuk dicatat bahwa masalah keamanan kita mungkin melampaui lingkup skema itu sendiri. Untuk aplikasi kriptografi dunia nyata, sering ada ancaman serangan pada saluran pihak ketiga, ketika penyerang mencoba mengekstraksi informasi yang berguna dari runtime aplikasi, caching, crash, dll. Jika ini merupakan masalah, Anda harus mempertimbangkan dengan hati-hati penggunaan perlindungan selama pengembangan, seperti fungsi dan pencarian dengan waktu berjalan yang konstan, mencegah penyimpanan memori pada disk, dan mempertimbangkan sejumlah hal lain yang berada di luar cakupan artikel ini.
Demo
Halaman ini memiliki demo interaktif skema berbagi rahasia Shamir. Demonstrasi dibuat berdasarkan pustaka
ssss-js , yang dengan sendirinya merupakan port JavaScript dari program
ssss populer. Perhatikan bahwa menghitung nilai besar
k ,
n dan
S mungkin perlu waktu.